用鼠标拖动图片移动Drag the picture move with mouseDrag the picture to respond to the 3 mouse message
OnLBut t onD own, OnLBut t onUp, OnMous eMove
When the left button is pressed:
To determine if the image is pressed inside the image, if youcapture the picture
When the left key is released:
Release pictures
Mouse movement: according to the movement of the mouse,real-time redraw pictures
For this purpose, three class variables are set:
CPoint Pt; / / save the starting point
BOOL bcapture; / / image capture
CSize offsetsize; //offset of the mouse and the starting pointof the picture
The first is initialization:
[cpp] view plaincopyprint?
CMovePictureView: : CMovePictureView ()
{
Add construction code here / / TODO:
Bcapture=FALSE;
Pt.x=0;
Pt.y=0;
Offsetsize.cx=0;
Offsetsize.cy=0;
}
Then respond to the OnLButtonDown message
[cpp] view plaincopyprint?
Void CMovePictureView: : OnLButtonDown (UINT nFlags, CPointpoint)
{
CRect selrc (PT, size) ;
CClientDC DC (this) ;
OnPrepareDC (&dc) ;
CRgn rgn;
Rgn.CreateRectRgnIndirect (&selrc) ;
If (rgn.PtInRegion (point))
{
SetCapture () ;
B c ap tur e=T RUE;
CPoint RCPT (PT) ;
Offsetsize=point-rcpt;
SetCursor (LoadCursor (NULL, IDC_CROSS) ) ;
}
CScrollView: : OnLButtonDown (nFlags, point) ;
}
Respond to UP messages
[cpp] view plaincopyprint?
Void CMovePictureView: : OnLButtonUp (UINT nFlags, CPointpoint)
{
ReleaseCapture () ;
Bcapture=FALSE;
CScrollView: : OnLButtonUp (nFlags, point) ;
}
Respond to Move messages
[cpp] view plaincopyprint?
Void CMovePictureView: : OnMouseMove (UINT nFlags, CPointpoint)
{
If (bcapture)
{
CClientDC DC (this) ;
OnPrepareDC (&dc) ;
CRect oldrc (PT, size) ;
InvalidateRect (oldrc, TRUE) ;
Pt=point-offsetsize;
CRect newrc (PT, size) ;
InvalidateRect (newrc, TRUE) ;
}
CScrollView: : OnMouseMove (nFlags, point) ;
}
If you're drawing in the whole view or drawing in the entiredialog box, you can move the picture. But, if you're drawingin the CStatic picture control in the dialog box, there' s aproblem.
The reason is that: the mouse in response to the news, thecoordinates of CPoint points are the coordinates of the clientarea (dialog box because the response is a mouse message dialogbox so the coordinate system is a coordinate system, and thedialog box) our map is a CSTATIC picture control coordinatesystem and two coordinate systems are different, so there wasconfusion, cause we can not achieve the results you want.Solution: when the mouse message is received, screencoordinates are used as intermediate media. Specifically asfollows: first converts the CPoint from the dialog coordinatesystem to the screen coordinate system, and then converts thescreen coordinate system to the control coordinate system
[cpp] view plaincopyprint?
Void CShowImageDlg: : OnLButtonDown (UINT nFlags, CPoint point){
TODO: / / add your message handler code here and / or calldefault
CPoint orgPoint=point;
This->ClientToScreen (&point) ; //dialog box coordinates intoscreen coordinates
M_image.ScreenToClient (&point) ; / / screen coordinates intothe control coordinate system
CRect selRc (m_pt, m_size) ; / / coordinate control
CRgn rgn;
Rgn.CreateRectRgnIndirect (&selRc) ;
If (rgn.PtInRegion (point)) / / in the judgment of thecoordinate control, so you should first convert point tocoordinate control
{
SetCapture () ;
M_bc apt ure=TRUE;
CPoint RCPT (m_pt) ;
M_offsetsize=point-rcpt;
SetCursor (LoadCursor (NULL, IDC_CROSS) ) ;
}
CDialog: : OnLButtonDown (nFlags, orgPoint) ;
}
[cpp] view plaincopyprint?
Void CShowImageDlg: : OnLButtonUp (UINT nFlags, CPoint point){
TODO: / / add your message handler code here and / or calldefault
ReleaseCapture () ;
M_bcapture=FALSE;
CDialog: : OnLButtonUp (nFlags, point) ;
}
[cpp] view plaincopyprint?
Void CShowImageDlg: : OnMouseMove (UINT nFlags, CPoint point){
TODO: / / add your message handler code here and / or calldefault
CPoint orgPoint=point;
This->ClientToScreen (&point) ;
M_image.ScreenToClient (&point) ;
If (m_bcapture)
{
CRect oldRc (m_pt, m_size) ; / / coordinate control
M_image.ClientToScreen (&oldRc) ; / / into screen coordinatesThis->ScreenToClient (&oldRc) ; / / convert dialog boxcoordinates, then call the right InvalidateRect (oldRc, TRUE) ;because this function is invoked in the dialog box, so thedialog box coordinates coordinates
InvalidateRect (oldRc, TRUE) ;
M_pt=point-m_offsetsize;
CRect newRc (m_pt, m_size) ;
M_image.ClientToScreen (&newRc) ; // the same, will coordinatecontrol of newRc into the dialog box coordinates conversion,can call the InvalidateRect function correctly
This->ScreenToCl ient (&newRc) ;
InvalidateRect (newRc, TRUE) ;
}
CDialog: : OnMouseMove (nFlags, orgPoint) ;
}
搬瓦工怎么样?2021年7月最新vps套餐推荐及搬瓦工优惠码整理,搬瓦工优惠码可以在购买的时候获取一些优惠,一般来说力度都在 6% 左右。本文整理一下 2021 年 7 月最新的搬瓦工优惠码,目前折扣力度最大是 6.58%,并且是循环折扣,续费有效,可以一直享受优惠价格续费的。搬瓦工优惠码基本上可能每年才会更新一次,大家可以收藏本文,会保持搬瓦工最新优惠码更新的。点击进入:搬瓦工最新官方网站搬瓦工...
快云科技怎么样?快云科技是一家成立于2020年的新起国内主机商,资质齐全 持有IDC ICP ISP等正规商家。我们秉承着服务于客户服务于大众的理念运营,机器线路优价格低。目前已注册用户达到5000+!主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机!产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国...
RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...