WS_EX_TOOLWINDOW工具窗口无法正常工作

时间:2019-06-03 04:32:18

标签: c++ windows winapi mfc

在我们的旧代码中,使用的是Windows扩展样式WS_EX_TOOLWINDOW,这基本上是为了将标题栏显示为狭窄,但是最近在winodws版本中,标题栏并未绘制为狭窄.WS_EX_TOOLWINDOW并未提供狭窄的标题栏在更新的Windows版本中。在单击事件中使标题栏变窄。让我知道是否还有另一种方法可以实现这一目标?

我已经阅读到我们需要处理WM_NCCALCSIZE。但是还有其他方法吗?或者如果这是唯一的方法,那么我如何通过单击按钮来处理它?<​​/ p>

代码段:

HWND hwnd = m_hWnd;
......

DWORD dwStylesEx = ::GetWindowLong( hwnd, GWL_EXSTYLE );

if ( bNarrowTitle == true)
{
    dwStylesEx |= WS_EX_TOOLWINDOW;
}
else
{
    dwStylesEx &= ~WS_EX_TOOLWINDOW;
}
...

::SetWindowLong( hwnd, GWL_EXSTYLE, dwStylesEx );

2 个答案:

答案 0 :(得分:0)

MSDN says

  

某些窗口数据已缓存,因此使用SetWindowLong进行的更改将不会生效,除非您调用SetWindowPos函数。 具体来说,如果您更改任何框架样式,则必须使用SWP_FRAMECHANGED标志调用SetWindowPos ,以正确更新缓存。

答案 1 :(得分:0)

默认外观不会以任何方式对其进行区分。这表明您将只需要忍受它。

它可能是由于较小的手指不友好而被更改的!

引用:WS_EX_TOOLWINDOW doesn't give look I want

正如您所说,处理WM_NCCALCSIZE可能是处理非客户区域大小的唯一方法。

引用:How to set the size of the Non-client area of a Win32 window (native)