没有wndproc的窗口

时间:2011-02-10 20:38:30

标签: c++ windows

我很好奇可以在不使用WndProc的情况下创建一个窗口。

所以我想注册窗口类,并将lpfnWndProc字段设置为NULL; 并以我自己的方式使用msg(由TranslateMessage(& msg)提供)。

这有什么缺点吗?

非常感谢,对不起我的语法。

编辑#1: 好的,我有一个窗口,但我错了。

 MSG msg;
    while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)) {
        if (msg.message == WM_QUIT) return false;
        else {
                TranslateMessage(&msg);
                switch (msg.message) {
                case WM_CREATE:
                    createContext();
                    break;
                default:
                    DispatchMessage(&msg);
                    break;
                }
        }
    } 
    return true;

未调用createContext。 为什么?哪里错了? 是的,也许要将WM_CREATE消息发送到WndProc(现在是DefWindowProc),但是有没有办法从WndProc中获取它?

3 个答案:

答案 0 :(得分:7)

AFAIK,您无法将其设置为NULL。但是,您会注意到DefWindowProc的签名与WindowProc回调的签名相匹配。如果您想要一个合理的默认值,只需给它DefWindowProc

答案 1 :(得分:2)

抱歉没有意义。如果没有wndproc,你怎么能掌握这个消息?

没有窗口proc的窗口不是窗口!

答案 2 :(得分:2)

不,你会破坏SendMessage()。只有PostMessage()可以工作。需要支持SendMessage。