m_mousePos//当鼠标移动到边框时,将这个变量改成对于的属性(HTCAPTION)标题栏就行了
bool VTK3DModelEditor::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)message;
switch (msg->message) {
case WM_NCHITTEST:
{
initMousePos();
switch (m_mousePos)
{
case MousePos_Cap:
*result = HTCAPTION;
return true;
case MousePos_Top:
*result = HTTOP;
return true;
case MousePos_Bom:
*result = HTBOTTOM;
return true;
case MousePos_Left:
*result = HTLEFT;
return true;
case MousePos_Right:
*result = HTRIGHT;
return true;
case MousePos_TopLeft:
*result = HTTOPLEFT;
return true;
case MousePos_TopRight:
*result = HTTOPRIGHT;
return true;
case MousePos_BomLeft:
*result = HTBOTTOMLEFT;
return true;
case MousePos_BomRight:
*result = HTBOTTOMRIGHT;
return true;
case MousePos_None:
default:
break;
}
}
break;
case WM_NCCALCSIZE:
return true;
case WM_GETMINMAXINFO:
{
static int flag = 3;
if (::IsZoomed(msg->hwnd)) {
if (flag == 1)
{
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
flag = 1;
RECT frame = { 0, 0, 0, 0 };
AdjustWindowRectEx(&frame, WS_OVERLAPPEDWINDOW, FALSE, 0);
frame.left = abs(frame.left);
frame.top = abs(frame.bottom);
this->setContentsMargins(frame.left, frame.top, frame.right, frame.bottom);
}
else {
if (flag == 0)
{
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
flag = 0;
this->setContentsMargins(0, 0, 0, 0);
}
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
break;
}
return QWidget::nativeEvent(eventType, message, result);
}