非模态对话框D1,标题栏和最小最大关闭按钮是都自己画的,也就说没有非客户区,自己画的标题栏位蓝色,背景色为默认的银灰色。
上面有个按钮,是打开文件的(打开文件对话框D2,模态对话框),点这个按钮后,出来D2,左右移动这个对话框,D1的标题栏会被覆盖。
覆盖后,把D2再移开,就是不覆盖D1的标题栏了,但是D1的标题栏不会变回蓝色,而是默认的银灰色。
求解。

解决方案 »

  1.   

    LRESULT CTalking::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类 LRESULT lst= CDialog::DefWindowProc(message, wParam, lParam);
    if(!IsWindow(m_hWnd))
    {
    return lst;
    }
    if(message==WM_MOVE || message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
    {
    CDC* pWinDC = GetWindowDC();
    if (pWinDC)
    DrawTitleBar(pWinDC); //这里是你画标题的函数
    ReleaseDC(pWinDC);
    } return lst;

    }
      

  2.   

    Invalidate();   
    UpdateWindow();   
      

  3.   

    是不是我没说明白,我的意思是,模态对话框D2在D1上移动,D1的标题栏不能自己重绘
      

  4.   

    你可以移开后重绘制上一个被覆盖的区域 RedrawWindow之类都可以
      

  5.   


    你自绘的过程是在OnPaint里完成的么?
    OnEraseBkgnd怎么处理的?
      

  6.   

    标题栏的绘制是在OnPaint里完成的,OnEraseBkgnd直接返回的TRUE
      

  7.   


    那就奇怪了
    不应该出现这种问题啊
    OnPaint代码看看
      

  8.   

    void CChatDlg::OnPaint() 
    {
    CPaintDC dc(this);
    Graphics graphics(dc.GetSafeHdc());

    CRect rcClient;
    GetClientRect(&rcClient);
    //内存图像和内存Graphics
    Bitmap bmp(rcClient.Width(), rcClient.Height()); 

    Graphics* buffergraphics = Graphics::FromImage(&bmp);
    //画标题栏,即自己定制的标题栏
    DrawHeadClient(buffergraphics, rcClient);

    //把绘好的图从内存画到屏幕
    graphics.DrawImage(&bmp, 0, 0, rcClient.Width(), rcClient.Height());

    delete buffergraphics;
    graphics.ReleaseHDC(dc.GetSafeHdc());
    ReleaseDC(&dc);
    }
      

  9.   

    在PreTranslateMessage中转发消息就可以,
    调用D1::PreTranslateMessage();
      

  10.   

    Invalidate();   
    UpdateWindow(); 重绘刷新void CChatDlg::OnPaint() 
    {
        CPaintDC dc(this);
        Graphics graphics(dc.GetSafeHdc());
        
        CRect rcClient;
        GetClientRect(&rcClient);
        //内存图像和内存Graphics
        Bitmap bmp(rcClient.Width(), rcClient.Height()); 
        
        Graphics* buffergraphics = Graphics::FromImage(&bmp);
        //画标题栏,即自己定制的标题栏
        DrawHeadClient(buffergraphics, rcClient);
        
        //把绘好的图从内存画到屏幕
        graphics.DrawImage(&bmp, 0, 0, rcClient.Width(), rcClient.Height());
        
        delete buffergraphics;
        graphics.ReleaseHDC(dc.GetSafeHdc());
        ReleaseDC(&dc);
    }