问题一  关于MFC界面,怎么删除一张我绘在界面的图片
问题描述:
1   在一个函数里,我调用了如下代码完成了绘图。
    CBitmap m_smielBmp;
m_smielBmp.LoadBitmap(IDB_BITMAP_SMILE);//加载图片          CDC dcMem;
dcMem.CreateCompatibleDC(pDc);


dcMem.SelectObject(&m_smielBmp);
pDc->BitBlt(rect.left ,rect.top,20,20,&dcMem,0,0,SRCCOPY);//其中rect为CRect对象
2    图绘制后,在另一个函数里我想删除这个图片怎么做到?描述 1中的 rect为已知问题二  关于自定义Windows消息及响应函数
1    有一个父窗口类ParentWnd,有一个自定义类Server,自定义类Server中有一个Listen()方法
2    类ParentWnd私有一个私有成员变量Server m_server
3    #define WM_SOCKET WM_USER+20    
4    我想让ParentWnd将WM_SOCKET消息给m_server.Listen()处理,有办法做到么?如果Listen是类ParentWnd自己的方法,那个我会;现在麻烦在,我将Listen封装进了一个我自定义的类里,如何让一个我自定义类的方法来对窗口的消息进行响应?

解决方案 »

  1.   

    1:首先你要确定你的背景色是什么,然后你删除后设置一个变量表示删除操作执行,在你画的时候判断这个变量时候为true就可以了例如背景是白色的,
    那么你在
    CBitmap m_smileBmp;作为一个成员
    BOOL m_bDeleted;
    OnPaint()
    {
        CClientDC dc(this);
        if ( m_bDelete )
        {
           CRect rc;
           GetClientRect(rc);
           dc.FillRect(rc, CBrush* pBrush// 背景画刷);
        }
        else
        {
            CDC dcMem;
           dcMem.CreateCompatibleDC(pDc);
           dcMem.SelectObject(&m_smielBmp);
           pDc->BitBlt(rect.left, rect.top, 20, 20,&dcMem,0,0,SRCCOPY);
        }
    }执行删除操作
    OnDelete()
    {
        m_bDelete = TRUE;
        Invalidate();// 或者InvalidateRect();
    }2.将WM_SOCKET消息发送个这个ParentWnd
    在ParentWnd窗口类中处理这个消息
    头文件添加响应函数
    afx LRESULT ProcessWmSocketMsg(WPARAM wParam, LPARAM);源文件处理消息映射
    BEGIN_MESSAGE_MAP()
    ON_MESSAGE(WM_SOCKET, &CXX::ProcessWmSocketMsg)
    END_MESSAGE_MAP()LRESULT CXX::ProcessWmSocketMsg(WPARAM wParam, LPARAM lParam)
    {
        m_server.Listen();
        return TRUE;
    }
      

  2.   

    1,设置绘图条件,再重绘。
    2,在消息响应函数定义你封装listen的类对象,再调用listen方法