如何在MFC中将控件置于最前面
如何在设计时在MFC中更改控件的Z顺序,即我不能使用SetWindowPos或者在运行时执行此操作,我想在设计器中查看更改的Z顺序(即使我必须直接编辑.rc代码)。
我有一个向其添加控件的MFC对话框。如果控件的边缘之间有重叠,我想将其中一个放在另一个的前面。在Windows窗体或者WPF中,等等。我在MFC中找不到这些选项,也无法说出它是如何确定前面的内容的,因为刚添加的控件通常位于以前存在的控件的后面。如何在MFC中操纵Z顺序?即使我必须直接操作.rc文件代码(即在设计器中最终运行)。
解决方案
GetDlgItem(IDC_MYCONTROL)->SetWindowPos(HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
我们可以使用CWnd :: SetWindowPos()来控制控件的Z顺序,而无需更改它们在父窗口中的位置。
实际上,如果我们想在资源编辑器中执行此操作,则可以剪切该项目然后将其粘贴回去,这是一种快速而又肮脏的解决方案。只需按Ctrl-X,然后按Ctrl-V。
编辑RC文件也将起作用。
我认为前面的控件将是rc文件中发生的最后一个控件。换句话说,对话框编辑器将在rc文件中从上到下绘制每个控件,并在必要时将它们重叠。
我们可以编辑rc文件以对其进行重新排序,也可以在编辑器中更改选项卡顺序,这是相同的,因为选项卡顺序也是根据控件在文件中出现的顺序来设置的。据我所知,MFC在设计时没有提供任何其他方式来重叠控件。
在MSVC 2005对话框资源编辑器中,有一个选项可以设置制表符顺序。在MSVC 2005中,可以在"格式","制表符顺序"菜单上找到它。
此菜单选项显示的选项卡顺序与控件写入资源文件的顺序相同。
在Visual Studio 6.0中,请执行以下操作。
打开对话框屏幕(在设计器视图中)
按Ctrl + D
将显示每个控件的选项卡顺序
以我们希望在运行时看到的选项卡顺序开始单击控件(即,首先单击的控件会将选项卡顺序设置为1,依此类推...)