Best click
-
MFC Dialog 호출 시 실행되는 메세지 순서
DoModal() PreSubclassWindow() OnNcCreate() OnNcCalcSize() OnCreate() OnSize() OnMove() OnSetFont() OnInitDialog() OnWindowPosChanging() OnMove() OnWindowPosChanged() OnWindowPosChanging() OnNcActivate() OnActivate() OnShowWindow() OnWindowPosChanging() OnNcPaint() OnEraseBkgnd() OnChildNotify() OnCtlColor() OnWindowPosChanged() OnPaint() OnCtlColor() OnCtlColor() OnNcHitTest() OnSetCursor() PreT..
2017.01.03
-
(2) MFC 초기화 함수 : InitInstance, OnInitDialog
CMFCApplication1App::InitInstance 함수 InitInstance 함수는 이 프로세스의 초기화 함수 입니다. CMFCApplication1App이 상속받고 있는 CWinApp의 InitInstance 함수를 호출합니다. 이 프로세스의 초기화 루틴에서 해야할 동작들은 CWinApp의 InitInstance 함수에 이 프로세스의 초기화 루틴들이 이미 있어요. 내가 만드는 프로그램은 이 함수를 호출해주기만 하면 됩니다. 그리고나서 InitInstance 함수 밑에보시면 CMFCApplication1Dlg 의 인스턴스를 생성해서 아직까지 뭔지는 몰라도 DoModal이라는 함수를 호출해주고 있죠. 이 프로세스에서 윈도우를 생성해주는 부분이라고 생각하시면 됩니다. CMFCApplication..
2020.08.08
-
(1) MFC 시작하기
MFC 가 뭔지는 모르겠지만 윈도우에서 UI가 있는 프로그램을 만들기 위해 이 글을 읽고 계실거라 생각합니다. MFC 란 무엇인지? 에 대해서는 구글링하면 정의가 아주 많이 나와있어요. 이 글을 보고 있는 분들은 MFC가 무엇인지 보다는, MFC 라이브러리를 이용해서 프로그램을 어떻게 만드는지, Visual Studio로 MFC 프로젝트 생성은 했는데 도대체 여기 있는 소스들이 뭘 의미하는지, 어디서부터 뭘 해야할지 모르겠어서 찾아보는 분들일 거라 추측합니다. (제가 그랬거든요) 각설하고, 짧고 굵게 본론만 설명합니다. 더보기 참고로 Visual Studio 안깔려 있으시면 이 글을 참조하시면 됩니다. C++ 개발자를 위한 Visual Studio 설치하는 방법 2020/08/08 - [Dev Notes..
2020.08.08
-
[다이얼로그 배경색 지우기] OnEraseBkgnd 와 OnCtlColor
다이얼로그의 배경 색을 바꾸는 예제는 아래와 같다 BOOL MainWnd::OnEraseBkgnd(CDC* pDC) { CRect r; GetClientRect(r); // 배경색을 파란색으로 변경한다. 흰색은 RGB(255,255,255) pDC->FillSolidRect(r, RGB(0,0,255)); return TRUE; } 문제는 OnCtlColor 에서도 마지막 매개변수인 nCtlColor 값을 CTLCOLOR_DLG 로 설정하면 다이얼로그 배경색을 바꿀 수 있는데, OnEraseBkgnd 함수를 호출하는 메시지 WM_ERASEBKGND 의 정의 : 창 배경을 지워야 함을 나타냅니다. OnCtlColor 함수를 호출하는 메시지 WM_CTLCOLOR 의 정의 : 컨트롤이 그려지려고 함을 나타냅니..
2020.08.08
MFC (Windows library)
more
Basic Modern C++
-
C++ 11 : default, delete 키워드
default 컴파일러가 함수를 자동으로 생성하도록 명시적으로 지정 delete 컴파일러가 함수를 자동으로 생성하지 않도록 명시적으로 지정 class TEST { public: TEST() = default; TEST(const TEST&) = default; ~TEST() = default; TEST & operator=(const TEST) = delete; void* operator new(size_t) = delete; // new로 할당하지 못하게 방지 }; Q. 멤버 변수를 기본 타입이 아닌 사용자가 정의한 클래스 타입으로 멤버변수를 갖고있는 클래스이면 위에 처럼 TEST( const TEST& ) = default; 로 선언해도 깊은 복사가 이루어질까? 안될거같은데?
2020.08.08
-
C++ 11 : 지연 평가
컴퓨터 프로그래밍에서 느긋한 계산법(Lazy evaluation)은 계산의 결과값이 필요할 때까지 계산을 늦추는 기법이다. (개념적인 부분) 느긋하게 계산하면 필요없는 계산을 하지 않으므로 실행을 더 빠르게 할 수 있고, 복합 수식을 계산할 때 오류 상태를 피할 수 있고, 무한 자료 구조를 쓸 수 있고, 미리 정의된 것을 이용하지 않고 보통 함수로 제어 구조를 정의할 수 있다. 이렇게 얘기하면 무슨말인지 와닿지 않을 것이다. 앞에 얘기는 다 까먹고 그냥 새롭게 얘기를 해보자. Effective C++ 에서는 '변수 정의는 최대한 늦출 수 있을때까지 늦춰라' 라는 말이 있는데, 보통 우리는 변수 선언은 함수의 최상단에 몰아놓는 경향이 있다. 코드의 가독성 때문이기도 하는데, ( 내 생각엔 학교에서 프로그래..
2020.08.08
-
C++ 11 : 일급 함수 (1)다른 함수의 매개변수로 함수 전달
std::function 은 호출 가능한 함수, 람다 표현식, 또는 다른 함수 객체, 멤버 함수에 대한 포인터, 멤버 변수에 대한 포인터 등을 저장, 복사, 호출할 때 사용한다. typedef 키워드는 다른 타입이나 함수에 대한 별칭을 정의할 때 사용한다. // ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include "pch.h" #include #include #include #include // 0) return x / y; else return -1; } /* 함수 포인터를 매개변수로 받는 함수 정의 */ void PassingFunc(FuncType fn, int x, int y) { cout
2020.08.08