对话框上的一个控件,当鼠标放在控件边框上的时候(不是整个控件,只是边框)鼠标成IDC_SIZEWE,且可以拉伸(左右边框都可以拉伸)
解决方案 »
- 系统精确计时的误差在 50ms?
- 有济南的会vc++的吗?
- 为什么当我拉宽或拉窄Windows任务栏的时候,我的VC程序的工具栏图标就由16*16的尺寸变成32*32的了呢,请有碰到这种奇怪现象的朋友帮个忙啊!
- 在vc++中用ado连接access数据库是老显示这样的错误Error message:IDispatch error #3149?
- 求位图分割、保存的思路和代码
- 像foxmail的附件那样嵌入一个文件,怎么做的阿?谢谢!
- 请问日历控件Calendar Control 8.0在哪里?
- 在Service中安装钩子程序
- c++有没有象VB的split函数?
- WriteProcessMemory怎么个基址+偏移 写入 ??????
- 请教一个简单的控制台(Console)问题,怎么才能在指定位置显示(printf)字符?
- 基于对话框的配置文件
我的对话框是无边框的:
我映射了WM_NCHITTEST消息,在里面检测鼠标是否在对话框边缘,若是,则返回HT_BORDER(自定义的);
映射WM_NCLBUTTONDOWN消息,在里面将bool型变量m_down设为真;
映射WM_NCMOUSEMOVE,判断(nHitTest == HT_BORDER && m_down),若是,则说明鼠标在对话框边缘且鼠标被按下并拖动了,接着应该怎么办?
或者各位有更好办法?
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);
}
{
// 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);
}
要代码发csdn的短信.写上email