窗口特性:拖拽
suhao opened this issue · comments
suhao commented
- 正常拖动窗口
- 最大化后拖动
- 全屏禁用拖动
suhao commented
windows7 maximized windows draggable SC_MOVE | HTCAPTION
win7系统以上,窗口最大化后,拖到caption区域会收到WM_SYSCOMMAND消息,但是wparam可能是:SC_MOVE | HTCAPTION
WM_SYSCOMMAND响应处理
if (SCF_ISSECURE == wparam) {
// indicates whether the screen saver is secure.
}
auto user = 0xFFF0 & wparam;
auto hittest = wparam & 0x000F;
if (wparam == SC_CLOSE || user == SC_CLOSE) {
handled = true;
SendMessage(WM_CLOSE);
return 0;
}
if (wparam == (SC_MOVE | HTCAPTION)) {
// 0xF012: drag window.
}
switch (user) {
case SC_CLOSE: break;
case SC_MAXIMIZE: break; // ShowWindow(SW_MAXIMIZE)
case SC_MINIMIZE: break; // ShowWindow(SW_MINIMIZE)
case SC_RESTORE: break; // SW_RESTORE
case SC_MOVE:
case SC_SIZE: {
// size move:
// * https://github.com/jonathangray/freebsd-1.x-ports/blob/1deabf6e7f2570248fce13534b0a8f2868ba894b/util/wine/windows/nonclient.c
// * https://github.com/mirror/reactos/blob/c6d2b35ffc91e09f50dfb214ea58237509329d6b/reactos/win32ss/user/ntuser/defwnd.c
// if (IsZoomed() || IsIconic() || !IsWindowVisible()) return;
/*
calc window's position.
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE
SetWindowPos
*/
}break;
case SC_NEXTWINDOW: break;
case SC_PREVWINDOW: break;
case SC_TASKLIST: break;
case SC_HOTKEY: break;
case SC_MONITORPOWER: break;
case SC_SCREENSAVE: break;
default: break;
}
suhao commented
suhao commented
窗口resize到桌面边缘时自动拉伸高度
NCLButtonDown时可以给窗口增加WS_THICKFRAME, 再up时Remove WS_THICKFRAME