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;

(全文完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python tip

Python代码 def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run(xiaoming,namexiaoming,sexboy) SyntaxError: non-keyword arg after keyword arg def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run…

js实现使用drag实现元素拖拽排序

js实现使用drag实现元素拖拽排序

.NET Core 和 .NET Framework 之间的关系

引用一段描述:Understanding the relationship between .NET Core and the .NET Framework。 .NET Core and the .NET Framework have (for the most part) a subset-superset relationship. .NET Core is named "Core" since it contains the core featu…

博客园开始对X++语言语法高亮的支持

关注X的博客园博友有福啦,现在发布X代码也同样可以实现语法高亮。目前仅支持SyntaxHighlighter插件。请看如下: public void update(boolean _updateParty true, boolean _updateContactPersonLastEdit true) {Address addressOrig this.orig();ttsbe…

win10网卡高级属性配置图解_简单设置,win10再也不会断网了

你多朋友反应win10会频繁断网,无任何规律。这也是导致很多人反感win10的原因之一。我百度了一下这个问题,解决问题的方法基本上都是关闭省电模式,重装网卡驱动之类的答案。但都解决不了根本问题。虽然不清楚深层次的断网原因,但通…

css 绘制带尖角的矩形

css 绘制带尖角的矩形

Ext GrdPanel多种取值方式

一、单选行取值 1、在Store中设置ReaderID <ext:Store runat"server" ID"SQry" AutoLoad"true" RemoteSort"true"> <Reader> <ext:JsonReader ReaderID"shid"> <Fields> <ext:RecordFiel…

为子控件添加自定义绘图方式

在MFC应用程序中&#xff0c;有时会遇到需要让指定的控件实现自绘。但是看该控件的事件&#xff0c;没有一个像是能承担这种责任的。 我们都知道控件也是窗口&#xff0c;也都有消息循环。所以&#xff1a; 方案一&#xff1a;写个新类&#xff0c;继承自某个窗口类&#xff…

ios7 导航栏 手势 右划 自动返回 相关

http://www.tuicool.com/articles/vMfAVv 纪录一下&#xff0c;转载于:https://www.cnblogs.com/penn-wang/p/4308140.html

根据父类id查询所有的父级_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点...

继承继承(Inheritance)可以实现类之间共享属性和方法&#xff0c;是面向对象编程的另一个特性使用继承可以最大限度地实现代码复用。定义&#xff1a;继承就是在已有类的基础上构建新的类&#xff0c;一个类继承已有类后&#xff0c;可以对被继承类中的属性和方法进行重用。继承…

Echarts y轴高度设置(宽度铺满整个父级高度)

Echarts y轴高度设置&#xff08;宽度铺满整个父级高度&#xff09;

利用 Cloudera 实现 Hadoop (二)

安装 规划好了就开始安装Hadoop&#xff0c;如前言中所说使用Cloudera的Hadoop发布版安装Hadoop是十分方便的&#xff0c;首先当然是在每台主机上一个干净的操作系统&#xff08;我用的是Ubuntu 8.04&#xff0c;用户设为Hadoop&#xff0c;其它的版本应该差不多&#xff09;&…

CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识

From: http://blog.csdn.net/zhangxinrun/article/details/5829084 一、设备环境&#xff08;DC&#xff09;的概念&#xff08;1&#xff09;在Windows中&#xff0c;显示工作是基于设备环境的。所谓设备环境&#xff08;DC&#xff09;是一种Windows数据结构&#xff0c;该结…

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...

实验十八&#xff1a;SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘&#xff0c;它作为冤魂日夜不断纠缠笔者。笔者尝试过许多方法将其退散&#xff0c;不过屡试屡败的笔者&#xff0c;最终心情像橘子一样橙。《整合篇》之际&#xff0c;笔者曾经大战几回儿&#xff0c;不…

gateway请求拦截_一种网关对用户请求进行统一拦截判断是否放行的方法与流程...

本发明涉及互联网技术领域&#xff0c;特别涉及一种网关对用户请求进行统一拦截判断是否放行的方法。背景技术&#xff1a;随着互联网发展的越来越快&#xff0c;技术也更新的非常频繁&#xff0c;比如开发一个系统的架构由最初始的单个服务器就能处理演变到现在的利用springcl…

git修改/添加/删除远程仓库

git修改/添加/删除远程仓库