标题:Win32SDK求助:GroupBox内部的按钮如何响应
只看楼主
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
结帖率:75%
已结贴  问题点数:20 回复次数:7 
Win32SDK求助:GroupBox内部的按钮如何响应
我想用Win32SDK编写一款小工具,为了美观我加上了GroupBox(属于Button类),在里边创建了一些控件(控件父窗口参数填写的是GroupBox的句柄),包括几个按钮

在WndProc的WM_COMMAND中的消息处理中,我加入了判断这两个Button是否被点击并弹出MessageBox的代码,但是并没有反应。我尝试把按钮的父窗口改成主窗口的句柄,有反应,个人推测应该把判断的代码加到GroupBox的WndProc中(子类化),尝试了,但是仍然没有反应。

请问如何实现对GroupBox内部,或者其他的子窗口中的子窗口控件的响应?

我用来在WM_COMMAND判断按钮单机的代码模板:
程序代码:
    switch (Message)
    {
    case WM_COMMAND:
    {
        if (HIWORD(wParam) == BN_CLICKED)
        {
            switch (LOWORD(wParam))
            {

(在LOWORD(wParam)中的控件ID值是没有错的,这个本人检查了好几次)

我用来子类化的模板:
        OldWndProc = (WNDPROC)::GetWindowLongA(hGroupBox, GWL_WNDPROC);
        ::SetWindowLongA(hGroupBox, GWL_WNDPROC, (long)NewWndProc);

是否是代码出现了问题,还是实现的方法出现了问题?谢谢各位朋友和老师的教导~

[此贴子已经被作者于2020-10-25 14:07编辑过]

搜索更多相关主题的帖子: 代码 GroupBox 按钮 控件 内部 
2020-10-25 14:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
我尝试把按钮的父窗口改成主窗口的句柄,有反应

你这就是正确的做法,MS本身也是这么设计的。
2020-10-25 15:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
在获取到消息的窗口再发消息到控件的窗口,甚至可直接发到控件
2020-10-25 18:47
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
得分:0 
回复 2楼 rjsp
那请问您的意思是PushButton不可以在GroupBox内部进行响应吗?只可以在主窗口的WndProc中响应?
2020-10-26 08:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 Escapist
可以是可以,比如子类话。
但当初设计MFC者,就是让它们同一级。
2020-10-26 08:18
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
得分:0 
回复 5楼 rjsp
程序代码:
long __stdcall NewWndProc(HWND WindowHandle, unsigned int Message, unsigned int wParam, long lParam)
{
    switch (Message)
    {
    case WM_COMMAND:
    {
        if (HIWORD(wParam) == BN_CLICKED)
        {
            switch (LOWORD(wParam))
            {
            case 101:
                ::MessageBoxA(NULL, NULL, NULL, NULL);
                break;
            }
        }
        break;
    }
    default:
        ::CallWindowProcA(OldWndProc, WindowHandle, Message, wParam, lParam);
        break;
    }
    return ::CallWindowProcA(OldWndProc, WindowHandle, Message, wParam, lParam);
}

这是我子类化的WndProc,和一开始的子类化窗口代码,没有实现,请问是有什么问题吗?
2020-10-26 08:30
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
得分:0 
回复 5楼 rjsp
还有一个问题想问您,我在子类化一个窗口之后(就以这个GroupBox为例),发现这个GroupBox的样式发生了改变,对比图:

2020-10-26 11:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
不明白,你为什么放着正常的方法不用?
2020-10-26 12:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503623-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.337781 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved