반응형

MFC 4

MFC WebView2(IE Edge, 엣지) 컨트롤

윈도우에서 웹을 보여주는 기존 인터넷익스플로어(IE)기반 컨트롤은 상대적으로 느리고 HTML5등 최신 웹에 대한 호환성도 좋지 않습니다. 그래서 MS가 인터넷익스플로어에서 엣지(Edge)로 웹브라우저를 변경했듯이 WebView2라는 엣지 기반의 웹을 보여주는 컨트롤을 외부 라이브러리로 제공하여 줍니다. 만들고 있는 C++ MFC 기반의 클라이언트에서 특정 정보들을 웹으로 보여주는 관계로 WebView2 컨트롤을 위 스크린 샷처럼 사용하여 보았습니다. 실제 코딩은 Code Project의 WebView2 Edge Browser in MFC C++ Application를 참조하여 만들었습니다. 적용하는데 반나절 정도 걸렸는데 적용하기가 IE기반 컨트롤에 비하여 조금은 까다롭습니다. 해당 소스를 보면 컨트롤을..

MFC 다이얼로그에서 컨트롤 관련 깜박임 문제 해결

컨트롤에서 자식 컨트롤 관련하여 MoveWindow등을 사용하여 위치나 크기를 변경하였을 때, 컨트롤에서 깜박임(flickering) 현상이 발생합니다. 이때 페인트되는 영역에서 자식 컨트롤 부분을 제외하기 위하여 컨트롤 속성에 WS_CLIPCHILDREN 속성을 주면 깜박임 문제를 해결할 수 있습니다. 비슷한 예로 컨트롤에 더블버퍼링 등을 적용하여도 다이얼로그(dialog)에 있는 컨트롤(control)에 대해서 MoveWindow 등을 사용하여 위치나 크기를 변경하면 깜박임 (flickering) 현상이 발생합니다. 이럴 때는 다이얼로그에 WS_CLIPCHILDREN 속성을 아래 스크린샷처럼 설정하여 주면 깜박임 문제를 해결할 수 있습니다.

MFC 모든 차일드 윈도우 얻어오는 방법

wchar_t className[255]; CWnd* child = this->GetWindow(GW_CHILD); while (child) { ::GetClassName(child->GetSafeHwnd(), className, sizeof(className) / sizeof(wchar_t)); TRACE(L"%s\n", className); child = child->GetWindow(GW_HWNDNEXT); } MFC에서 현재 윈도우의 모든 자식 윈도우을 얻어와 자식 윈도우의 등록된 클래스 이름을 디버그로 표시하는 예제입니다. 해당 예제는 CWnd를 상속받은 클래스에서 동작하는 예제입니다. CWnd를 상속받지 않은 다른 곳에서 사용할 때는 약간의 응용이 필요합니다.

MFC 커스텀컨트롤에서 CWnd의 OnCreate 불리지 않는 문제 해결법

MFC의 커스텀컨트롤은 생성되기 전에는 서브클래싱이 일어나지 않습니다. 그런 관계로 커스텀컨트롤에 대입된 CWnd 상속 객체의 WM_CREATE메세지에 대한 대응 함수인 OnCreate가 호출되지 않습니다. 물론 서브클래싱이 일어난 이후에는 모든 메세지에 대한 CWnd 함수가 정상적으로 호출됩니다. 그런데 커스텀컨트롤에서 차일드 컨트롤을 만드는 일과 같이 OnCreate에서 하면 좋은 작업이 있습니다. 이럴 때는 CWnd의 PreSubclassWindow 함수를 재정의하고 여기에서 해주면 됩니다. 관련 참고는 아래와 같습니다. why oncreate() not called

반응형