WM_NCCALCSIZE是非客户区计算大小消息,return 0会将非客户区大小设为0。
会去除非客户区:阴影,关闭最大最小化按钮,标题栏,边框,图标。
窗口照样可以响应:win+←↑↓→按键,拖动窗口到屏幕边缘自动排列。
case WM_NCCALCSIZE:return 0;
注意:去除边框会导致无法调整大小,需要自行处理WM_NCHITTEST消息
case WM_NCHITTEST:
{
POINT pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); ScreenToClient(hWnd, &pt);//鼠标位置
RECT rect; GetClientRect(hWnd, &rect);//客户区矩形
if (!IsZoomed(hWnd))//最大化时不用调整大小
{
int x = 9;//边框宽度
if (pt.x < rect.left + x)
{
if (pt.y < rect.top + x)return HTTOPLEFT;//左上角
if (pt.y > rect.bottom - x)return HTBOTTOMLEFT;//左下角
return HTLEFT;//左边
}
if (pt.x > rect.right - x)
{
if (pt.y < rect.top + x)return HTTOPRIGHT;//右上角
if (pt.y > rect.bottom - x)return HTBOTTOMRIGHT;//右下角
return HTRIGHT;//右边
}
if (pt.y < rect.top + x)return HTTOP;//上边
if (pt.y &