界面背景色修改没效果

绿色盒子 2020-01-02 11:19:44
MFC界面背景色修改没效果
非模态界面
尝试了很多方式
包括

//在OnEraseBkgnd
//设置brush为希望的背景颜色
CBrush backBrush(RGB(120,120,120));

//保存旧的brush
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);

//画需要的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);

return TRUE;
//OnPaint
CPaintDC dc(this); // device context for painting
CRect Rect;
GetClientRect(Rect);
CRect rectClient;
CDC dcMen, dcBkgnd;
CBitmap bitmapTemp, *pOldBitmap;
GetClientRect(&rectClient);
bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
dcMen.CreateCompatibleDC(&dc);
pOldBitmap = dcMen.SelectObject(&bitmapTemp);
dcMen.FillSolidRect(rectClient,RGB(120,120,120)); //主要的作图操作
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &dcMen, 0, 0, SRCCOPY);//绘制图片到主DC
dcMen.SelectObject(pOldBitmap);//内存复位
bitmapTemp.DeleteObject();
pOldBitmap=NULL;
//OnCtlColor
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_DLG)
{
pDC->SetTextColor(RGB(255,255,255));//字体颜色
pDC->SetBkColor(RGB(120,120,120));
hbr=CreateSolidBrush(RGB(120,120,120));//控件的背景色
}
return hbr;

以上都没有效果

该界面与普通界面唯一的不同点就是这是个子界面,先放到容器m_Forms中再创建显示的,创建和显示的代码如下

ASSERT(ix <= m_Forms.GetUpperBound());
if (ix > m_Forms.GetUpperBound()) return(false); // does not exist

CDialogEx* pDlg;
if(ix == m_nActiveForm)
{
if (m_nActiveForm != -1)
{
pDlg = m_Forms.GetAt(m_nActiveForm);
pDlg->ShowWindow(SW_SHOW);
pDlg->Invalidate();
pDlg->RedrawWindow();

}
return TRUE; //new == old
}
//hide old
if (m_nActiveForm != -1)
{
pDlg = m_Forms.GetAt(m_nActiveForm);
ASSERT(pDlg != NULL);
if(pDlg->GetSafeHwnd())
{
TRACE0("Close child window\n");
pDlg->SendMessage(WM_CLOSE);
}
m_nActiveForm = -1; // set active is null;
}
m_nActiveForm = ix; // this is the active one now;
if(ix == -1) return TRUE; //hide all
//
pDlg = m_Forms.GetAt(m_nActiveForm);
ASSERT(pDlg != NULL);
if(pDlg->GetSafeHwnd())
{
TRACE0("Show child window\n");
pDlg->MoveWindow(m_Rect);
pDlg->ShowWindow(SW_SHOW);
pDlg->Invalidate();
pDlg->RedrawWindow();
return TRUE;
}
//create
TRACE0("create child window\n");
pDlg->Create(m_dwIdArray[m_nActiveForm],m_pParentWnd);
CRect r;
int x,y;
pDlg->GetWindowRect(&r); // Get the size and position of the dialog in screen coordinates
if (m_bCentered) {
x = m_Rect.left - r.left + ((m_Rect.Width() - r.Width()) / 2);
y = m_Rect.top - r.top + ((m_Rect.Height() - r.Height()) / 2);
}
else
{ // just use the top left corner
x = m_Rect.left - r.left;
y = m_Rect.top - r.top;
}
pDlg->SetWindowPos(m_pParentWnd,x,y, r.Width(), r.Height(), SWP_NOZORDER);
pDlg->MoveWindow(m_Rect);
pDlg->ShowWindow(SW_SHOW);
pDlg->Invalidate();
pDlg->RedrawWindow();

...全文
198 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger波波 2020-01-03
  • 打赏
  • 举报
回复
试了你第二种方式://OnPaint 没问题
许文君 2020-01-03
  • 打赏
  • 举报
回复
那你就直接都在onpaint里执行正确么
schlafenhamster 2020-01-03
  • 打赏
  • 举报
回复
上新的 OnPaint 代码
绿色盒子 2020-01-03
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
OnEraseBkgnd return TRUE
OnEraseBkgnd 功能放 OnPaint 中

试过了
schlafenhamster 2020-01-02
  • 打赏
  • 举报
回复
OnEraseBkgnd return TRUE
OnEraseBkgnd 功能放 OnPaint 中
绿色盒子 2020-01-02
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
CDialogEx::SetBackgroundColor
这个方法就是改OnEraseBkgnd里面,也没啥效果
zgl7903 2020-01-02
  • 打赏
  • 举报
回复

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧