【问题标题】:window without wndproc没有 wndproc 的窗口
【发布时间】:2011-02-10 20:38:30
【问题描述】:

我很好奇可以不使用 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 外部获取它?

【问题讨论】:

  • 对于窗户来说,这是一种非常不寻常的事情。你为什么要这样做?可能有更合适的不同方法。

标签: c++ windows


【解决方案1】:

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

【讨论】:

  • 谢谢,我会选择这个解决方案。
【解决方案2】:

抱歉,这没有任何意义。如果没有 wndproc,你怎么能得到消息?

没有窗口进程的窗口不是窗口!

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2022-10-05
      相关资源
      最近更新 更多