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