2

我在资源文件中创建了 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;

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

谢谢。

4

1 回答 1

3

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

您可能需要绘制自定义边框/框架,这是 Office 等某些应用程序所做的,以便它们可以在标题栏中具有其他按钮小部件。(Office 还在其标题栏中将文本居中...)它非常复杂,另外还有两种不同的技术,具体取决于您是在 XP 之前的版本上运行,还是在启用 DWM 的 Vista 上运行。我发现一篇文章总结了 Vista/DWM 案例中涉及的一些问题。如果未启用 DWM,您可能需要支持旧技术、处理和覆盖 WM_NCPAINT

仅仅为了使标题栏居中就需要做很多工作!

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

所以也许最简单的答案是“如何使对话标题居中?” 是:升级到 Windows 8 :-)

于 2013-01-29T01:38:26.683 回答