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-,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码)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~