您的位置:首页 > 其它

改变单文档的背景色

2012-05-07 14:28 176 查看
其实方法很简单:

1) 在重载的OnDraw函数中,

CRect recct;

GetClientRect(&rect);

pDC->FilledsolidRect(0,0,rect.right,rect.bottom,RGB(128,128,128));

这个过程直接写在OnEraseBkgnd 函数中也是一样的。

2) 在view类中重载 OnctlColor 函数,其实这个函数是(下面部分是来自网络)

在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:

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

参数nCtlColor用于指定控件的类型,可以是:

.CTLCOLOR_BTN 按钮控件

.CTLCOLOR_DLG 对话框

.CTLCOLOR_EDIT 编辑框

.CTLCOLOR_LISTBOX 列表控件

.CTLCOLOR_MSGBOX 消息控件

.CTLCOLOR_SCROLLBAR 滚动条控件

.CTLCOLOR_STATIC 静态控件

[程序实现]

假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.

HBRUSH CMyDlg::OnCtlColor(CDC*
pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC,
pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

if (nCtlColor==CTLCOLOR_STATIC)


{

pDC-> SetTextColor(RGB(255,0,0));
//字体颜色

pDC-> SetBkColor(RGB(0,
0, 255));
//字体背景色

}

// TODO: Return a different brush if the default is not desired

return hbr;

}


如果要指定某个特定控件可以这样写:ID为IDC_STATIC1

if (pWnd-> GetDlgCtrlID()==IDC_STATIC1)

{

pDC-> SetTextColor(
RGB(255,0,0));
//设置字体颜色

pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明

// TODO: Return a different brush if the default is not desired

return (HBRUSH)::GetStockObject(BLACK_BRUSH);
// 设置背景色

}

else

return hbr;


【注】

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明
以上是改变某个控件的颜色,如果只是设置View的背景色:
HBRUSH CDrawProgramView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

/*if(nCtlColor == IDD_DRAWPROGRAM_FORM)

{

return (HBRUSH)m_brush.GetSafeHandle();

}*/ 这里这样写并没有实现自己想要的

hbr = CreateSolidBrush(RGB(128,128,128));

// TODO: 如果默认的不是所需画笔,则返回另一个画笔

return hbr;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: