我正在尝试创建一个行为类似于cmd.exe的窗口,特别是我不想支持最大化窗口,因为我只显示完全可见的文本行(垂直) 。到目前为止我想出了两种解决方案:
解决方案1:
case WM_SYSCOMMAND:
if (wParam == SC_MAXIMIZE) {
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
break;
解决方案2:
case WM_SIZE:
if (wParam == SIZE_MAXIMIZED) {
SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
return 0;
}
break;
不幸的是,前者仅在用户明确单击标题栏或上下文菜单中的最大化按钮时才有效。例如,如果用户只是双击标题栏,它不会阻止它。
对我来说,后一种解决方案的问题是,它会导致滚动条消失,直到您手动调整窗口大小(通过拖动两侧)。另外,有时您会在窗口大小恢复之前看到窗口闪烁(我确实尝试在发送 WM_SYSCOMMAND
/SC_RESTORE
之前禁用重绘,但不幸的是它没有多大帮助)。
我缺少更好的解决方案吗?
最佳答案
case WM_SYSCOMMAND:
UINT SysCommandCode = wParam & 0xFFF0;
if (SysCommandCode == SC_MAXIMIZE) {
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
break;
此外,建议从 Windows 样式中删除 WS_MAXIMIZEBOX(创建时)。
关于c - 阻止窗口最大化功能? (完全地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385503/