这是一个简单的问题,我可能会尽快删除,但我有一个问题,我似乎无法在其他任何地方找到(至少谷歌没有帮助)。
我正在尝试为MFC中的软件编写一个插件,但我拒绝自己使用MFC。我认为,最后,我可以使用正确的手柄和模块来创建我的窗口与winapi与MFC一起工作,但它似乎并不那么容易。我正在努力推出一个" Modal"窗口(也就是说,它通过调用EnableWindow(parentHwnd, FALSE)
来阻止父窗口)。在这个窗口中,我编写了一个自定义的wndProc函数:
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
当用户关闭窗口时,我想启用父窗口并只关闭我的自定义窗口。您可以看到函数DestroyWindow(hwnd)
和PostQuitMessage(0)
已被注释,而我返回DefWindowProc
。这是因为将消息取消注释,整个应用程序崩溃时出现以下异常:
我的第一个猜测是Windows中的消息存在问题。我不知道我是否被迫使用" DECLARE_MESSAGE_MAP"宏或什么来处理我在MFC的wndProc中的事件。我是Windows开发的初学者,所以即使我找到了这个崩溃的解决方案,我也不太满意,因为我不知道为什么它首先失败了。谢谢!
答案 0 :(得分:0)
首先,什么是"插件"究竟?根据我的猜测,它必须只是一些额外的代码,内置在主要的可执行文件中(否则你不会询问消息映射和那个" MFC' wndProc")。至于你的问题,也许你真的不需要深入研究这个问题。我只是想知道它是否会起作用:
DialogBox(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD_MYDIALOG), parentHwnd, MyDlgProc);