没有 wndproc 的窗口
Posted
技术标签:
【中文标题】没有 wndproc 的窗口【英文标题】:window without 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 外部获取它?
【问题讨论】:
对于窗户来说,这是一种非常不寻常的事情。你为什么要这样做?可能有更合适的不同方法。 【参考方案1】:AFAIK,您不能将其设置为 NULL
。但是,您会注意到DefWindowProc
的签名与WindowProc
回调的签名相匹配。如果你想要一个合理的默认值,只需给它DefWindowProc
。
【讨论】:
谢谢,我会选择这个解决方案。【参考方案2】:抱歉,这没有任何意义。如果没有 wndproc,你怎么能得到消息?
没有窗口进程的窗口不是窗口!
【讨论】:
【参考方案3】:不,你会破坏 SendMessage()。只有 PostMessage() 可以工作。需要支持 SendMessage。
【讨论】:
以上是关于没有 wndproc 的窗口的主要内容,如果未能解决你的问题,请参考以下文章