【问题标题】:How do you programmatically change the tab order in a Win32 dialog?如何以编程方式更改 Win32 对话框中的 Tab 键顺序?
【发布时间】:2010-09-08 04:36:51
【问题描述】:

在通过对话框模板和 CreateDialogIndirect 生成对话框后,我经常需要向对话框添加控件。在这些情况下,tab 顺序由对话框模板设置,并且没有明显的方法可以通过包含新创建的控件来更改 tab 顺序。

【问题讨论】:

    标签: winapi dialog


    【解决方案1】:

    我知道这是一个老问题,但这里是如何在编译时做到这一点(这在绝大多数情况下是可取的): http://msdn.microsoft.com/en-us/library/7039hzb0(v=vs.80).aspx

    我最喜欢的方法:

    1. 从“视图”菜单中,选择“跳位顺序”。
    2. 选择交互式分配。
    3. 双击您想成​​为的控件旁边的选项卡顺序框 Tab 键顺序中的第一个控件。
    4. 单击其他每个控件的 Tab 键顺序框。
    5. 单击表单上的任意位置以保存更改并退出 Tab Order 模式,或按 ESC 退出 Tab Order 模式而不保存您的 变化。

    【讨论】:

    • 这个问题很清楚的说不能在设计时完成。
    【解决方案2】:

    我最近发现您可以使用 SetWindowPos 来完成此操作。确定要在哪个控件之后按 Tab 键顺序插入新控件,然后像这样使用 SetWindowPos:

    SetWindowPos(hNewControl, hOldControl, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); 
    

    这会改变控件的 z 顺序,从而建立 tab 顺序。

    【讨论】:

    • 这很好用。 CWnd 中有一个 MFC 等效项:newControl.SetWindowPos(oldControl, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    • 为我工作。请注意:这里的hNewControlHANDLE,用于您要更改其标签顺序的控件。 hOldControl 是你想把hNewControl after 的控件的HANDLE 就标签顺序而言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2015-02-25
    • 2014-09-25
    相关资源
    最近更新 更多