Win32 SDK Gui编程系列之--Win32API 控件的子类化

本文介绍了Win32 API中控件的子类化技术,以EDIT控件为例,展示了如何注册自定义的WindowProc函数来处理特定消息,如按下Enter键。讨论了EDIT控件的ES_MULTILINE和ES_AUTOVSCROLL样式对于避免警告声的重要性,并探讨了何时应该使用子类化技术,例如在创建表格编辑器时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Win32 API控件的子类化(1)

        按钮、编辑框等控件各自都是独立的窗口,因此内部有WindowProc函数。可以准备自己的WindowProc函数来代替这个默认的WindowProc函数,以处理发送给控件的消息。这称为控件的子类化。

        然而,大多数消息处理都是交给默认的WindowProc函数的,所以自己的WindowProc函数实际上是一个包装器。如果用面向对象语言如C++来说,自己的WindowProc函数相当于是子类。[2013.3.4] 在CreateWindowEx的样式参数中添加了ES_MULTILINE|ES_AUTOVSCROLL。如果没有这个,按下回车键时会发出beep声。

1. 控件的子类化方法
        以EDIT控件为例说明子类化。如下所示,创建EDIT控件后,使用SetWindowLongPtr函数注册自己的EditWindowProc函数地址。返回之前的(默认的)WindowProc函数地址,然后设置到全局变量defEditWndProc中。

HWND hEdit = CreateWindowEx(0, "EDIT", "", 
        WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL|ES_MULTILINE|ES_AUTOVSCROLL,
        30, 10, 100, 30, hWnd, (HMENU)777, NULL, NULL);
defEditWndProc = (WNDPROC)SetWindowLongPtr(hEdit, GWLP_WNDPROC, (LONG_PTR)EditWindowProc);

        以下展示了自己的WindowProc函数。只处理按下Enter键时的消息,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值