【问题标题】:WinAPI - Custom sizing border (WS_THICKFRAME)WinAPI - 自定义大小边框 (WS_THICKFRAME)
【发布时间】:2013-10-19 17:37:49
【问题描述】:

我不喜欢原生尺寸边框的样子:

我想改用这种花哨的紫色边框:

我应该手动实现自己的大小边框,还是应该继续使用WS_THICKFRAME 窗口样式并对其进行自定义?

如果我可以自定义它,我希望它也能在没有讨厌的 hack 的情况下完成......

【问题讨论】:

  • 屏幕截图中的紫色部分不是边框的一部分。这是一个Status Bar。自定义非客户区(边框是其中的一部分)与自定义客户区不同。
  • stackoverflow.com/questions/19106047/… 我认为这很难。当您向左调整大小时,您实际上可以看到 Visual Studio Express 2012 主窗口后面的背景像素。我一点也不喜欢,你的里程可能会有所不同。

标签: c++ winapi customization sizing


【解决方案1】:

您可以通过在窗口类型标志中指定 WS_POPUP 标志来创建一个没有边框和标题栏的窗口。

您的 WM_NCHITTEST 消息处理程序必须检查某个像素真正属于窗口的哪一部分(例如树脂化框架)并返回该部分的代码。

缺点:您必须自己绘制整个窗口内容(包括标题等)。

【讨论】:

    【解决方案2】:

    我认为你应该实现自己的重绘过程(例如在底部绘制一个紫色矩形,然后在角落绘制一个图标)。如果你想让你的窗口类似于 VS2013 窗口,那么你应该使用WS_POPUP 样式,然后实现你自己的重绘例程。如果您想自定义窗口的窗体,您可以使用区域(SetWindowRgn()CreateRectRgn()CreateRoundRectRgn()CreateEllipticRgn()CreatePolygonRgn() 等)。广义上讲,使用 WinAPI 可以做任何事情,但您会受到限制仅适用于 WinAPI?使用 MFC 或 Windows 窗体来简化窗口界面的创建是个好主意。

    【讨论】:

    • 也许我应该更具体一些。我已经知道如何绘制自定义窗口本身并实现 WM_PAINT。 WS_THICKWINDOW 样式似乎非常有用且响应迅速。而且由于它是原生尺寸边界,我相信它也没有错误,这就是我想保持这种状态的原因。然而,原生的外观和感觉对我的窗户来说真的不是很好。如果有人有自定义大小边框的完整示例,我将不胜感激。
    • @user2018626 再次:您是否仅限于 WinAPI?
    • 从技术上讲,是的。但如果 MFC 能让我的生活更轻松,我会尝试一下。
    • 如果您的应用程序不是 MFC 应用程序,您不能轻易地混入 MFC。例如,如果不实现CWinApp 派生类,就不能仅将 MFC 用于创建窗口。如果您需要一个库来简化窗口处理,例如使用 WTL。如果您可以并且想要使用第 3 方库。
    • @user2018626 在 MFC 中您可以轻松创建无边框窗口,在角落添加调整大小的图片,以及处理 MOUSE_DOWN 事件。发生这种情况时,只需根据窗口的绝对位置和当前光标位置调整窗口大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多