分享

窗口子类化_改变控件的窗口处理函数

 cjavahtml 2015-10-21
  一、原理:

  应用程序在创建一个新窗口之前要向Windows系统注册这个窗口的类,首先要填写一个WNDCLASS结构,其中的结构参数

  lpfnWndProc就是该类窗口函数的地址,接着调用RegisterClass()函数向Windows系统申请注册这个窗口类。这时Windows会

  为其分配一块内存来存放该类的全部信息,这个内存块称为窗口类内存块。

  窗口子类化技术实际上就是改变窗口内存块中的有关参数。由于这种修改只涉及到一个窗口的窗口内存块,因此它不会影响到

  属于同一窗口类的其它窗口的功能和表现。窗口子类化中最常见的是修改窗口内存块中的窗口函数地址(lpfnWndProc),使其指向

  一个新的窗口函数,从而改变原窗口函数的处理方法,以达到修改其窗口过程的目的。

  二、实现步骤:

  1.编写子类化窗口过程函数。其格式是标准的窗口过程函数格式即:

  LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM) ;

  参数含义与窗口过程函数相同。

  2.调用GetWindowLong ( hWnd , GWL_WNDPROC )函数获得原窗口函数的地址并保存起来;其中参数hWnd为待子类化窗口句柄。

  3.调用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc )将窗口函数替换成子类化函数,实现窗口子类化。

  三、Example:

  LRESULT CALLBACK ProcFloat(HWND,UINT,WPARAM,LPARAM);

  WNDPROC EditProc; //EditProc用来保存原窗口函数地址, 就设为全局的

  EditProc = (WNDPROC)SetWindowLong( //函数返回的是hChild父窗口的窗口过程函数

  hChild, //需要子类化窗口

  GWL_WNDPROC

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多