删除 C++ Win32 中的标准窗口框架
Posted
技术标签:
【中文标题】删除 C++ Win32 中的标准窗口框架【英文标题】:Remove the standard window frame in C++ Win32 【发布时间】:2013-01-23 18:37:02 【问题描述】:我看到this documentation on MSDN。
我正在尝试移除窗口的标准框架。我成功地将框架扩展到客户区,但是下面的 sn -p 不起作用。我的窗口看起来和没有它时完全一样......
if (message == WM_CREATE)
RECT rcClient;
GetWindowRect(hWnd, &rcClient);
// Inform the application of the frame change.
SetWindowPos(hWnd,
NULL,
rcClient.left, rcClient.top,
(rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top),
SWP_FRAMECHANGED);
有人可以帮帮我吗?
【问题讨论】:
代码中的任何内容实际上都没有改变框架,它只是告诉定位算法它做了并重新计算了一些值。您需要更改实际的窗口样式才能更改窗口的样式。 我在 MSDN 上看到了这个 sn-p... 但是你真的完成了样本所说的其余部分吗?正如评论所说,您粘贴的代码只是告诉窗口您更改了框架,但实际上并没有改变任何东西。 我已经完成了该页面上 sn-p 之上的所有操作。请看链接;然后你会看到只有那个代码,在它下面,一个带有更改框架的屏幕截图。 请显示您的代码也改变了窗口样式,因为显然缺少一些东西。 【参考方案1】:我认为您可以通过在创建窗口时将 WS_OVERLAPPED(而不是 WS_OVERLAPPEDWINDOW)作为 dwStyle 参数传递给 CreateWindowEx 来做到这一点。
【讨论】:
【参考方案2】:真的很简单,只要去你的窗口过程,然后WM_NCCALCSIZE消息,当WPARAM为TRUE时返回0
// Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
switch (msg)
case WM_NCCALCSIZE:
if (wparam == TRUE) return 0;
break;
...
作为澄清,您显示的代码用于强制以前的代码
【讨论】:
以上是关于删除 C++ Win32 中的标准窗口框架的主要内容,如果未能解决你的问题,请参考以下文章
c++ - Win32 窗口在第一次绘制后冻结(directx 11)