所以我有一个分组框样式的按钮。通过创建一个以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;
}


那么,有可能吗?

最佳答案

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

请注意,组框应按z顺序紧接在其分组控件的前面(上方);这样,从组框标签激活助记符会将焦点移至组中的第一个控件。即使组框控件将位于其分组控件a group box explicitly allows other controls to draw themselves over it的上方。

关于c - 有没有办法从组框内的按钮获取消息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39538827/

10-11 04:25