我有一个单文档界面,会弹出一些无模式对话框。我希望如下实现:当出现对话框的时候,主界面的标题是激活显示,对话框界面的标题也是激活显示。我不想重画标题区,因为那样在winxp上届面会很难看。有没有好的办法?我注意到一个现象,就是浮动工具条的标题栏总是主窗口的激活状态保持一致的,它是怎么实现的?

解决方案 »

  1.   

    无模式对话框肯定会是其他标题栏失去焦点吧
    除非你再手动设置看看SetFocus()
      

  2.   

    一头猪老是给我发广告,我将它的地址写在这里,让N个蜘蛛把它扫进去
    [email protected]@[email protected]广告来来来,炸死你!
      

  3.   

    浮动工具条的标题栏应该不是自画的。3年前的带浮动工具条的程序,在winxp下,显示的就是xp样式,那时候还没有xp,不可能自画成xp风格的
      

  4.   

    非常简单的问题,如下就可以解决
    重载
    BOOL CMainFrame::OnNcActivate(BOOL bActive)
    {
             //本来参数改为TRUE,让标题栏默认始终以激活状态绘制就可以了
    //CFrameWnd::OnNcActivate(bActive);
             CFrameWnd::OnNcActivate(TRUE);
    return TRUE;
    }
      

  5.   

    呵呵,自欺欺人而已,至于浮动工具栏等mfc默认就是这么处理的,哪里能够同时存在焦点呢,如果能够的话,cpu就可以实现真正的并行处理了,那将会引起一场革命
      

  6.   

    to ukyoking(乐易):我并不是要同时存在焦点,只要看上去像都是激活的状态就行。就是在win98下,都是蓝色标题条,而不是灰色标题条
      

  7.   

    用OnNcActivate(BOOL bActive)实现,还不是很理想,因为有时候还是灰色的非激活状态,而且,当别的程序显示在前面的时候,我的程序还是激活的蓝色状态。
      

  8.   

    qrlvls:我要是想用CDialogBar做,也就不问这个问题了。我的问题简单的说,就是CDialogBar的亮标题条是怎么实现的。
      

  9.   

    这也好办,添加一个状态变量,如BOOL bStatus,每当产生焦点切换的时候判断,如果是由子窗口引起的切换就置该变量为true;修改代码为
    if(!bActive)
    {
        if(bStatus)
        {
             CFrameWnd::OnNcActivate(TRUE);
             return TRUE;
        }
    }
    CFrameWnd::OnNcActivate(bActive);
    return TRUE;对于子窗口可以传递主窗口状态给子窗口,然后处理
      

  10.   

    强制使用 CFrameWnd::OnNcActivate(TRUE),有时候窗口还是灰的,比如别的在前面的窗口关闭后,显出我的程序就是灰的,鼠标点击也不灵,点出本程序的其他对话框,才变亮。或者切换到其它程序并且换回来,也可变亮。感觉好像,CFrameWnd::OnNcActivate(TRUE)有时候不被调用
      

  11.   

    在强制使用 CFrameWnd::OnNcActivate(TRUE)下,程序打开一个模式对话框,模式对话框是亮的,但主窗口却是暗的