我想创建一个窗口,其行为与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
之前禁用重新绘制,但不幸的是它没有多大帮助)。
有没有更好的解决方案,我错过了?
为什么不从窗口样式中删除WS_MAXIMIZEBOX? – kobik
无论如何,你的解决方案#2是一个非常糟糕的主意。 – KonstantinL
除了这点之外,* cmd.exe * **可以被最大化(至少在Windows 10上)。 – IInspectable