首先,这不是 MFC。
这是我一直在研究的 GUI 的裁剪版本:
如您所见,我已(尝试)使用以下代码创建两个不同的组,即图标和按钮:
index->hAddT.hwndIndex[2] = CreateWindowEx(NULL,L"BUTTON",L"Icon",WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
200,135,120,170,WINDOWHANDLE,(HMENU)IDC_RADIOGROUP,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL);
我遇到的问题以及您可能会看到的问题是窗口只有一个单选按钮。这意味着用户不可能从 Icon 组中选择一个单选按钮,从 Button 组中选择一个。我已经初始化了每个单选按钮:
index->hAddT.hwndIndex[3] = CreateWindowEx(NULL,L"BUTTON",L"Information",WS_CHILD | BS_AUTORADIOBUTTON | WS_VISIBLE,
205,155,100,20,WINDOWHANDLE,(HMENU)IDC_RADIO1,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL);
我想以某种方式将“图标”单选按钮组与“按钮”单选按钮组分开,如果有意义的话,因此每个组都有一个单选按钮可用。
这怎么可能,它是否需要我创建一个新窗口和一个新的回调过程,只是为了有一个额外的单选按钮。必须有另一种方法来像这样对子项进行分组。
2 separate groups of radio buttons in the same form WINAPI (No MFC)
该链接对我的目的没有任何用处。
我有 Windows 第五版的编程作为引用,由 Charles Petzold 在我身边作为引用,他在 Group Boxes 部分指出“Group Boxes 通常用于包含其他按钮控件”,但没有真实的例子。
最佳答案
与流行观点相反,您不需要 groupbox 控件或任何其他此类外部“容器”(无论如何 groupbox 都不是,它只是一个按钮工件)。下面描述了如何使用 来做到这一点。否 组框的要求。如果您想要一个在功能上有助于此处描述的布局的组框,请转到 编辑 这个答案的一部分,我解释了如何实现 OP 的特定愿望。
自动单选按钮“银行”通过使用两个关键的窗口样式属性来工作, WS_GROUP , 和 WS_TABSTOP .对我亲切地称为 Bank1 和 Bank2 的两个“银行”执行以下操作:
像上面这样的布局允许你“tab”到一个单选按钮组,并使用箭头键来切换选择。然后您再次“tab”离开该银行并前往下一个tab-stop。请记住,当您点击 Tab(或使用 Shift-Tab 之前)时,对话框管理器将始终移动到下一个 WS_TABTOP 子控件。如果跳转到的控件是自动类型,则所选控件将是最近 WS_GROUP 中的“所选”控件。
如果有帮助,请抓起草图,将其绘制在纸上,然后在制表位上贴上“T”,在组属性上贴上“G”,如上所述。一旦可视化,它可能会更清晰。查看对话资源脚本以了解它们如何协同工作以获得更多见解。
注意:如果你想使用围绕这些的分组框,你可以。对话框管理器的工作原理是根据最后一个用 WS_GROUP 标记的控件将控件与组相关联,此后具有 WS_TABSTOP 的第一个控件被视为该组的选项卡跳转点。首先插入一个 Groupbox(不能是制表位),然后在第一个单选按钮(这次没有 WS_GROUP)上插入带有 WS_TABSTOP 的单选按钮控件,也将起作用。我通常发现在不依赖分组框的情况下排列单选按钮更容易。
编辑 一张图说千言万语
对于您的照片,我可能会按以下顺序创建以下子项:
显然所有其他子控件样式、可见性等也需要正确使用,当然子控件都应该有唯一的 id。我假设您已经涵盖了其余部分。
关于c++ - 如何设置多个单选按钮组以获得正确的 Tab 键顺序和键盘交互 (WIN32)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550087/