如何使对话框标题居中?

时间:2013-01-29 01:05:35

标签: c++ dialog

我在资源文件中创建了IDD_DIALOG。

我使用以下代码将DIALOG置于屏幕中间:

case WM_INITDIALOG:
    RECT Rect;
    ::GetWindowRect(hwndDlg, &Rect);
    ::SetWindowPos(hwndDlg, HWND_TOPMOST, (::GetSystemMetrics(SM_CXSCREEN)/2 - ((Rect.right - Rect.left)/2)), (::GetSystemMetrics(SM_CYSCREEN)/2 - ((Rect.bottom - Rect.top)/2)), (Rect.right - Rect.left), (Rect.bottom - Rect.top), SWP_SHOWWINDOW);
    return TRUE;

我的问题是,我如何将标题(对话框标题)与我当前的代码一起居中?

感谢。

1 个答案:

答案 0 :(得分:3)

除非你真的需要,否则最好不要。

您可能需要绘制自定义边框/框架,这就像Office之类的应用程序所做的那样,它们可以在标题栏中添加其他按钮小部件。 (Office也将文本集中在标题栏中......)它非常复杂,而且还有两种不同的技术,具体取决于你是在XP之前运行还是在启用了DWM的Vista上运行。我找到了一篇文章that summarizes some of the issues involved in the Vista/DWM case。如果未启用DWM,您可能需要支持旧技术handling and overriding WM_NCPAINT

这是很多的工作,只是为了使标题栏居中!

事实证明,标题栏的理由随着时间的推移而发生了变化:在Win3.1中,它居中;然后在95年代,它变成左对齐(或从右到左语言右对齐)。事实证明事情已经完全循环,在桌面模式下,Windows 8将恢复为中心。

或许最简单的答案是“如何集中对话框标题?”是:升级到Windows 8: - )