【问题标题】:can't change mfc controls order无法更改 mfc 控件顺序
【发布时间】:2013-06-08 15:10:36
【问题描述】:

我有一个带有列表框、滑块和按钮的对话框。 我试图改变背景颜色但我无法改变它,所以我想如果我添加一个“图片控件”作为位图并将它放在背景中我会成功,但现在问题是“图片控件”位于所有控件之上。

我尝试使用 Ctrl+d 更改选项卡控件,但它没有改变任何内容。 我也尝试使用 SetWindowPos 到顶部或底部,但它也没有改变任何东西。

我注意到,如果我单击按钮的位置,它会按我的意愿被带到前面。 有没有办法在开始时“单击”所有控件?为了将控制权带到顶部,我是否错过了什么?

【问题讨论】:

  • 您确定您使用 Ctrl-D 管理的顺序正确吗?您可以直接编辑 .rc 文件以确保讨厌的控件是列表中的第一个。
  • 我用 ctrl+d 尝试了很多选项,但没有任何改变
  • 我尝试直接编辑rc文件并且成功了!!! Tnx :-)

标签: c++ user-interface mfc z-order wtl


【解决方案1】:

如果需要更改对话框的背景颜色,需要处理WM_CTLCOLORDLG message并将句柄返回给画笔(如果画笔不是库存对象,请确保在对话框后删除画笔框已关闭)- 或者,您可以处理 WM_ERASEBKGND message 并自己擦除背景。

【讨论】:

  • 我已经尝试了这两种方法,但没有任何反应。我更喜欢了解如何更改控件的顺序
  • 如果你想继续控制的顺序,我会推荐Balog Pal上面所说的:直接编辑.rc文件并将图片控件移动为对话框的第一个控件。但是,我尝试在一个简单的“关于”对话框中处理 WM_CTLCOLORDLG 消息,它确实有效! CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { m_hbrBackground = CreateSolidBrush(RGB(255, 0, 0)); }CAboutDlg::~CAboutDlg() { DeleteObject(m_hbrBackground); }在WindowProc中:if (message == WM_CTLCOLORDLG) return (LRESULT) m_hbrBackground;
  • 我知道如何更改标签顺序。我需要更改控件的“z 顺序”。我试图改变标签顺序,因为我读到这样我也改变了“z顺序”
【解决方案2】:

我尝试使用 Ctrl+D 更改选项卡控件,但它没有改变任何内容。我也尝试使用 SetWindowPos 到顶部或底部,但它也没有改变任何东西。

Ctrl+D 确实让您进入重新排序模式,但是有一种更可靠的检查方式。对话框模板是 .RC 文件中的文本形式,您可以在其中使用文本编辑器查看控制顺序并按照您希望的方式手动对行进行排序。这将是控件创建的顺序和选项卡顺序。有时以这种方式重新排序控件甚至更容易。

更重要的是,当您的应用程序运行时,Spy++ SDK 工具可以枚举窗口并再次为您提供窗口顺序以供检查。

SetWindowPos 使用适当的参数也会在运行时更改控件的 Z 顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 2014-09-24
    • 1970-01-01
    • 2010-09-21
    • 2020-10-07
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多