我做了一个对话框程序,重写了OnCtlColor消息,把背景和Static颜色变了,没有写Onpaint消息,但有时过一段时间就会出现白屏,对话框和控件重绘就会出现问题,不知道哪位大虾能帮小弟这个忙,我把能贡献的分数都拿出来了!求救!!

解决方案 »

  1.   

    CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
        
    AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)&m_hIcon);    SetIcon(m_hIcon, TRUE); // 设置大图标
    SetIcon(m_hIcon, FALSE); // 设置小图标 m_hAccel   =   LoadAccelerators(AfxGetInstanceHandle(),     
                                      MAKEINTRESOURCE(IDR_ACCELERATOR_SAVE));     

    SetCaption();
    // zhaoyj
    m_pMenu = new CMenu();
    m_pMenu->LoadMenu(IDR_MENU);
    SetMenu(m_pMenu);

    InitAllStatic();
    m_ScrList.SetExtendedStyle(m_ScrList.GetExtendedStyle() 
    | LVS_EX_GRIDLINES 
    | LVS_EX_FULLROWSELECT ); m_ScrList.Init(&m_ObjVector);
    m_View.Init(&m_param);

    SetDlgEnable(FALSE);
    // set menu enabl false
    SetSubMenuEnable();
    INIT_EASYSIZE;
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
      

  2.   

    HBRUSH CCatScriptDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  在此更改 DC 的任何属性
    if (nCtlColor == CTLCOLOR_STATIC || nCtlColor == CTLCOLOR_DLG)//这里不同
    {
    pDC->SetBkColor(RGB(192,192,192)); HBRUSH B = CreateSolidBrush(RGB(192,192,192)); 
            //创建画刷
            return (HBRUSH) B; //返回画刷句柄
    }
    if (nCtlColor == CTLCOLOR_BTN)//这里不同
    {
    pDC->SetBkColor(RGB(100,100,100));
    HBRUSH B = CreateSolidBrush(RGB(100,100,100)); 
            return (HBRUSH) B; 
    }
    return hbr;
    }
      

  3.   

    InitAllStatic();
    m_ScrList.SetExtendedStyle(m_ScrList.GetExtendedStyle() 
    | LVS_EX_GRIDLINES|_EX_FULLROWSELECT );
    m_ScrList.Init(&m_ObjVector);
    m_View.Init(&m_param);
    SetDlgEnable(FALSE);
    SetSubMenuEnable();
    画面上控件特别多,上面都是一些设置控件属性,文字的函数,不知道是哪方面的问题?
      

  4.   

    可能是资源泄漏的问题
    HBRUSH B1(B2) = CreateSolidBrush(RGB(...));删除把HBRUSH B1(B2) 作为成员变量
    B1(B2) = CreateSolidBrush(RGB(...)); 放到OnInitDialog()里
    最后窗体销毁时DeleteObject(B);
      

  5.   

    HBRUSH B = CreateSolidBrush(RGB(192,192,192)); 
            //创建画刷
            return (HBRUSH) B; //返回画刷句柄
    同意b作为成员变量
      

  6.   

    可能是背景吧
    BOOL CMy123333333Dlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default

    return TRUE;//CDialog::OnEraseBkgnd(pDC);
    }