本帖最后由 papermcse88 于 2011-08-01 10:52:34 编辑

解决方案 »

  1.   

    你在重绘的时候是不是覆盖了checkbox控件,将绘图函数放置在OnPaint里面就能放置绘制的图像被覆盖。
      

  2.   


    谢谢回答。
     
    对话框中,分割成好几个大的区域,每个区域都是bmp图片做背景,上面有checkbox等控件。onpaint中调用描画函数,描画函数中,先loadbmp,设置大小,显示。
    然后计算checkbox等的位置,然后movewindow,放到该放的地方。我是这么处理的,请问有什么问题么?
      

  3.   

    我都不理解你的话:如果该对话框有一部分被挡住,重新描画之后,那些checkbox就不见了。
    你应该描述:
    1、哪一步分被挡住,是不是原先checkbox的部分,被其他对话框挡住么?
    2、重新描绘,是否现在又不被挡住了,比如移开其他对话框?
    3、你说全屏刷新可以出来?是不是你自己代码里写了全屏刷新的代码?
      

  4.   


    谢谢回复,我也觉得写的不太清楚,果然让人看不懂啊,我重新整理了一下。
    弹出来的是一个全屏显示的无模式对话框,用Create函数动态创建的,所有控件的大小,摆放位置都是集中在一个描画函数DrawResult()里。该函数在OnSize,OnPaint中被调用。对话框分成左右两大部分,是两个PICTURE控件,这两个控件都是load BMP图片做背景,然后再BMP上面特定的地方,放置checkbox, ComboBox等需要的控件。对话框刚初始化好全屏现实的时候,所有控件都可以正常显示。
    1,如果用一个全屏程序挡住对话框,再让对话框出现的时候,对话框的所有控件依然全部正常显示。
    2,如果用一个很小的窗口,挡住对话框的一部分,在让对话框全屏显示的时候,对话框就只能刷新被挡住的那一部分, 其余部分的checkbox,combobox等控件就不见了。而出了控件以外的部分,比如BMP背景图片,文字等显示均正常。我已经debug过,上诉1,2两种情况,调用的是同一个函数DrawResult()。请有经验的大虾帮忙分析,谢谢。
      

  5.   

    不要在picture控件中绘制背景,在OnPaint中自己绘制。如将以下绘制函数添加到OnPaint中//主界面贴图
    void CmyPlayerDlg::loadMainSkin(CDC*dc)
    {
    CDC MemDC;
    CBitmap m_bmp;
    BITMAP m_bitmap; m_bmp.LoadBitmap(IDB_MAIN);
    m_bmp.GetBitmap(&m_bitmap);
    MemDC.CreateCompatibleDC(dc);
    MemDC.SelectObject(&m_bmp); dc->BitBlt(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,&MemDC,0,0,SRCCOPY); m_bmp.DeleteObject();
    MemDC.DeleteDC();
    }//在OnPaint()添加如下内容
    CPaintDC dc(this);
    loadMainSkin(&dc);
    这样就不会覆盖掉其他控件了。