CreateWindowEx API是否真的发布了WM_SIZE消息?

当我通过CreateWindowEx以全屏模式创建窗口时,

CreateWindowEx发布WM_SIZE,但不显示窗口模式。

我的代码像这样设置窗口样式:

if(bFullscr)
{
    //When the window is in full screen mode.
    nStyle = WS_POPUP;
    nExtraStyle = WS_EX_APPWINDOW;
}
else
{
    //Otherwise.
    nStyle = WS_OVERLAPPEDWINDOW;
    nExtraStyle = (WS_EX_APPWINDOW | WS_EX_WINDOWEDGE);
}


并更改显示设置,如下所示(仅全屏模式):

if(bFullscr)
{
    DEVMODE sScrSet;
    memset(&sScrSet, 0, sizeof(DEVMODE));
    sScrSet.dmSize = sizeof(DEVMODE);
    sScrSet.dmPelsWidth = nWidth;
    sScrSet.dmPelsHeight = nHeight;
    sScrSet.dmBitsPerPel = nColorBit;
    sScrSet.dmFields = (DM_BITSPERPEL | DM_PELSHEIGHT | DM_PELSWIDTH);

    if(ChangeDisplaySettings(&sScrSet, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
    {
        //Error routine.
    }
}


我真的很好奇为什么CreateWindowEx有选择地发布WM_SIZE消息。

最佳答案

如果您只是想调整窗口大小,则应在代码中的某个位置按ShowWindow(hWnd, nCmdShow);进行如下更改:

ShowWindow(hWnd, SW_SHOWDEFAULT);//show normal
ShowWindow(hWnd, SW_SHOWMAXIMIZED);//show maximized (full screen)
SetWindowPos(hWnd, NULL, 10, 10, 300, 300, SWP_SHOWWINDOW);//show at specific position


您也可以在CreateWindow中使用WS_MAXIMIZE,但这会使事情复杂化。窗口通常具有WS_OVERLAPPEDWINDOWWS_POPUP|WS_CAPTION|WS_SYSMENU。您应该选择一个并保持简单。

窗口大小更改时,它会收到WM_SIZE,您可以捕获并检查它。

关于c++ - CreateWindowEx发布WM_SIZE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29573270/

10-08 23:17