对话框上的一个控件,当鼠标放在控件边框上的时候(不是整个控件,只是边框)鼠标成IDC_SIZEWE,且可以拉伸(左右边框都可以拉伸)

解决方案 »

  1.   

    看到一个差不多的代码::不知道对你有用吗?
    我的对话框是无边框的:  
        我映射了WM_NCHITTEST消息,在里面检测鼠标是否在对话框边缘,若是,则返回HT_BORDER(自定义的);  
        映射WM_NCLBUTTONDOWN消息,在里面将bool型变量m_down设为真;  
        映射WM_NCMOUSEMOVE,判断(nHitTest  ==  HT_BORDER  &&  m_down),若是,则说明鼠标在对话框边缘且鼠标被按下并拖动了,接着应该怎么办? 
        或者各位有更好办法?
      

  2.   

    还是不要例子吧,参考:
    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);
    }
      

  3.   

    自己写个类重载该控件,然后在OnMouseMove中判断鼠标位置,并根据鼠标的位置设置鼠标的形状。
      

  4.   

    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);
    }
      

  5.   

    我做出来了,不过暂时只有左移(左边可以像对话框一样拖拉)
    要代码发csdn的短信.写上email
      

  6.   

    fanqing,你好,能给我发一份吗,我也很需要这方面的资料啊,谢谢你了,我得QQ:63666208 email:[email protected]