拦截控件的事件用消息怎么控制

来源:百度知道 编辑:UC知道 时间:2024/05/31 20:04:36
一般对整个窗体或系统的消息拦截,好弄,比如要让对DBGRID的点击无效,比如,我在点增加或修改后,不让对DBGIRD的选择起作用,要拦截鼠标事情,怎么用啊!其它控件的拦截消息怎么弄啊,请高手们指点下迷津。
我用的是DELPHI 最好提供下具体的例子!!!

有3个方法/
1 嫁接application.OnMessage
property OnMessage: TMessageEvent read FOnMessage write FOnMessage;
这个事件会处理整个程序的消息
2 嫁接DBGrid的windowProc过程
这个事件会处理控件的所有消息,直接屏蔽掉鼠标左键就可以了.

3 消息事件 如果WM_NCLBUTTONDOWN
WM_NCLBUTTONUP 2个就是一个鼠标单击的事件所需要的消息

具体可以参考delphi精要 一书.

在消息由TranslateMessage()和DispatchMessage()处理之前,CWinApp::Run()会调用CWinApp::PreTranslateMessage().

CWinApp::PreTranslateMessage()只带有一个参数:一个指向MSG结构的指针。

然后,CWinApp::PreTranslateMessge()会从目标窗口(由MSG结构中的窗口句柄指定)到应用程序的主窗口搜索每个窗口的CWnd::PreTranslateMessage()函数,直到其中有一个进行了处理。

因此,你可以在任一个从CWnd的派生类中改写该成员函数