如何在MFC对话框中保持控件的z轴顺序

How to keep Z-order of a control in MFC dialog?

本文关键字:控件 顺序 MFC 对话框      更新时间:2023-10-16

它开始让我发疯,但我不知道如何保持子控件的位置在z轴顺序。在设计时在MFC对话框资源编辑器我有静态控制(CStatic的后代)在底部(标签顺序Nr. 1),即。它与其他控件重叠,如按钮,列表框等。

在运行时,对话框处理WM_TIMER消息,并在OnTimer处理程序中获得STATIC控件移动:

void CTestMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
  ...
  m_stMyStatic.SetWindowPos(&this->wndBottom, xpos, ypos, 0, 0, SWP_NOSIZE);
  ...
}

在调用SetWindowPos为子类化的CStatic控件之后,无论我在第一个参数中传递什么,它都会在对话框中的其他控件上绘制。

你知道如何让控件始终保持在z轴的底部吗?

答案很简单。我只是忽略了SetWindowPos文档中的一个标志。为了防止z顺序改变,只需传递SWP_NOZORDER标志,因此函数调用应该看起来像:

m_stMyStatic.SetWindowPos(NULL, xpos, ypos, 0, 0, SWP_NOSIZE | SWP_NOZORDER);