防止退出最大化窗口模式

时间:2014-09-07 00:45:25

标签: c winapi window mode maximize-window

我在C中编写窗口管理代码。当设置了某些标志时,我希望有一个最大化的窗口,通过标题栏拖动窗口无法调整大小。有没有办法锁定'在最大化状态下最大化的窗口?

2 个答案:

答案 0 :(得分:2)

试试这个

case WM_SYSCOMMAND:
    if(IsMaximized(hwnd) && ((wParam & 0xFFF0) == SC_RESTORE || (wParam & 0xFFF0) == SC_MOVE)){
        return 0;
    }

    break;

编辑

完整的代码

switch(message){ //handle the messages
    ...
    ...
    case WM_SYSCOMMAND:
        ...
        break;
    ....
    default:   //for messages that we don't deal with
        return DefWindowProc(hwnd, message, wParam, lParam);
}

return DefWindowProc(hwnd, message, wParam, lParam);

这是默认的 WindowProcedure 。我以为它是众所周知的。

瓦尔特

答案 1 :(得分:2)

valter的回答显示了如何在该阶段拦截用户操作并取消窗口状态更改。但是,这不会直接处理通过Win API进行的状态更改(例如ShowWindow)。

Windows API为您提供了另一个选项,可以更好地控制窗口状态/位置更改。它也更灵活:例如,它允许在窗口位置应用应用程序定义的约束。该选项是WM_WINDOWPOSCHANGING消息及其处理程序。窗口接收指向结构的指针,它可以修改以调整所需的状态和位置。因此,强制最大化状态可以处理更广泛的场景。

  

在处理此消息时,修改WINDOWPOS中的任何值会影响窗口在Z顺序中的新大小,位置或位置。应用程序可以通过设置或清除WINDOWPOS的flags成员中的相应位来阻止对窗口的更改。

您也可以在Raymond Chen的博客上阅读此消息:Use WM_WINDOWPOSCHANGING to intercept window state changes

此处也有一些关于SO的问题,这个问题与您的问题相近,答案也提供了代码段:Detect window restore operation is about to begin