背景:
使对话框具有Resizing功能,但由于设置对话框的WS_THICKFRAME属性后,虽然具备了resizing功能,但却有厚厚的边框,非常不美观。
从网上到了方法,但由于自己简单改了改,所以本文不写为转载,纯属个人记录,切勿追究版权。
关键点:
1、ModifyStyle(WS_CAPTION|WS_THICKFRAME, 0)。
2、
LRESULT CDlgPlayer::OnNcHitTest(CPoint point)
{
CRect rectWindow;
GetWindowRect(&rectWindow);
if (point.x <= rectWindow.left + 3)
{
return HTLEFT;
}
else if (point.x >= rectWindow.right - 3)
{
return HTRIGHT;
}
else if (point.y <= rectWindow.top + 3)
{
return HTTOP;
}
else if (point.y >= rectWindow.bottom - 3)
{
return HTBOTTOM;
}
else if (
(point.x <= rectWindow.left + 10)
&& (point.y <= rectWindow.top + 10)
)
{
return HTTOPLEFT;
}
else if (
(point.x >= rectWindow.right - 10)
&& (point.y <= rectWindow.top + 10)
)
{
return HTTOPRIGHT;
}
else if (
(point.x <= rectWindow.left + 10)
&& (point.y >= rectWindow.bottom - 10)
)
{
return HTBOTTOMLEFT;
}
else if (
(point.x >= rectWindow.right - 10)
&& (point.y >= rectWindow.bottom - 10)
)
{
return HTBOTTOMRIGHT;
}
else
{
return CDialog::OnNcHitTest(point);
}
}
3、
void CDlgPlayer::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
CDialog::OnNcLButtonDown(nHitTest, point);
if (nHitTest == HTTOP)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOP, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTBOTTOM)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTLEFT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_LEFT, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTRIGHT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTTOPLEFT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTTOPRIGHT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTBOTTOMLEFT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTBOTTOMRIGHT)
{
SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
}
}
4、
BOOL CDlgPlayer::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(nHitTest == HTTOP || nHitTest == HTBOTTOM)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
return TRUE;
}
else if(nHitTest == HTLEFT || nHitTest == HTRIGHT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
return TRUE;
}
else if(nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMRIGHT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
return TRUE;
}
else if(nHitTest == HTTOPRIGHT || nHitTest == HTBOTTOMLEFT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
return TRUE;
}
else
{
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
}
以上就ok了。