在MFC 如何设置按钮的颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MFC 如何设置按钮的颜色相关的知识,希望对你有一定的参考价值。
我是以为MFC新手 我最近弄了对话框的界面程序 但是按钮总是灰色 看起不舒服 我想改变哈按钮的颜色!!请问怎么做 我只知道要派生个Button类 还用DrawItem函数重绘 但是具体怎么做 我不知道了 我在网上看了很多 但是就是不行啊 请哪位具体点 给我讲哈 尽量附上代码 尽量讲的具体点哈
思路:在控件显示之前,每一个控件会向父对话框发送一个WM_CTLCOLOR消息,这个消息缺省处理函数CWnd::OnCtlColor返回一个HBRUSH类型的句柄,这样,就可以设置前景和背景文本颜色,并为控件或者对话框的非文本区域选定一个刷子。实现:
① 先创建一个基于对话框的工程,命名为test,然后在对话框上加入一个ListBox控件。
② 在testDlg.h中加入一个成员变量:HBRUSH m_hbrush;
③ 在OnInitDialog()中,加入m_hbrush=CreateSolidBrush(RGB(0,0,0);此处设置的RGB值可以改变ListBox的背景色。为了观看ListBox中字的颜色变化,给ListBox加入几个字:利用Class Wizard给ListBox加入一个Control类型的成员变量m_ctrlListBox,然后在OnInitDialog()加入如下所示的代码:
m_ctrlListBox.AddString("第一行");
m_ctrlListBox.AddString("第二行");
④ 点击Class Wizard,给testDlg加入WM_CTLCOLOR事件,单击Edit Code按钮,然后把改函数的内容替换为如下代码:
if(nCtlColor== CTLCOLOR_LISTBOX)
pDC->SetBkMode(TRANSPARENT);
//此处设置字体的颜色
pDC->SetTextColor(RGB(255,255,255));
return m_hbrush;
else
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 参考技术A MFC自己修改Button比较麻烦 要自己绘画各个状态下按钮的状态如果真想做个漂亮点的按钮MFC是支持在按钮上贴图片的可以用漂亮的图片贴在上面效果也很不错哦 参考技术B 使用CMFCButton可以解决:
//CMFCButton * button = new CMFCButton;
//button->Create(_T("Test Button"),
// WS_VISIBLE,
// CRect(5, 5, 80, 50),
// this,
// IDC_CCP);
//// 更改文字
//button->SetWindowText(_T("强制更改"));
//// 更改背景颜色
//button->SetFaceColor(RGB(153, 217, 234));
//// 更改字体颜色
//button->SetTextColor(RGB(255, 0, 0));
//// 更改高亮颜色
//button->SetTextHotColor(RGB(63, 72, 204));
//// 更改位置
//button->MoveWindow(100, 300, 100, 70);
//// 鼠标经过时变成手势
//button->SetMouseCursorHand();
//// 工具提示
//button->SetTooltip(_T("俺是提示")); 参考技术C 你看下面的文章,还有code可以下载,这种事情,看看,然后动一下手,就会很easy的http://www.vckbase.com/document/viewdoc/?id=551 参考技术D 没那么麻烦,我能说MFC自带的MFC Button Control控件等按钮,自己就可以修改颜色,还能添加图片,设置字体颜色等。这些控件就在工具箱的下面,前面带MFC开头的那些。你先复制原来按钮的ID,再删掉原来的按钮,拖入MFC按钮,再把这个按钮的ID改为原来按钮的ID,就能提换掉原来的按钮,然后给这个按钮添加变量。在需要改颜色的地方调用m_btn.SetFaceColor(RGB(0, 255, 0));这样的就行了。其他的功能百度或MSDN MFCButton。
这里也有一些http://tech.cncms.com/develop/cjj/95068.html
MFC 如何改变对话框的默认背景颜色(转)
下面介绍三种方法:实现改变对话框的默认背景颜色:
(1)可以在CLotteryApp::InitInstance()设置更新对话框的背景颜色
调用SetDialogBkColor(RGB(160,32,240)) 即可以改变背景颜色
注意这里绘制的颜色是针对程序中所有的对话框
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
前一个RGB是背景色,后一RGB是文本颜色
(2)也可以再CLotteryDlg::OnPaint() 函数里的 else 之后括号里插入如下代码:
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(189,250,200)); 颜色可以自己随便设置
(3) 利用ClassWizard重载OnCtlColor(),即WM_CTLCOLOR消息
在要着色的对话框中申明一个变量,CBRUSH m_hbrush;然后在项目的Dlg类初始化函数中给m_hbrush赋值。
m_brush.CreateSolidBrush(RGB(0, 255, 0));
然后在OnCtlColor(...)返回该画刷就可以了,如下。
HBRUSH CLotteyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch (nCtlColor)
{
case CTLCOLOR_DLG:
HBRUSH aBrush;
aBrush = CreateSolidBrush(RGB(0, 150, 0));
hbr = aBrush;
break;
}
return hbr;
}
再介绍一下:如何清空编辑框里的内容
清空指定的编辑框内容:SetDlgItemText(IDC_EDIT,""); //更新编辑框里的内容
以上是关于在MFC 如何设置按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章