c++ - 如何使对话框标题居中?

标签 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;

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

谢谢。

最佳答案

除非确实需要,否则最好不要这样做。

您可能需要绘制自定义边框/框架,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 中,它居中;在 Win3.1 中,标题栏居中;在 Win3.1 中,标题栏居中。然后在 95 时代它变成了左对齐(或者对于从右到左的语言来说是右对齐)。事实证明,事情又回到了原点,在桌面模式下,Windows 8 再次恢复居中。

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

关于c++ - 如何使对话框标题居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574011/

相关文章:

c++ - dllexport 一个全内联类?

jQuery 提交验证,最后有模式对话框?

java - 如何将新按钮添加到 JFace 对话框的按钮栏

c++ - C++动态哈希表

c++ - 完全数程序中的逻辑错误

c++ - 如何获得传递给模板化函数或类的函数的返回类型?

c++ - 在调试中构造 C++ 类的详细信息

mono - MessageDialog 未关闭

c++ - 嵌套对话过程

css - Twitter Bootstrap 模式打开/关闭导致固定标题跳转