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笔记(三):定制控件消息处理函数相关推荐

  1. 定制控件消息处理函数

    Windows SDK笔记(三):定制控件消息处理函数 作者:冯明德 一.概述 控件的消息处理函数是由系统定义好了的,通常情况下,不需要自己提供. 但当需要对控件进行特殊控制时,可以提供一个消息处理函 ...

  2. [转载]Windows SDK笔记

    应程序需求需要重写窗体内子控件某一特定消息,可怜我苦苦找了二天也没找到资料,到CDSN提问也没有得到满意答案. 终归是上天不负有心人啊,终于被我发现了博主的一篇文章,总算是满意的解决问题了:在此感谢作 ...

  3. windows常见窗口样式和控件风格以及类样式

    Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...

  4. Windows常见窗口样式和控件风格

    Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...

  5. Windows应用程序文件格式转换控件LEADTOOLS ePrint Professional

    2019独角兽企业重金招聘Python工程师标准>>> LEADTOOLS ePrint Professional控件是一个多功能一体化文件转换解决方案,它可帮助您将任何Window ...

  6. 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom...

    原文:重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom [源码下载] ...

  7. 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础

    原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...

  8. 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider...

    重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 原文:重新想象 Windows 8 S ...

  9. C#windows服务中的Timer控件的使用

    C#windows服务程序中的Timer控件的使用是什么情况呢?那么本文就C#windows服务程序中的Timer控件的使用问题向你介绍相关的操作. C# windows服务程序中的Timer控件的使 ...

最新文章

  1. Stumpwm的编译安装
  2. ffmpeg库编译加文字_1.编译ffmpeg库
  3. vi/vim 编辑器详解
  4. 优化数据库语句的几个简单技巧
  5. Mac下安装emacs+cscopse+auto-complete
  6. ascll编码表图片_ASCII编码表
  7. Hello Qt(十四)——QT绘图系统
  8. linux服务源码安装ruby
  9. bzoj2286: [Sdoi2011消耗战
  10. 必备配色攻略-绿色篇
  11. 如何使用快应用内置地图查看、导航位置
  12. 滑动窗口算法思想,找出字符串中的所有字母异位词
  13. 专转本-计算机二级习题1
  14. jenkins提示没有这个文件: ‘pom.xml‘
  15. C语言常见问题——++i与i++详解
  16. html在点击按钮变量加一,如何在html文件上按一个按钮将变量设置到flask服务器rou...
  17. 写在2021新年到来前
  18. 基于JavaGUI实现的订餐管理系统
  19. IE浏览器请求ulr中有中文会报错
  20. 微信公众平台获取网页授权(测试号)

热门文章

  1. 服务器虚拟化网口,服务器安装虚拟网口
  2. 68. 文本左右对齐
  3. chrome 开发工具_我最喜欢的Chrome开发工具提示和技巧
  4. 分步表单如何实现 html_HTML表单入门的分步指南
  5. robot:截图关键字
  6. Python学习_字符串格式化
  7. Centos7-卸载自带的jdk 安装jdk8
  8. POJ 2456 - Aggressive cows(二分)
  9. 第二十三天 how can I 坚持
  10. 58-混沌感悟.(2015.2.11)