我的编程课有一个大学任务,用于设置C ++ / Win32API脚本,该脚本将使用小窗口显示模拟时钟。
所有罚款和花花公子,但我无法弄清楚如何将窗口调整到小于~17像素。
我试图处理
case WM_GETMINMAXINFO:
{
MINMAXINFO* mmi = (MINMAXINFO*)lParam;
mmi->ptMinTrackSize.x = 1; // doesn't do anything below 18-20
mmi->ptMinTrackSize.y = 1; // same as above
return 0;
}
然而窗口不想在宽度或高度大约17像素以下调整大小。
我使用以下代码创建窗口
hWnd = CreateWindowEx(
WS_EX_TOOLWINDOW,
szWindowClass,
_T( "tool" ),
WS_EX_TOOLWINDOW,
300 + ( 20 * i ), // x
150, // y
1, // width
1, // height
NULL,
NULL,
hInstance,
NULL
);
SetWindowLong(hWnd, GWL_STYLE, 0); // remove borders
橙色框是我试图创建的18个小窗口:
答案 0 :(得分:0)
实现此目的的窗口样式标志的正确组合如下:
WS_POPUP | WS_BORDER | WS_VISIBLE
不需要调用 SetWindowLong
。如果您真的不想要边框,则可以省略 WS_BORDER
标志。 WS_POPUP
的作用是完全抑制窗口的非客户区。因此,没有任何最小值,您可以将窗口缩小到 1 x 1 像素。
hWnd = CreateWindow(
szWindowClass,
0,
WS_POPUP | WS_BORDER | WS_VISIBLE,
300 + (20 * i),
150,
1,
1,
nullptr,
nullptr,
hInstance,
this
);
另见:
How can I remove a window's non-client area completely?
https://stackoverflow.com/a/43819334/1132334
在 Windows 10 版本 2004 上测试。