用鼠标来动态改变一个控件的大小位置 比如要改变对话框内的一个按钮的大小和位置
派生一个按钮类CMyButton,响应WM_NCHITTEST消息
LRESULT CMyButton::OnNcHitTest(CPoint point)
{

if (!rect.PtInRect(pt))
{
if (pt.x <= nFrame && pt.y >= rect.bottom - nFrame)
{
return HTBOTTOMLEFT;
}
else if (pt.x <= nFrame && pt.y <= nFrame)
{
return HTTOPLEFT;
}
else if (pt.x >= rect.right - nFrame && pt.y <= nFrame)
{
return HTTOPRIGHT;
}
else if (pt.x >= rect.right - nFrame && pt.y >= rect.bottom - nFrame)
{
return HTBOTTOMRIGHT;
}
else if (pt.x <= nFrame)
{
return HTLEFT;
}
else if (pt.y <= nFrame)
{ return HTTOP;
}
else if (pt.y >= rect.bottom - nFrame)
{
return HTBOTTOM;
}
else if (pt.x >= rect.right - nFrame)
{
return HTRIGHT;
}
}
else
{
return HTCAPTION;
}
}这个办法对按钮控件有效,对listbox控件有效,都能改变位置和大小
对picture控件一点效果也没有,既不能改变位置,也不能改变大小,请论坛高人帮忙指出原因
或者能提供其他方法能用鼠标改变picture控件的位置和大小

解决方案 »

  1.   

    picture控件 是 CStatic  打开 Notify 属性
      

  2.   

    勾上了Notify属性,还是不能移动不能调整大小
      

  3.   

    void CMyStatic1::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    static CPoint ptLast;
    if(MK_LBUTTON==nFlags)
    {
    CRect rc;
    GetWindowRect(&rc);
    ScreenToClient(&rc);
    MapWindowPoints(GetParent(),&rc);
    MoveWindow(rc.left+(point.x-ptLast.x), rc.top+(point.y-ptLast.y), rc.Width(), rc.Height());
    }
    else
    {
    ptLast=point;
    CStatic::OnMouseMove(nFlags, point);
    }
    Invalidate();
    //
    // CStatic::OnMouseMove(nFlags, point);
    }
      

  4.   

    要改变大小 用 CRectTracker 如:
    class CMyButton : public CButton,public CRectTracker
      

  5.   

    是不是还要把边框样式选上?
    另外注意,是要从CStatic派生子类
    还有picture控件有修改它的ID并映射到派生出来的子类上吧?