工具栏的背景颜色设置??急

fsh21 2005-09-08 02:12:30
各位大哥大姐:
如何进行工具栏背景颜色的设置?
我的工程是基于多文档的,应该在哪个类的那个函数中进行设置?
谢谢! 急!
...全文
2066 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
djfu 2005-09-27
  • 打赏
  • 举报
回复
还没有解决吗?

Q: 如何改变窗口框架的颜色?
A:
一般情况下,改变窗口的背景颜色只需要响应消息WM_ERASEBKND, 重载OnEraseBkgnd函数即可。但是要改变MDI框架窗口的颜色却不能这样实现。

MDI 框架的客户区被另一个窗口的框架所覆盖。为了改变客户区背景色,需要重画这个客户窗口,为了做到这点,从CWnd派生一个新类,称之为CMDIClient。

(1) 在类的CMainFrame 中增加一 CMDIClient 类型的成员变量。
protected:
CMDIClient m_wndMDIClient;
(2) 在类CMainFrame中重载OnCreateClient函数,子类化窗口m_hWndMDIClient:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContex *pContext)
{
if(CMDIFrameWnd::OnCrateteClient(lpcs, pContext))
{
m_wndMDIClient.SubClassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}

(3) 在类的CMDIClient 中响应WM_ERASEBKND消息,重画客户区。
BOOL CMDIClient::OnEraseBkgnd(CDC *pDC)
{
//重画客户区
CBrush brush;
brush.CreateSolidBrush(RGB(0,128,128));
CBrush *pOldBrush= pDC->SelectObject(&brush);
CRect rc;
GetClientRect(&rc);
pDC->Rectangel(&rc);
pDC->SelectObject(pOldBrush);

//必须返回TRUE
return TRUE;
// return CWnd::OnEraseBkgnd(pDC);
}
shiloh0407 2005-09-09
  • 打赏
  • 举报
回复
在View类中加入消息响应处理函数OnCtlColor()即可
fsh21 2005-09-09
  • 打赏
  • 举报
回复
请问各位如何改变框架的颜色??谢谢!
fsh21 2005-09-09
  • 打赏
  • 举报
回复
请问各位怎么改变框架的颜色???
fsh21 2005-09-09
  • 打赏
  • 举报
回复
我就是设在这个函数的入口
djfu 2005-09-09
  • 打赏
  • 举报
回复
你把断点设置在OnCtlColor函数的入口。
fsh21 2005-09-09
  • 打赏
  • 举报
回复
CTLCOLOR_BTN Button control
CTLCOLOR_DLG Dialog box
CTLCOLOR_EDIT Edit control
CTLCOLOR_LISTBOX List-box control
CTLCOLOR_MSGBOX Message box
CTLCOLOR_SCROLLBAR Scroll-bar control
CTLCOLOR_STATIC Static control

在switch中nCtlColor有以上七种选择,但是就是没有工具栏这么一个选项,所以我就没有用switch选项,这样对不对??
请各位帮忙!
fsh21 2005-09-09
  • 打赏
  • 举报
回复
但是这样直接给View类添加这个消息还是不行,工具栏颜色没有发生任何变化,一下是我添加消息的代码:
HBRUSH CDemoView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CScrollView::OnCtlColor(pDC, pWnd, nCtlColor);
// switch(nCtlColor)
// {
// case CTLCOLOR_BTN :
// {
if(pWnd->GetDlgCtrlID() == IDR_MAINFRAME)
{
static HBRUSH hbrEdit = ::CreateSolidBrush( RGB(255, 255, 255) );
pDC->SetBkColor( RGB(0, 250, 250) );
pDC->SetTextColor( RGB(0, 0, 0) );
return hbrEdit;
}
// }
// }
// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired
return hbr;
}

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

ON_WM_CTLCOLOR()
这些都是在CView类中添加的,但问题是这些代码在程序执行的过程中更本就没有被执行到(设立断点没有没有被执行到)
还要兄弟们帮帮忙,谢谢!
fsh21 2005-09-09
  • 打赏
  • 举报
回复
我在此先谢过三位兄弟的指导,谢谢!
djfu 2005-09-08
  • 打赏
  • 举报
回复
msdn:

CWnd::OnCtlColor
The framework calls this member function when a child control is about to be drawn.

你看看自己添加映射消息,就加在CYourView上。

fsh21 2005-09-08
  • 打赏
  • 举报
回复
并且OnCtlColor这个消息函数在CYourView类中没有啊????
fsh21 2005-09-08
  • 打赏
  • 举报
回复
djfu(一马平川) :你好,你这个是在设置按钮的背景颜色和字体颜色吧,在工具栏中能行吗?
djfu 2005-09-08
  • 打赏
  • 举报
回复
如果你的是多文档应用程序,就在视图类CYourView::OnCtlColor处理
djfu 2005-09-08
  • 打赏
  • 举报
回复
处理窗体的WM_COLOR消息:

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_BTN :
{
if(pWnd->GetDlgCtrlID() == IDC_YOUR_BUTTON)
{

static HBRUSH hbrEdit = ::CreateSolidBrush( RGB(255, 255, 255) );
pDC->SetBkColor( RGB(250, 250, 250) );
pDC->SetTextColor( RGB(0, 0, 0) );
return hbrEdit;
}
}


// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired
return hbr;
}
huaguli 2005-09-08
  • 打赏
  • 举报
回复
up

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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