具有自定义镶边的最大化窗口的位置

时间:2012-02-18 17:49:41

标签: windows winapi

我已经创建了一个带有自定义chrome的窗口:

  1. 处理WM_NCHITTEST并返回窗口标题和边框的相应值
  2. 吞咽WM_NCPAINT(和WM_NCUAHDRAWCAPTIONWM_NCUAHDRAWFRAME),
  3. 暂时删除WM_SETTEXT
  4. ,使用WM_SETICON处理WM_NCACTIVATEDefWindowProcWM_VISIBLE
  5. 处理WM_WINDOWPOSCHANGED以应用圆角的窗口区域。
  6. Windows正在处理移动/调整大小。我在窗口样式中添加了WS_THICKFRAME以启用Aero Snap功能。但是现在当窗口最大化时,它位于(-5,-5)并且我的自定义标题栏被切断(没有WS_THICKFRAME就不会发生这种情况。)

    解决这个问题的正确方法是什么?什么影响这个位置?它似乎与WM_NCHITTEST返回的值无关。

1 个答案:

答案 0 :(得分:1)

迟到的答案,但似乎没有其他人回答。

您可以检查窗口何时最大化,并在窗口最大化时考虑边距。您可能希望处理WM_NCCALCSIZE而不是WM_NCPAINT以使整个窗口显示为客户区,而不是绘制非客户区。

这描述了一种实现自定义chrome的方法(我是作者): http://blogs.msdn.com/b/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx

希望有所帮助,