【问题标题】:How to create a usual non-resizible window with thick border (MFC or WinAPI)如何创建带有粗边框的通常不可调整大小的窗口(MFC 或 WinAPI)
【发布时间】:2021-12-29 12:06:44
【问题描述】:

我想创建一个具有以下属性的窗口:

  • 粗边框(MSDN 中描述的“双边框”)
  • 不可调整大小
  • 标题中的图标
  • 标题中的关闭按钮

听起来很简单,我们在 Windows 中随处可见这种窗口。但是一旦我禁用调整窗口大小的能力,我也会失去粗边框。这是我的问题的说明:

我的测试窗口标题栏的高度略低于 Shell 属性对话框的高度,但我希望它是相同的高度。

我尝试使用 WinSpy 并将所有样式从资源管理器的窗口复制到我的,但这没有帮助。

【问题讨论】:

  • WS_THICKFRAMEWS_SIZEBOX 具有相同的 value。移除尺寸框时,您也移除了厚框。你不能有一个,但不能有另一个。虽然看起来你实际上并不想要一个粗边框。
  • @IInspectable,感谢您提供详细信息。我仍然相信这是我需要的厚框架。 WS_EX_DLGMODALFRAME 也承诺“双边框”,但由于某种原因我无法将它应用到我的窗口。

标签: windows winapi mfc


【解决方案1】:

我不知道幕后发生了什么,但我找到了两个解决方案:

  • 切换到更新的平台工具集(这意味着放弃对 Windows XP 的支持)
  • 通过编写自定义 WM_NCHITTEST 处理程序禁用调整大小

第二个选项非常简单,我不想因为一个愚蠢的原因而放弃 Windows XP 支持。任务完成:

LRESULT CListEditorDlg::OnNcHitTest(CPoint point)
{
    LRESULT retVal = CDialog::OnNcHitTest(point);
    switch (retVal)
    {
        case HTBOTTOM:
        case HTBOTTOMLEFT:
        case HTBOTTOMRIGHT:
        case HTLEFT:
        case HTRIGHT:
        case HTTOP:
        case HTTOPLEFT:
        case HTTOPRIGHT:
            retVal = HTBORDER;
    }
    return retVal;
}

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2012-09-13
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多