读书人

mfc 对话框中怎么使用鼠标拖动位图

发布时间: 2012-04-19 14:36:43 作者: rapoo

mfc 对话框中如何使用鼠标拖动位图
RT,求指导。我已经蒙了

[解决办法]
可以做个全局变量,然后存储位图位置信息,然后响应左键按下.鼠标移动.左键放开的消息,如果是在这个位图所在区域,就进行movewindow! 这个仅仅是我的思路,我也没有做过! 不知道可不可行!
[解决办法]
不是才结了一个贴,和这一样。给一点代码吧。
[解决办法]
在OnMouseMove里,记录鼠标坐标,然后Invalidate,
pDC->BitBlt(x,y,bmInfo.bmWidth,bmInfo.bmHeight,&mDC,0,0,SRCCOPY);//绘制图片
修改x,y的坐标
[解决办法]
你这两天一直在问这个问题
我的博客看来确实不适合你
帮人帮到底
送佛送到西
给你一个例子你参考一下吧
以下代码实现的是在frame窗口拖动位图的一个方案
对话框原理是一样
新建win32空项目
然后更改项目属性使用mfc
新建cpp文件导入此代码即可
位图你自己找一个放工程目录下取名test.bmp即可

C/C++ code
#include<afxwin.h>#include<winuser.h>class CMyWnd:public CFrameWnd                            //主窗口框架类{    CBitmap m_bitmapTest;    CRect    m_rtBitmap;    BOOL    m_bIsPick;    CPoint    m_ptPre;public:    CMyWnd();                                            //构造函数protected:    //消息相应函数    afx_msg BOOL OnEraseBkgnd(CDC* pDC);    afx_msg void OnPaint();    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);    afx_msg void OnMouseMove(UINT nflags,CPoint point);//鼠标移动    DECLARE_MESSAGE_MAP()public:    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);};BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)  ON_WM_MOUSEMOVE()  ON_WM_ERASEBKGND()  ON_WM_PAINT()  ON_WM_LBUTTONDOWN()  ON_WM_LBUTTONUP()END_MESSAGE_MAP()class CMyApp:public CWinApp             //主程序类{public:    BOOL InitInstance();};CMyApp ThisApp;//////////////////////////////////////////////////////BOOL CMyApp::InitInstance(){    CMyWnd *pFrame=new CMyWnd;    pFrame->Create(0,_T("Test"));    pFrame->ShowWindow(m_nCmdShow);    this->m_pMainWnd=pFrame;    return TRUE;}CMyWnd::CMyWnd(){    BITMAP    bmInfo;    m_bIsPick    = FALSE;    m_bitmapTest.Attach((HBITMAP)LoadImage(NULL, _T("test.bmp"), IMAGE_BITMAP, NULL, NULL, LR_LOADFROMFILE));    m_bitmapTest.GetBitmap(&bmInfo);    m_rtBitmap.SetRect(0, 0, bmInfo.bmWidth, bmInfo.bmHeight);}BOOL CMyWnd::OnEraseBkgnd(CDC* pDC){    return    true;}void CMyWnd::OnPaint(){    CPaintDC    dc(this);    CDC            dcMem, dcBmp;    CBitmap        bitmapTemp;    CRect        rectClient;    GetClientRect(&rectClient);    bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());    dcMem.CreateCompatibleDC(&dc);    dcBmp.CreateCompatibleDC(&dc);    dcMem.SelectObject(&bitmapTemp);    dcBmp.SelectObject(&m_bitmapTest);        dcMem.SelectStockObject(WHITE_BRUSH);    dcMem.Rectangle(&rectClient);    dcMem.BitBlt(m_rtBitmap.left, m_rtBitmap.top, m_rtBitmap.Width(), m_rtBitmap.Height(), &dcBmp, 0, 0, SRCCOPY);    dc.BitBlt(0, 0, rectClient.right, rectClient.bottom, &dcMem, 0, 0, SRCCOPY);}void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point){    if(m_rtBitmap.PtInRect(point))    {        m_bIsPick    = TRUE;        m_ptPre        = point;        SetCapture();    }    CFrameWnd::OnLButtonDown(nFlags, point);}void CMyWnd::OnLButtonUp(UINT nFlags, CPoint point){    m_bIsPick    = FALSE;    ReleaseCapture();    CFrameWnd::OnLButtonUp(nFlags, point);}void CMyWnd::OnMouseMove(UINT nflags,CPoint point){    if(m_bIsPick)    {        m_rtBitmap.top        += point.y-m_ptPre.y;        m_rtBitmap.bottom    += point.y-m_ptPre.y;        m_rtBitmap.right    += point.x-m_ptPre.x;        m_rtBitmap.left        += point.x-m_ptPre.x;        m_ptPre    = point;        Invalidate();    }} 

读书人网 >VC/MFC

热点推荐