MFC窗口的Winapi孩子

时间:2017-12-14 17:40:44

标签: visual-c++ mfc

这是一个简单的问题,我可能会尽快删除,但我有一个问题,我似乎无法在其他任何地方找到(至少谷歌没有帮助)。

我正在尝试为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。这是因为将消息取消注释,整个应用程序崩溃时出现以下异常:

enter image description here

我的第一个猜测是Windows中的消息存在问题。我不知道我是否被迫使用" DECLARE_MESSAGE_MAP"宏或什么来处理我在MFC的wndProc中的事件。我是Windows开发的初学者,所以即使我找到了这个崩溃的解决方案,我也不太满意,因为我不知道为什么它首先失败了。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,什么是"插件"究竟?根据我的猜测,它必须只是一些额外的代码,内置在主要的可执行文件中(否则你不会询问消息映射和那个" MFC' wndProc")。至于你的问题,也许你真的不需要深入研究这个问题。我只是想知道它是否会起作用:

DialogBox(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD_MYDIALOG), parentHwnd, MyDlgProc);