有没有办法从组合框中的按钮获取消息?

时间:2016-09-16 19:26:24

标签: c winapi button groupbox

所以我有一个groupbox风格的按钮。我可以通过创建一个以groupbox为父级的按钮在其中放置一个按钮。但是,如果我这样做,groupbox将获得按钮单击消息而不是窗口。有什么方法可以拦截这些消息或将它们转发?

PasteBin上的一个示例,其中不是将按钮放在组合框中而是将其悬停在顶部,但这意味着我不能简单地制作组框和它的内容在一个命令中是不可见的(这是作弊,所以在某些时候可能会出错)。那么,有没有办法在按钮实际位于组框中的位置?

创建控件的示例代码:

HWND hSoFGrp = CreateWindowEx(WS_EX_LEFT, "BUTTON", _T("Group Text"), WS_CHILD | WS_TABSTOP | WS_VISIBLE |
                                 BS_GROUPBOX | BS_TEXT | BS_LEFT | BS_TOP,
                                 0, 250, 150, 100, hwnd, (HMENU) 40,
                                 GetModuleHandle(NULL), NULL);

HWND hSoFBtn = CreateWindowEx(WS_EX_STATICEDGE, "BUTTON", _T("Button"), WS_CHILD | WS_TABSTOP | WS_VISIBLE |
                                 BS_PUSHBUTTON | BS_CENTER | BS_TEXT | BS_VCENTER | BS_MULTILINE,
                                 100, 15, 48, 30, hSoFGrp, (HMENU) 41,
                                 GetModuleHandle(NULL), NULL);

处理消息的示例代码:

switch (msg)
{
  case WM_COMMAND:
    if (LOWORD(wParam) == 40)
    {
       //This would be messages from the groupbox
    }
    else if (LOWORD(wParam) == 41)
    {
       //This would be messages from the button if the groupbox wasn't intercepting them!
    }
  break;
}

那么,有可能吗?

1 个答案:

答案 0 :(得分:0)

组框通常不用作其中明显包含的控件的父窗口。 HWND s的层次结构不一定与可见的控件组织相匹配。相反,您应该使组框成为其分组控件的兄弟。

请注意,分组框应位于z分组的分组控件之前(上方);从组框标签激活助记符的方式将焦点移动到组中的第一个控件。即使组框控件将高于其分组控件a group box explicitly allows other controls to draw themselves over it