곧 삭제 될 수도있는 간단한 질문이지만 다른 곳에서는 찾을 수없는 문제가 있습니다 (적어도 Google은 도움이되지 않음).MFC 창의 Winapi 하위
MFC를 기반으로하는 소프트웨어 용 플러그인을 작성하려고하지만 MFC를 직접 사용하지 않습니다. 결국, 나는 적절한 핸들과 모듈을 사용하여 winapi로 윈도우를 생성하여 MFC와 작업 할 수 있다고 생각했지만 그렇게 쉽게 보일 수는 없다. "모달"창을 시작하려고합니다 (즉, EnableWindow(parentHwnd, FALSE)
을 호출하여 부모를 차단합니다). 사용자가 내가 부모를 활성화하고 단지 내 사용자 지정 창을 닫으려면 창을 닫을 때
LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
//Do stuff to get a HWND to the parent window
switch(msg) {
case WM_CLOSE:
EnableWindow(parentHwnd, TRUE);
//DestroyWindow(hwnd);
return DefWindowProc(hwnd, msg, wParam, lParam);
case WM_DESTROY:
EnableWindow(parentHwnd, TRUE);
//PostQuitMessage(0);
return DefWindowProc(hwnd, msg, wParam, lParam);
//... Handling other messages
:이 창을 위해 나는 정의의 WndProc 함수를 썼다. DestroyWindow(hwnd)
및 PostQuitMessage(0)
함수에 주석이 달려 있으며, 대신 DefWindowProc
을 반환합니다. 이다의 주석 처리를 제거 메시지, 다음을 제외하고 모든 응용 프로그램이 충돌 떠나는 이유는
내 첫번째 추측은 윈도우의 메시지에 문제가 있음을 것입니다. 내가 "DECLARE_MESSAGE_MAP"매크로 또는 무언가를 MFC의 wndProc 내 이벤트를 처리하도록 사용해야하는지 모르겠습니다. 나는 창문 개발의 초심자이기 때문에이 충돌에 대한 해결책을 찾았음에도 불구하고 왜 처음에는 실패했는지 모르겠다. 고맙습니다!
'PostQuitMessage()'당신이 응용 프로그램을 종료 할 _actually_하지 않는. 그냥 코멘트를 써서 해봤습니까? 'DestroyWindow()'를 유효하게 둡니다. –
MFC 응용 프로그램에 일반적인 C 또는 C++ 구현 창을 포함시키는 데 문제가 없어야합니다. 표준 버튼 등이 작동하고 그들은 plain-ol 'C로 작성되었습니다. –
정보가 없어도 문제가 무엇인지 알기가 어렵습니다. 플러그인은 어떻게로드됩니까? 소유자 윈도우와 다른 스레드에서 실행됩니까? 예외가 발생했을 때 디버거를 중단 할 수있는 옵션을 설정 했습니까 (오류 메시지의 코드를보고 어떤 유형의 예외가 수신되는지 확인하십시오). 당신이 그것을 한 후에, 부적당 한 논쟁은 무엇입니까? 여하튼, Windows API 윈도우와 MFC를 혼합하는 것은 문제가되지 않습니다. MFC는 Windows API를 둘러싼 C++ (- ish) 래퍼입니다. – IInspectable