我正在尝试创建一个行为类似于 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
之前尝试禁用重绘,但不幸的是它没有多大帮助。)
我缺少一个更好的解决方案吗?
答案 0 :(得分:3)
case WM_SYSCOMMAND:
UINT SysCommandCode = wParam & 0xFFF0;
if (SysCommandCode == SC_MAXIMIZE) {
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
break;
此外,建议从Windows样式中删除WS_MAXIMIZEBOX(创建时)。