在对话框中显示一幅位图,在位图上每个一段时间在指定位置描点(OnPaint)。但是我对对话框设置了隐藏/显示功能,每当对话框隐藏之后再显示,已经瞄过的点会消失,应该怎么办才能使隐藏之后的对话框上的点不消失啊???谢谢!

解决方案 »

  1.   

    上述是基于MFC创建的非模态对话框的显示与隐藏。
      

  2.   

    你画图代码放OnPaint(),或OnDraw()中,窗口重绘时会调用OnPaint()
      

  3.   

    用双缓冲,你所有描点只是在内存CDC中处理,OnPaint()中,你把内存CDC的图贴到你设备DC上来
      

  4.   

    我用双缓存试过,不行,应该是我的代码有问题。帮忙看一下吧,应该怎么弄啊?这个描点的坐标是实时接收的。  
    void CBMPDlg::OnPaint() 
    {
    CPaintDC dc(this);
            CBitmap bitmap;
    CDC dcCompatible;
    bitmap.LoadBitmap(IDB_BMP);
    CDC *cdc=m_BMP.GetDC();
    dcCompatible.CreateCompatibleDC(cdc);
    dcCompatible.SelectObject(&bitmap);
    dcCompatible.SetPixel(i,j,RGB(255,0,0));
    cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);

    这样弄的话,每次只显示一个点。晕,应该怎么改呀?
      

  5.   

    void CBMPDlg::OnPaint() 
    {
        CPaintDC dc(this);
            CBitmap bitmap;
        CDC dcCompatible;//你这是一个临时变量呀
        bitmap.LoadBitmap(IDB_BMP);
        CDC *cdc=m_BMP.GetDC();
        dcCompatible.CreateCompatibleDC(cdc);
        dcCompatible.SelectObject(&bitmap);
        dcCompatible.SetPixel(i,j,RGB(255,0,0));
        cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);你这只是从临时DC中把图贴过去
      

  6.   

    我知道,原理是这样,我试过用全局变量,但是效果还是不对,可能是下面这一句不对?  cdc->BitBlt(0,0,360,180,&dcCompatible,0,0,SRCCOPY);你这只是从临时DC中把图贴去????什么叫临时把DC图贴去
     
    什么叫临时
      

  7.   

    CDC *m_pMemDC;
    void CBMPDlg::OnPaint() 
    {
        CPaintDC dc(this);
        // 此处加你的画图代码
        // 你的画图操作,只对m_pMemDC操作,
        dc.BitBlt(0,0,360,180,m_pMemDC,0,0,SRCCOPY);然后从m_pMemDC中贴到dc中,此处的dc才是你的设备dc
      

  8.   

    我晕说不清楚了。楼上的dc是对话框的,但是我要在picture控件的位图上绘图,需要用
    CDC *cdc=m_BMP.GetDC();
    应该就是变量的问题。但是我不知道怎么改成全局的。晕
      

  9.   

    如果你是在一个对话框上放一个位图控件,在控件上绘图这就不一样了,你最好控件由一个CWnd派生一个类,比如class CWndEx : public Cwnd,然后在CWndEx 中的OnPaint()中绘图,不要在CBMPDlg中的OnPaint()中绘图
      

  10.   

    在对话框中画控件。
    首先要 要 对话框 本身 画完。
    然后 叫 控件 客户区 有效 (invalidate)
    取控件的 DC 和 rect 画