何谓“子类化”SubDlgItem?

edwardyi 2000-04-28 11:18:00
何谓“子类化”SubDlgItem?
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
元明 2000-09-05
  • 打赏
  • 举报
回复
窗口子类化就是用用新的窗口回调函数代替原来的回调函数,通过SetWindowLong()函数的操作,使Windows记录下新的窗口回调函数的地址,此函数返回旧窗口回调函数的地址,例如要检测某键是否按下,并采取相应的操作:
LRESULT CALLBACK ScrollProc(HWND , UINT , WPARAM , LPARAM );

WNDPROC OldScroll = (WNDPROC)SetWindowLong(hwndScroll, GWL_WNDPROC[关键字],(LONG)ScrollProc);

LRESULT CALLBACK ScrollProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
{
switch(message) {
case WM_KEYDOWN:
if(wParam == VK_TAB)
// own function
break;
.
.
.
}
return CallWindowProc(OldScroll, hwnd, message, wParam, lParam);
}
Spadger 2000-04-30
  • 打赏
  • 举报
回复
当我们子类化一个控件时。主要是为了接管它的一些消息如:BS_OWNERDRAW。比如:我们要作个原来控件的扩展,或时要做个跨平台的程序。。。。
这样我们可以给它发ModifyStyle(0, BS_OWNERDRAW);//这样可以让控件得到相应DrawItem(。。。)的消息。你接管DrawItem消息就可以为所欲为了具体的你要处理什么。比如:把控件画个背景图,改改颜色。。。。都行了

shu 2000-04-29
  • 打赏
  • 举报
回复
shania & xubin_sh 说的基本正确但子分类必须在已经建立窗口对象后才能改变窗口
进程的地址,因此无法处理WM_NCCREATE消息.也就是说,当你要改控件风格时,它已经
创建过窗口,改变的过程会暴露,当然可以在创建时先hide,然后再show
xubin_sh 2000-04-29
  • 打赏
  • 举报
回复
用自己的windowproc替代原先的windowproc
mfc的封装使之类化变得很容易
Shania 2000-04-29
  • 打赏
  • 举报
回复
我的理解是在原有的类上再继承一个子类,例如从CButton类继承一个CMyButton类,然后
你就可以对CButton的消息,风格等进行自己的处理,又能利用CButton的函数,消息,风格等。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧