我有二个对话框。
CMainDlg某个Button产生CSecondDlg.DoModal();
CSecondDlg拥有1个Picture控件,
我做了如下操作:
CMainDlg::SomeFun()
{
    HBITMAP hbmpRed = LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP_RED));
    ((CStatic *)m_CSecondDlg.GetDlgItem(IDC_STATIC_REDLIGHT))->SetBitmap(hbmpRed);
}经过以上的操作后CSecondDlg能正确显示出红灯位图。但是当CSecondDlg移出Window或最小化或被其他窗体挡住后,再回来看时我的Picture控件上的红灯位图就消失了,不会重画了。不知道什么原因,要如何解决,请指教!!苦等佳音

解决方案 »

  1.   

    m_CSecondDlg.Create(SecondDlg的ID,NULL);
    HBITMAP hbmpRed = LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP_RED));
        ((CStatic *)m_CSecondDlg.GetDlgItem(IDC_STATIC_REDLIGHT))->SetBitmap(hbmpRed);
    m_CSecondDlg.ShowWindow(SW_SHOW);
      

  2.   

    2楼大爷。你理解错我的意思吧
    现在不是SecondDlg不见了,是我SecondDlg上的Picture控件中的红灯位图不见了,就像是画图的许多操作一样,如果没在OnDraw()里画图就得在画完后用上Invalidate()这个函数。要是没用Invalidate()就会出现和我一样的情况啊。有人帮我看看我的问题要如何解决吗?
      

  3.   


    在Onpaint() 中 调用 SomeFun()
      

  4.   

    SomeFun()是定义于CMainDlg中的。SomeFun要处理串口接到的字符串加以分析再判断SecondDlg中的Picture控件要显示红灯还是绿灯,所以4楼的哥们,我也想在CSecondDlg::OnPaint()中去完成任务,但事实不大好办。
      

  5.   

    汗死,到底什么原因会这样子?我的程序就只有2个对话框,在第一个对话框加载位图然后给第二个对话框中的PICTURE控件上图。就这样而已,画是能画,但就是当窗体重画时PICTURE 控件没跟着重画
      

  6.   

    在ONPAINT()里画可以不被系统刷新掉
      

  7.   

    问题是我的操作在OnPaint里做的话很麻烦..