【问题标题】:How can you bring a control to front in mfc如何在 mfc 中将控件置于最前面
【发布时间】:2010-09-14 16:15:43
【问题描述】:

在设计时如何在 MFC 中更改控件的 Z 顺序 - 即我不能使用 SetWindowPos 或在运行时执行此操作 - 我想在设计器中查看更改后的 z 顺序(即使我不得不求助于直接编辑 .rc 代码)。

我有一个要向其中添加控件的 MFC 对话框。如果控件的边缘之间存在重叠,我想将一个放在另一个的前面。在 Windows 窗体或 WPF 等中。我可以带到前面,发送到后面,向前发送,发送回来。我在 MFC 中找不到这些选项,也无法确定它如何确定前面的内容,因为刚刚添加的控件通常位于之前存在的控件后面。如何在 MFC 中操作 Z 顺序?即使我必须直接操作 .rc 文件代码(即围绕设计器结束运行)。

【问题讨论】:

    标签: visual-studio visual-c++ mfc


    【解决方案1】:
    GetDlgItem(IDC_CONTROL1)->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
    

    【讨论】:

      【解决方案2】:

      在 Visual Studio 6.0 中执行以下操作。

      打开对话框屏幕(在设计器视图中)

      按 Ctrl + D

      将显示每个控件的选项卡顺序

      以您希望在运行时看到的 Tab 键顺序开始单击控件(即,您首先单击的控件的 Tab 键顺序将设置为 1,依此类推...)

      【讨论】:

      • 问题是关于视觉z-index,不是标签索引。
      • @TimErickson 感谢您的指出,我在 4 年前回答这个问题时也有同样的想法 :) 但问题是如何在设计时执行 Z 顺序 ,因此我分享了当时我在基于 MFC Dialog 的应用程序中使用的方法。
      • @Tim Erickson:在 Visual Studio 选项卡索引中 z-index.
      【解决方案3】:

      MSVC 2005 对话框资源编辑器中有一个选项可以设置 Tab 键顺序。在 MSVC 2005 中,它位于 Format、Tab Order 菜单中。

      此菜单选项显示的 Tab 键顺序与控件写入资源文件的顺序相同。

      【讨论】:

        【解决方案4】:

        我认为前面的控件将是 rc 文件中出现的最后一个控件。换句话说,对话框编辑器将在 rc 文件中从上到下绘制每个遇到的控件,并在必要时将它们重叠。

        您可以编辑 rc 文件以重新排序它们,或者您可以在编辑器中更改 Tab 键顺序,这样做的效果相同,因为 Tab 键顺序也是根据控件在文件中出现的顺序设置的。据我所知,MFC 没有提供任何其他在设计时对重叠控件进行分层的方式。

        【讨论】:

          【解决方案5】:

          实际上,如果您想在资源编辑器中执行此操作,您可以剪切项目然后将其粘贴回来,这是一种快速而肮脏的解决方案。只需 Ctrl-X 然后 Ctrl-V。

          编辑 RC 文件也可以。

          【讨论】:

          • 这节省了一天的时间。我有一个未使用的文本框,我想将其移除隐藏在某处,并且在 半小时 内无法在设计器视图中找到它。所以我从属性中选择它,点击设计器视图,ctrl-xctrl-v,(有些诅咒),del
          【解决方案6】:

          您可以使用CWnd::SetWindowPos() 来控制控件的 Z 顺序,而无需更改它们在父窗口中的位置。

          【讨论】:

            【解决方案7】:
            GetDlgItem(IDC_MYCONTROL)->SetWindowPos(HWND_TOP,
                                                    0, 0, 0, 0,
                                                    SWP_NOMOVE | SWP_NOSIZE);
            

            【讨论】:

            • 问题指定“在设计时”不是在运行时。
            • (编辑:MFC-Edit-Browse-Control 是我的解决方案),,,,,谢谢,必须手动进行这场战斗。 Draw+Click+focus 事件强制它们自己的顺序,我不能单独依赖 tab 顺序。例如:CEdit 顶部的按钮。该按钮需要在编辑框之前,否则单击转到编辑。但是,无论顺序如何,单击“编辑”都会使其绘制在按钮之上。
            猜你喜欢
            • 2011-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-03
            • 2015-06-28
            • 2010-10-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多