Windows SDK笔记(三):定制控件消息处理函数
From: http://www.vckbase.com/document/viewdoc/?id=1009
一、概述
控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供。
但当需要对控件进行特殊控制时,可以提供一个消息处理函数,替换原来的消息处理函数。
自己的处理完成后,再调用控件的缺省消息处理。
二、相关函数
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;
(全文完)
Windows SDK笔记(三):定制控件消息处理函数相关推荐
- 定制控件消息处理函数
Windows SDK笔记(三):定制控件消息处理函数 作者:冯明德 一.概述 控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供. 但当需要对控件进行特殊控制时,可以提供一个消息处理函 ...
- [转载]Windows SDK笔记
应程序需求需要重写窗体内子控件某一特定消息,可怜我苦苦找了二天也没找到资料,到CDSN提问也没有得到满意答案. 终归是上天不负有心人啊,终于被我发现了博主的一篇文章,总算是满意的解决问题了:在此感谢作 ...
- windows常见窗口样式和控件风格以及类样式
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
- Windows应用程序文件格式转换控件LEADTOOLS ePrint Professional
2019独角兽企业重金招聘Python工程师标准>>> LEADTOOLS ePrint Professional控件是一个多功能一体化文件转换解决方案,它可帮助您将任何Window ...
- 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom...
原文:重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom [源码下载] ...
- 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...
- 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider...
重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 原文:重新想象 Windows 8 S ...
- C#windows服务中的Timer控件的使用
C#windows服务程序中的Timer控件的使用是什么情况呢?那么本文就C#windows服务程序中的Timer控件的使用问题向你介绍相关的操作. C# windows服务程序中的Timer控件的使 ...
最新文章
- Stumpwm的编译安装
- ffmpeg库编译加文字_1.编译ffmpeg库
- vi/vim 编辑器详解
- 优化数据库语句的几个简单技巧
- Mac下安装emacs+cscopse+auto-complete
- ascll编码表图片_ASCII编码表
- Hello Qt(十四)——QT绘图系统
- linux服务源码安装ruby
- bzoj2286: [Sdoi2011消耗战
- 必备配色攻略-绿色篇
- 如何使用快应用内置地图查看、导航位置
- 滑动窗口算法思想,找出字符串中的所有字母异位词
- 专转本-计算机二级习题1
- jenkins提示没有这个文件: ‘pom.xml‘
- C语言常见问题——++i与i++详解
- html在点击按钮变量加一,如何在html文件上按一个按钮将变量设置到flask服务器rou...
- 写在2021新年到来前
- 基于JavaGUI实现的订餐管理系统
- IE浏览器请求ulr中有中文会报错
- 微信公众平台获取网页授权(测试号)