如下代码
protected override void WndProc(ref Message m)
{
const int WM_ERASEBKGND=0x14;
if (m.Msg!=WM_ERASEBKGND)
base.WndProc(ref m);
}
问题 1 上述代码屏蔽WM_ERASEBKGND?去掉base.WndProc(ref m)会怎样,请解释WndProc原理。
问题 2 如何知道0x14代表WM_ERASEBKGND,有什么好的查询手册吗?
protected override void WndProc(ref Message m)
{
const int WM_ERASEBKGND=0x14;
if (m.Msg!=WM_ERASEBKGND)
base.WndProc(ref m);
}
问题 1 上述代码屏蔽WM_ERASEBKGND?去掉base.WndProc(ref m)会怎样,请解释WndProc原理。
问题 2 如何知道0x14代表WM_ERASEBKGND,有什么好的查询手册吗?
WndProc是从C++来的吧,原理好复杂问题2,当然是要查MSDN了,也可以从网上搜索Windows消息手册
protected override void WndProc(ref Message m)
{
// base.WndProc(ref m);
}去掉base.WndProc(ref m),提示 创建窗口句柄时出错。
很迷惑,那个帮忙解释下报这个错的来龙去脉,心急!WndProc扮演的什么角色?
分不够可以再加!
-----------------------------------------------------------
代码对非WM_ERASEBKGND消息才进行处理,就是达到屏蔽的效果了.
WndProc不能去掉.它是窗体主要的消息处理函数.去掉它什么也干不了.
WndProc的实现大概是这样的:
protected void WndProc(ref Message m)
{
switch(m)
{
case WM_QUIT: /*处理退出消息....;*/ break;
case WM_PAINT:/*处理paint消息...*/ break;
... ...
default:
defWndProc(ref m); //其他消息调用默认的消息处理函数
}
}
问题 2 如何知道0x14代表WM_ERASEBKGND,有什么好的查询手册吗? msdn
你好。
我 去掉base.WndProc(ref m),提示 创建窗口句柄时出错。窗口句柄创建与WndProc有什么关系?
创建窗体时发送的WM_CREATE消息这些都处理不了,当然出错了.如果想了解多一点的消息机制,你可以找<windows编程>看一下,第一章讲的就是这个.
我现在就去书城买 Windows编程去。
请问base.WndProc(ref m); 为什么要用ref m,消息为什么要用引用类型?
至于你的第二个问题还不太好查,MSDN上是找不到消息值的,如果你装了VC++有关内容的话,可以到VC++ 目录下找winuser.h还是windef.h里面有消息的宏定义,具体那个我不记得了
base.WndProc(ref m);这个函数执行的次数年是非常大的,引用会提高效率。
ref m这样解释是不是很牵强啊?还是确实有理?