MFC对话框中绘制橡皮筋矩形

李国帅于 2009-03-09 10:28

在OnLButtonUp中用CDC::BitBlt 放大选择图形,注意要先清除原图。

另外要在OnMouseMove应该先判断一下鼠标是否按下后,再开始矩形虚框,在OnLButtonDown和OnLButtonUp中保存鼠标当前状态(是否按下)。

橡皮筋类是CRectTracker,封装了单个矩形的选择、拖放等形为,不见得适用

步骤:

1.先确定好你使用的坐标系统!!

2.使用橡皮筋控件,记录框住的区域,转换成你的值区域

3.然后把你刚才框住的区域重新绘制到全部客户区(如果你的数据存储结构设计的好的话,很容易实现)

POINT ptDown;
POINT ptUp;

//Windows事件属于同步操作,必须在事件回调完成,才能进行下一步的操作
void CWinDlgDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if (nFlags == MK_LBUTTON)
    {

        CClientDC   dc(this);
        CRect   rc;
        rc.SetRect(ptDown.x, ptDown.y, ptUp.x, ptUp.y);
        rc.NormalizeRect();
        dc.DrawFocusRect(&rc);
        rc.SetRect(CPoint(ptDown.x, ptDown.y), point);
        rc.NormalizeRect();
        dc.DrawFocusRect(&rc);
        ptUp.x = point.x;
        ptUp.y = point.y;

    }

}

void CWinDlgDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    SetCapture();
    ptDown.x = point.x;
    ptDown.y = point.y;

    ptUp.x = point.x;
    ptUp.y = point.y;

}

void CWinDlgDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
    ReleaseCapture();
    CClientDC   dc(this);
    CRect   rc;
    rc.SetRect(ptDown, point);
    rc.NormalizeRect();
    dc.DrawFocusRect(&rc);
    //dc.BitBlt(0,0,rc.Width(),rc.Height(),&dc ,rc.left,rc.top,MERGECOPY);

}

class CPoint : public tagPOINT 添加了许多行为

非MFC中使用
LRESULT CTSCPlayer::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    //WPARAM wParam=MAKEWPARAM(IDOK,0);

    //if(uMsg == WM_KEYDOWN)消息类型
    if(wParam == MK_LBUTTON) //wParam == (MK_LBUTTON | MK_CONTROL) (wParam &MK_CONTROL) != NULL
    {

    }
    m_startPoint.x = LOWORD(lParam);
    m_startPoint.y = HIWORD(lParam);

    return 0;
}
    POINT pt;
    pt.x = GET_X_LPARAM(lParam);
    pt.y = GET_Y_LPARAM(lParam);
VC按键捕捉-转

keyDown任何键按下就会产生此消息,程序会接收到。虚拟码如按下“上向箭头”程序会接收VK_UP(详见虚拟键码表)

只有ASCII表里128字符才能才生OnChar消息,程序接收到的是相应的ASCII如按下a 程序会接收65 (详见ASCII表)

keyDown是基础,OnChar是由keydown keyup 转化来的

如果按下ASCII表之外的按键,则产生keyDown消息,如果按下ASCII表里的键依次产生OnkeyDown接收到keyDown消息(接收到虚拟键码),OnChar接收到char 消息(接收到ASCII码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值