挺简单的一个MFC基于对话框程序,主对话框上放了个tab控件,为了显示三个标签页,三个标签页也都是继承自CDialog的。
屏保、或按win+L等一会儿,回来之后,不刷新界面。
难道让我在OnShow事件里invalidate?或refresh?。到底是一个一个标签页里加,还是在主对话框里加。明白的高人指点指点

解决方案 »

  1.   

    从屏保回来之后,程序调不调用OnShow或OnPaint之类的,这也没法设断点啊。
      

  2.   

    明显是没有刷新。把你左边的CSTATIC控件背景在OPAINT中设置成透明试试。中间的CEDIT控件你自己试试吧。
      

  3.   

    真的没有高人懂吗,现在所有的问题,指向了
    Draw counter ticks
    我用TRACE在output窗口显示一些调试信息,屏保回来的时候竟然不调用OnPaint函数,我不知道发生这个的原因,可能是因为我调用了MFC Grid Control这个控件,因为我搜
    Draw counter ticks这条在output显示的信息,结果只有MFC Grid Control这个控件的。
      

  4.   

    屏保、或按win+L等一会儿,这个微软有消息的,楼主自己查一下!
    处理这个消息就可以了!
    很早以前用过这个消息,时间长了,记不得了!
      

  5.   

    case WM_POWERBROADCAST:
    //唤醒事件处理
    if (wParam == PBT_APMRESUMEAUTOMATIC)
    {
    }
    屏保你可以在启动屏保时启动一个键盘和鼠标钩子。在键盘和鼠标回调中处理 
      

  6.   

    汗……6L、7L倒真会头疼医头、脚痛医脚:)建议LZ试一下,将你的窗口部分拖出屏幕外再拖回,或是打开“运行”对话框
    把它在你的窗口上拖一拖,看是不是能重现同样的刷新的问题。如果是,那说明你的窗口本身的处理存在问题,估计是子面板的父窗体没设对。
      

  7.   

    void CMainDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
    {
    CDialog::OnActivate(nState, pWndOther, bMinimized); // TODO: Add your message handler code here
    //只当被激活时调用,失去焦点时不调用
    if (WA_ACTIVE == nState)
    {
    //第一次显示的时候,不调用
    if (IsFirstShow == 0XFF)
    {
    return;
    }
    //  pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
    //  pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
    pDialog[m_CurSelTab]->Invalidate(TRUE);
    // pDialog[m_CurSelTab]->SendMessage(WM_SHOWWINDOW);
    //TRACE("ShowWindow\n");
    }
    }
      

  8.   

    刷新的问题我不太清楚,不过这界面的z-order可能你得弄一下。就是当你用tab切换后,再用SetWindowPos设置tab控件为最下层窗口(每次切换都要调一次)。以前碰到过属于绘图覆盖的问题。
      

  9.   

    有Child属性就可以。没问题的
      

  10.   


    子对话框还得设置Control和Control Parent属性为True,以保证Tab键走位正确:)