Vcl封装Win32的标准控件后,是如何处理消息的呢?我们能否先于“标准控件”得到消息呢?
比如ComboBox的CB_SHOWDROPDOWN消息,然后就可拦截了?
DELPHI的消息处理过程为:MainWndProc
|
WndProc
|
Dispatch
|
Message Handler
|
Method
|
Event Handler誰给说下,是怎样,在什么地方将消息传递给控件的原消息处理函数的?还有如将Win32的标准控件
子蕊化后要不要处理WM_PAINT消息?3Q
比如ComboBox的CB_SHOWDROPDOWN消息,然后就可拦截了?
DELPHI的消息处理过程为:MainWndProc
|
WndProc
|
Dispatch
|
Message Handler
|
Method
|
Event Handler誰给说下,是怎样,在什么地方将消息传递给控件的原消息处理函数的?还有如将Win32的标准控件
子蕊化后要不要处理WM_PAINT消息?3Q
解决方案 »
- 按开始按钮,循环生成随机数,按停止按钮停止生成。如何实现?
- 今天9:30,联想宣布并购IBM全部PC业务!成为世界第三大PC制造商!!
- 很弱的问题:我的delphi7中file|new|multitier中为何没有有关corba的东西呢?
- 游标问题,执行过程中不能修改其它表
- 文字处理!!如何使画布往显示器里面方向旋转180度???
- 你们买到d版的delphi8了吗?
- 一个超级简单的问题。
- TrayICon控件问题?我搞不定!
- delphi5 如何屏蔽dbgrid提示错误信息
- 请教关于Tcomboobox的问题
- 如何自定义设置MaskEdit中的EditMask属性
- 用delpih 合并Word 表格中的单元格
虽然VCL对这些控件的回调函数进行了替换,但最后还是调用了原始的窗口回调函数,你可以好好看看inside VCl
在TWinControl.DefaultHandler中的
Result := CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);
就是调用原始的窗口回调函数
有些消息是必须要在这些原始的窗口回调函数中处理的,比如Wm_Paint,否则就会出现错误。
你可以通过子类化拦截处理wm_paint消息从而绘制不同的控件,但必须在Callwindowproc后(VCL中必须在inherited后),否则控件还是原始模样,缺陷是控件被绘制了两次,很费资源。好一点方法就是用OwnerDraw拦截Wm_Drawitem消息进行处理。