Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 防止退出最大化窗口模式_C_Winapi_Window_Mode_Maximize Window - Fatal编程技术网

C 防止退出最大化窗口模式

C 防止退出最大化窗口模式,c,winapi,window,mode,maximize-window,C,Winapi,Window,Mode,Maximize Window,我正在用C编写窗口管理代码。当设置了某些标志时,我希望有一个最大化的窗口,该窗口不能通过拖动标题栏来调整大小。有没有办法将最大化窗口“锁定”在其最大化状态?试试这个 case WM_SYSCOMMAND: if(IsMaximized(hwnd) && ((wParam & 0xFFF0) == SC_RESTORE || (wParam & 0xFFF0) == SC_MOVE)){ return 0; } break;

我正在用C编写窗口管理代码。当设置了某些标志时,我希望有一个最大化的窗口,该窗口不能通过拖动标题栏来调整大小。有没有办法将最大化窗口“锁定”在其最大化状态?

试试这个

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。我以为大家都知道了

瓦尔特试试这个

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。我以为大家都知道了


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

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

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

您也可以在Raymond Chen的博客上阅读此消息:


这里也有一些问题,这一个看起来与您的问题很接近,答案还提供了一个代码片段:

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

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

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

您也可以在Raymond Chen的博客上阅读此消息:


这里也有一些问题,这一个看起来很接近你的问题,答案还提供了一个代码片段:

这几乎奏效了,我做了一些调整。我正在检查SC_MOVE而不是SC_RESTORE,方法如下:ifwParam&0xFFF0==SC_MOVE&&style&WS_最大化返回0;。在不返回零的情况下,返回DefWindowProc也很重要,否则将忽略所有其他syscommand。谢谢你的回答!这几乎奏效了,我做了一些调整。我正在检查SC_MOVE而不是SC_RESTORE,方法如下:ifwParam&0xFFF0==SC_MOVE&&style&WS_最大化返回0;。在不返回零的情况下,返回DefWindowProc也很重要,否则将忽略所有其他syscommand。谢谢你的回答!