网上收集的:
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_nMyHitTest == 20)//当鼠标没有选择拖动类型的时候改变鼠标状态
{
CRect rect;
CRect staticRect;
this->GetWindowRect(&rect);
ScreenToClient(&rect);
HCURSOR hCursor;
if(point.x > rect.left && point.x < rect.right &&
point.y > rect.top-FRAME_SPACE && point.y < rect.top+FRAME_SPACE)//上边框区域
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENS);
SetCursor(hCursor);
}
else if(point.x > rect.left && point.x < rect.right &&
point.y > rect.bottom-FRAME_SPACE && point.y < rect.bottom+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENS);
SetCursor(hCursor);
}
else if(point.y > rect.top && point.y < rect.bottom &&
point.x > rect.left-FRAME_SPACE && point.x < rect.left+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);
SetCursor(hCursor);
}
else if( point.y > rect.top && point.y < rect.bottom &&
point.x > rect.right-FRAME_SPACE && point.x < rect.right+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);
SetCursor(hCursor);
}
GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&staticRect);
ScreenToClient(staticRect);
if(staticRect.PtInRect(point))
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE);
SetCursor(hCursor);
}
}
CDialog::OnMouseMove(nFlags, point);
}
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
CRect staticRect;
this->GetWindowRect(&rect);
ScreenToClient(&rect);
HCURSOR hCursor;
if(point.x > rect.left && point.x < rect.right &&
point.y > rect.top-FRAME_SPACE && point.y < rect.top+FRAME_SPACE)//上边框区域
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENS);
SetCursor(hCursor);
SetCapture();
m_bChangeSize = TRUE;
m_nMyHitTest = HTTOP;
}
else if(point.x > rect.left && point.x < rect.right &&
point.y > rect.bottom-FRAME_SPACE && point.y < rect.bottom+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENS);
SetCursor(hCursor);
SetCapture();
m_bChangeSize = TRUE;
m_nMyHitTest = HTBOTTOM;
}
else if(point.y > rect.top && point.y < rect.bottom &&
point.x > rect.left-FRAME_SPACE && point.x < rect.left+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);
SetCursor(hCursor);
SetCapture();
m_bChangeSize = TRUE;
m_nMyHitTest = HTLEFT;
}
else if( point.y > rect.top && point.y < rect.bottom &&
point.x > rect.right-FRAME_SPACE && point.x < rect.right+FRAME_SPACE)
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZEWE);
SetCursor(hCursor);
SetCapture();
m_bChangeSize = TRUE;
m_nMyHitTest = HTRIGHT;
}
GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&staticRect);
ScreenToClient(staticRect);
if(staticRect.PtInRect(point))
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE);
SetCursor(hCursor);
SetCapture();
m_bChangeSize = TRUE;
m_nMyHitTest = HTBOTTOMRIGHT;
}
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
BOOL bChangeStatic = TRUE;
// TODO: Add your message handler code here and/or call default
if(m_bChangeSize)
{
m_bChangeSize = FALSE;
TRACE("OnLButtonUp\n");
::ReleaseCapture();
CPoint CurPoint;
CRect DlgRect;
GetCursorPos(&CurPoint);
GetWindowRect(DlgRect);
CRect rectTemp,rectTemp1;
GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&rectTemp);
GetDlgItem(IDC_STATIC_SIZE)->GetWindowRect(&rectTemp1);
ScreenToClient(rectTemp1);
bChangeStatic = rectTemp1.PtInRect(point);
int RightWidth = DlgRect.right - rectTemp.right;
int BottomWidth = DlgRect.bottom - rectTemp.bottom;
int Width = rectTemp.right -rectTemp.left;
int Hight = rectTemp.bottom - rectTemp.top;
if(m_nMyHitTest == HTLEFT)
{
if(abs(DlgRect.left - CurPoint.x) > FRAME_SPACE)
DlgRect.left = CurPoint.x;
}
else if(m_nMyHitTest == HTRIGHT)
{
if(abs(DlgRect.right - CurPoint.x) > FRAME_SPACE)
DlgRect.right = CurPoint.x;
}
else if(m_nMyHitTest == HTTOP)
{
if(abs(DlgRect.top - CurPoint.y) > FRAME_SPACE)
DlgRect.top = CurPoint.y;
}
else if(m_nMyHitTest == HTTOPLEFT)
{
DlgRect.top = CurPoint.y;
DlgRect.left = CurPoint.x;
}
else if(m_nMyHitTest == HTTOPRIGHT)
{
DlgRect.top = CurPoint.y;
DlgRect.right = CurPoint.x;
}
else if(m_nMyHitTest == HTBOTTOM)
{
if(abs(DlgRect.bottom - CurPoint.y) > FRAME_SPACE)
DlgRect.bottom = CurPoint.y;
}
else if(m_nMyHitTest == HTBOTTOMLEFT)
{
DlgRect.bottom = CurPoint.y;
DlgRect.left = CurPoint.x;
}
else if(m_nMyHitTest == HTBOTTOMRIGHT)
{
if(!bChangeStatic)
{
DlgRect.bottom = CurPoint.y;
DlgRect.right = CurPoint.x;
}
}
MoveWindow(DlgRect);
SetRedrawArea(DlgRect);
if(!bChangeStatic)
{
rectTemp.right = DlgRect.right - RightWidth;
rectTemp.left = rectTemp.right - Width;
rectTemp.bottom = DlgRect.bottom - BottomWidth;
rectTemp.top = rectTemp.bottom - Hight;
ScreenToClient(rectTemp);
GetDlgItem(IDC_STATIC_SIZE)->MoveWindow(rectTemp);
}
m_nMyHitTest = 20; //恢复鼠标为未选择拖动状态
}
CDialog::OnLButtonUp(nFlags, point);
}