zoukankan      html  css  js  c++  java
  • 定制控件消息处理函数

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

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


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

    LONG GetWindowLong(
    	HWND hWnd,  // handle to window
    	int nIndex  // offset of value to retrieve
    	);
    	
    LONG SetWindowLong(
      HWND hWnd,       // handle to window
      int nIndex,      // offset of value to set
      LONG 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 procedure
    	HWND hWnd,              // handle to window
    	UINT Msg,               // message
    	WPARAM wParam,          // first message parameter
    	LPARAM 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;

  • 相关阅读:
    一文让你彻底了解卷积神经网络
    处理 3d 视频的简单理论基础
    ffmpeg 学习:000-概述和库的组成
    Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁
    “反向传播算法”过程及公式推导
    机器学习:梯度下降算法原理讲解
    神经网络浅讲:从神经元到深度学习
    Git详解之安装
    Git详解之Git起步
    Git详解之协议/速度/安全
  • 原文地址:https://www.cnblogs.com/huqingyu/p/36226.html
Copyright © 2011-2022 走看看