我在资源文件中创建了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;
我的问题是,我如何将标题(对话框标题)与我当前的代码一起居中?
感谢。
答案 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: - )