[MFC] 대화상자 숨기기, OnWindowPosChanging 사용

개발을 하다 보면 사용자에게 UI를 보여주지 않고 백그라운드로 실행 해야할 프로그램을 만들어야 할 때가 있습니다.그럼 보통 ShowWindow( SW_HIDE )를 사용하거나 CreateEx로 윈도우 생성 시 투명 속성을 줄 수 있습니다.MFC의 경우 SW_HIDE를 하는데 중요한건 OnInitDialog에서 해도 대화상자가 보인다는 겁니다. 아래 그림과 같이 WM_WINDOWPOSCHANGING을 받는 OnWindowPosChanging을 생성합니다. 그리고 함수 내부에 아래와 같이 코딩합니다. 이 상태로 빌드 후 … Read more

[MFC] Static DLL(정적 DLL) 만들기

정적 라이브러리와 동적 라이브러리에 대한 설명은 다른 링크를 참고해주세요. 확장 DLL 만드는법에 대한 설명은 여기를 참조해주세요. 정적 DLL을 만들어 보겠습니다. 새 프로젝트 -> MFC -> MFC DLL을 선택하셔서 프로젝트를 생성해 줍니다. “MFC를 정적으로 링크한 기본 DLL”을 선택하시고 마침을 눌러줍니다. 그러면 아래와 같이 프로젝트 하나 생성됩니다. CMFCLibrary1App에 간단한 더하기 함수 int SumXY(int iX, int iY); 를 추가해 줍니다. MFCLibrary1App.h에 … Read more

[WinAPI] Tray Icon, 트레이아이콘

오늘은 트레이아이콘에 대해 알아보겠습니다. 아래 그림과 같이 작업표시줄 우측에 조그만 그림으로 표시된 것을 트레이 아이콘이라 합니다. 트레이 아이콘은 아이콘 표시 뿐만 아니라, 알람과 메뉴를 만들수 있어서 사용 편의성을 위해서 많이 사용 됩니다. 이번 글에서는 트레이 아이콘을 생성, 변경, 삭제, 알람 표시, 메뉴 표시까지 해보겠습니다. 1. 트레이 아이콘 만들기전 세팅 우선 MFC 대화상자로 프로젝트 생성해주시고 아래와 같이 생성, 작제 변경, 알람 버튼 4개를 … Read more

[WinAPI] CriticalSection, 임계영역

이번 글에서는 임계영역에 대해 알아보겠습니다. 임계 영역(Critical Region)은 병행 처리(Concurrent Processing)에서 공유 자원에 접근하는 부분을 말합니다. 공유 자원은 여러 개의 스레드나 프로세스들이 동시에 접근할 수 있는 자원을 말합니다. 예를 들어 아래와 같이 전역 변수 a에 10을 더해주고 출력하는 쓰레드1이 있다고 가정합니다. 쓰레드1만 실행하는 경우 의도한 대로 10이 더해지고, a를 출력하면 10이 출력될겁니다.하지만 10을 빼는 쓰레드 … Read more

[MFC] Extension DLL (확장 DLL) 만들기

오늘은 Extension DLL을 만드는 법에 대해 알아보겠습니다. 보통 실무에서 DLL이라 하면 쓰임새가 사용합니다.(다른 용도로 사용할 수도 있지만 보통 이렇게 사용하죠.) 간단히 설명하자면,A프로젝트에 더하기 기능이 필요하여 더하기 함수를 만들었습니다.그런데 개발을 하다보니 프로젝트양이 커져서 B프로젝트도 생겼는데 이 B프로젝트에도 더하기 함수가 필요해졌습니다.그럼 A프로젝트, B프로젝트에 더하기 함수가 두개여야 할까요?그럴 필요 없이 DLL로 만들어서 A프로젝트와 B프로젝트가 DLL에 있는 더하기 함수를 참조하면 된다는 겁니다.바로 만드는 법을 … Read more

[WinAPI] SendMessage, PostMessage

윈도우 메시지에 대한 개념은 이 블로그에서 익히길 추천합니다. 오늘은 MFC를 이용하여 메시지 사용법에 대해 알아보겠습니다.메시지를 보내기 위해 SendMessage와 PostMessage를 사용하는데 이 둘의 차이는 동기냐 비동기냐 차이입니다.SendMessage의 경우 메시지를 수신한 쪽에서 처리를 완료할 때까지 대기하는 함수이고, PostMessage는 수신한 쪽의 처리를 신경쓰지 않는 함수입니다. Visual C++에서 MFC 프로젝트를 하나 생성 한 후 아래와 같이 Static Control, Edit … Read more

[MFC] Slider Control ( 슬라이더 컨트롤 )

오늘은 Slider Control 에 대해 알아보겠습니다. 저번 글에 알려드린 Spin Control과 다르게 드래그, 슬라이더가 가능한 컨트롤입니다. 대화상자에 Slider Control, Edit Box를 추가합니다. Slider Control 속성에서 ID는 IDC_SLIDER_TEST로 변경합니다. Edit Box 속성에서 ID는 IDC_EDIT_TEST로, Number는 TRUE로 합니다. Slider Control을 우클릭 -> 변수 추가하신 뒤 변수 이름을 m_sldTest로 하고 마침버튼을 클릭합니다. Edit Box를 우클릭 -> 변수 추가하신 … Read more

[MFC] Spin Control (스핀 컨트롤)

오늘은 Spin Control에 대해서 알아보겠습니다. 보통 Edit Box 같이 사용하는데 마우스로 클릭해서 값을 변경하기 위해 사용합니다. 아래와 같이 Edit Box와 Spin Control을 추가합니다. Edit Box의 속성에서 ID는 IDC_EDIT_TEST, Number는 TRUE로 변경합니다. ( Number는 선택 사항 ) 그런 다음 Edit Box를 우클릭 -> 변수 추가를 한 뒤 변수 이름에 m_edTest를 입력합니다.Spin Control 속성에서 ID는 IDC_SPIN_TEST, Alignment는 … Read more

[MFC] 콤보 박스(Combo Box), 체크 박스(Check Box)

안녕하세요 오늘은 콤보 박스와 체크 박스에 대해 알아보겠습니다. 1. 콤보 박스 도구 상자에서 Combo Box를 만들어 줍니다. Combo Box 속성에서 ID는 IDC_COMBO_TEST로 해주시고 Type은 Drop List로 해줍니다. Combo Box를 우클릭하셔서 변수 추가를 선택합니다. 변수명을 m_cbTest로 입력한 뒤 마침을 선택합니다. 그러면 헤더 파일에 아래와 같이 입력이 됩니다. OnInitDialog에 아래와 같이 초기화를 해줍니다. 이 상태로 실행을 시키면 … Read more

[MFC] Radio Button + Group

안녕하세요 오늘은 라디오 버튼 그룹화 하는 것까지 알아보겠습니다.우선 라디오 버튼 3개를 만들어 줍니다. 리소스 뷰에서 대화상자를 선택하신 후 Ctrl + D를 입력하시면 아래와 같은 그림이 나오는데, 마우스 왼쪽 클릭을 하시면 숫자가 변하는걸 보실 수 있습니다.마우스 왼쪽 클릭을 라디오 버튼 1부터 2, 3 순서대로 클릭하시면 숫자가 순서대로 설정됩니다. 라디오 버튼 1 ~ 3의 속성을 아래와 같이 … Read more