首页
社区
课程
招聘
[求助]什么是覆写DefWindowProc?
发表于: 2014-7-22 12:13 4404

[求助]什么是覆写DefWindowProc?

2014-7-22 12:13
4404
在百度百科上看SendMessage函数,百科上说:

      实现sendmessage发送消息的接收,在消息的接收方,覆写DefWindowProc(),在该方法中即可接收到sendmessage方法发送来的消息。因为sendmessage发送的消息,不再经过消息队列,而是直接发送给指定对象。所以一般的消息响应,包括PreTranslateMessage方法都无法接收到该信息,只能通过覆写DefWindowProc方法,来接收信息

什么是覆写DefWindowProc?为什么要覆写?怎么写?原因和机理是什么?求大神解释一下。

我看罗云彬的win32汇编将SendMessage()也没提到这点呀?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
应该是C#或者VB上的东西。
用纯API编程只需要在窗口函数的消息分支响应就行了。
DefWindowProc这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理。
2014-7-22 12:29
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
DefWindowProc顾名思义,默认窗口过程。
就是你的窗口过程里面有一些不需要处理的消息,就要交给DefWindowProc来处理。
复写DefWindowProc?应该是类似于HOOK DefWindowProc?
2014-7-22 13:09
0
雪    币: 21
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
api看MSDN。管写百度百科的这些逗比干什么
覆写 是 面向对象方面的语法。函数就函数,还非要写成"方法"以示专业,看看这些软件逗比
2014-7-22 15:17
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
呵呵,你太高看C#了,区区SendMessage哪里用得到HOOK。
C#中创建一个窗口不用自己写窗口函数的,直接从Form类继承DefWndProc。有点像MFC。
当要自己处理消息时,就要override这个窗口函数了。
这就叫覆写(类似于C++继承时,写一个与父类同名同参的函数,把父类的函数隐藏了):

class myform : Form	//继承窗体类
{
	const int WM_LBUTTONDOWN = 0x201;	//鼠标消息
	protected override void DefWndProc(ref Message m)	//override窗体类的DefWndProc函数
	{
		if (m.Msg == WM_LBUTTONDOWN) // 处理感兴趣的消息
		{
			MessageBox.Show("hello");
		}
		else
		{
			base.DefWndProc(ref m);//丢给父类的DefWndProc
		}
	}
}

2014-7-22 18:14
0
游客
登录 | 注册 方可回帖
返回
//