C ++ WinAPI窗口大小小于17

时间:2014-03-10 15:11:59

标签: c++ winapi

我的编程课有一个大学任务,用于设置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个小窗口: the orange boxes are 18 little windows that I tried to create

1 个答案:

答案 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 上测试。