Windows SDK笔记(三):定制控件消息处理函数
作者:冯明德

一、概述
控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供。
但当需要对控件进行特殊控制时,可以提供一个消息处理函数,替换原来的消息处理函数。
自己的处理完成后,再调用控件的缺省消息处理。

二、相关函数
1.窗口类的属性可以通过GetWindowLong和SetWindowLong进行读取和设置

LONG GetWindowLong(HWND hWnd,  // handle to windowint nIndex  // offset of value to retrieve);LONG SetWindowLong(HWND hWnd,       // handle to windowint nIndex,      // offset of value to setLONG dwNewLong   // new value
);

可以返回或设置以下内容:
nIndex值 意义
GWL_EXSTYLE 扩展风格
GWL_STYLE 风格
GWL_WNDPROC 消息处理函数
GWL_HINSTANCE 实例
GWL_ID 窗口ID
GWL_USERDATA 用户数据
DWL_DLGPROC 对话框消息处理函数
DWL_MSGRESULT
DWL_USER

所以使用

OldMsgProc = (WNDPROC)SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc);

将控件消息处理函数替换成MyMsgProc,原处理函数被OldMsgProc记录。

2.调用消息处理函数

LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,  // pointer to previous procedureHWND hWnd,              // handle to windowUINT Msg,               // messageWPARAM wParam,          // first message parameterLPARAM lParam           // second message parameter
);

三、示例
1.提供新处理函数

//记录原来处理函数的全局变量
WNDPROC OldMsgProc;//新消息处理函数
LRESULT MyMsgProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{switch(message){case WM_LBUTTONDOWN:::MessageBox(NULL,"click!","",MB_OK);}//调用控件原来的消息处理函数return CallWindowProc(OldMsgProc,hwnd,message,wParam,lParam);
}

2.建立窗口后,更改消息处理函数

case WM_CREATE:
{HWND hControlWnd = CreateWindowEx(0,"BUTTON",TEXT("按钮(&A)"),WS_CHILD | WS_VISIBLE|BS_PUSHBUTTON,10,10,100,100,hwnd,(HMENU)1000,   //控件ID((LPCREATESTRUCT) lParam)->hInstance,  //实例句柄NULL);//嵌入新的消息处理函数OldMsgProc = (WNDPROC) SetWindowLong (hControlWnd, GWL_WNDPROC, (LONG)MyMsgProc);
}
return 0;

定制控件消息处理函数相关推荐

  1. Windows SDK笔记(三):定制控件消息处理函数

    From: http://www.vckbase.com/document/viewdoc/?id=1009 一.概述 控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供. 但当需要对控 ...

  2. 数据窗口控件的函数Describe()

    Describe()  功能:返回数据窗口控件结构方面的指定信息包括DataWindow   对象以及数据窗口  对象中其他对象的属性取值数据窗口中的每个列每个标题等等都是对象各自都有一  组描述其特 ...

  3. HQChart使用教程5- K线图控件操作函数说明

    K线图控件操作函数说明 周期切换 切换股票 切换指标 增加一个窗口指标 AddIndexWindow indexName option 增加一个自定义通达信脚本指标窗口 AddScriptIndexW ...

  4. 【第3版emWin教程】第55章 emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果

    教程不断更新中:链接 第55章       emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果 本章节为大家讲解按钮控件自定义回调函数,通过其回调函数就可以实现各种按钮效果.这方面的 ...

  5. emwin之错误使用控件函数导致死机现象

    @2018-10-15 导致死机的代码示例如下 1 /** 2 * @brief widget ID define 3 * @{ 4 */ 5 6 #define ID_WINDOW_0 (GUI_I ...

  6. 《zw版·delphi与halcon系列原创教程》zw版_THImagex控件函数列表

    <zw版·delphi与halcon系列原创教程>zw版_THImagex控件函数列表 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核心控件就是两 ...

  7. dcl并列控件 lisp_CAD autolisp jjj-dcl-make函数

    [实例简介] [jjj-dcl-make lst aaa bbb] 函数名:jjj-dcl-make 参数 lst:dcl控件列表 aaa:dcl启动时要预先执行的函数名,参数类型为字符串或字符串表, ...

  8. miniblink控件JS和本地函数互相调用VisualFreeBasic例题

    miniblink 作为一个小微浏览器内核,用来写软件的HTM前端界面,非常不错. VisualFreeBasic 已经将 miniblink 控件化,用户只需要拖个控件图标就可以使用了. 这里举例最 ...

  9. VC学习笔记 -单选按钮控件(Ridio Button)的使用

    在VC++编程过程中,查资料是一个苦差事,案边放了一摞书左翻右翻好是烦人.一赌气就把一些常用的小技巧自己总结了一下,虽费了些功夫,但对以后编程很有好处.现拿出来与大家共享,以后积累多了,作一个CHM电 ...

最新文章

  1. python标准库很丰富支持多种编程范式_计算机考试简答题
  2. [设计模式-行为型]解释器模式(Interpreter)
  3. 前端 new实例后销毁实例_干货|仪器设备检定校准后的确认(实例)
  4. sap 发送mesage_SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统...
  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_1_使用Properties集合存储数据,遍历取出集合中的数据...
  6. 查看vs支持的c#语言版本/查看.NetCore版本/更改c#语言版本
  7. 微信小程序地图实现展示路线路
  8. spring cloud SnakeYAML RCE 漏洞复现
  9. spark学习之执行计划explain
  10. 自动驾驶 4-5 自行车模型的横向动力学 Lateral Dynamics of Bicycle Model
  11. Pygame库200行代码实现简易飞机大战的小游戏
  12. python 战棋游戏代码实现(1):生物行走和攻击选择
  13. 微信支付API v3接口使用应用篇
  14. 总结]关于守护进程解释文章
  15. Flak-SQLAlchemy安装和介绍
  16. 设置EditText输入的文字全部变成大写或小写方案总结
  17. 频谱分析仪中的RBW 和 VBW
  18. “有一只鸟来到这个世界,它该做什么?”你知道么?
  19. BZOJ 1085 骑士精神
  20. CoppeliaSim添加ROS自定义消息类型

热门文章

  1. Element-UI-的登录页面_密码框---Element-UI工作笔记004
  2. matlab 读取视频出现的问题
  3. 7个示例科普CPU Cache(转)
  4. 多克隆,坚决抵制快照
  5. 杭电1556 Color the ball
  6. php调用shell的方法
  7. 随想录(常用的c库)
  8. 用汇编的眼光看C++(之特殊函数)
  9. python多进程关闭socket_Python并发编程-多进程socketserver简易版
  10. java 及时编译_Java 面试-即时编译( JIT )