如何改变CButton上显示文本的颜色?

good02xaut 2003-07-27 09:23:52
按钮上默认的文本颜色是黑色,如何改变为红色?
急用!
谢过!!

...全文
317 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucde 2003-08-03
  • 打赏
  • 举报
回复
我也给你发了一份,
已经测试过,
其中的print按钮颜色改成了红色,
请查收邮件!!!
normalnotebook 2003-08-02
  • 打赏
  • 举报
回复
我刚试过,上面的方法的确不错,但有点不是正统的方法
davehuhudave 2003-08-02
  • 打赏
  • 举报
回复
搂主!
其实很简单!
只要用Microsoft forms2.0 commandbutton控件就行了
那里的属性设置根vb一样简单
修改forecolor属性就行了!
aka2006 2003-08-02
  • 打赏
  • 举报
回复
那位老兄,你用的vc是几点0的版本,6.0中,CButton类没有settextcolor成员函数!!
HBRUSH CDdDlg::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_EDIT)) //STASIC & EDIT 可以,但是BTN(BUTTON)好像不行
{
pDC->SetTextColor(RGB(255,22,3));//前景文本色
pDC->SetBkColor(RGB(255,255,0));//背景色
//pDC->SetBkMode(TRANSPARENT); //设置背景模式
}

// TODO: Return a different brush if the default is not desired
return hbr;
}
apcad 2003-08-02
  • 打赏
  • 举报
回复
1:你解压后,将两个文件拷到你的工程
2:加入这两个文件,用生成的新类定义button,使用里面的函数.
3:引起版权纠纷,概不负责!
给分吧!!

共同学习!!!!
apcad 2003-08-02
  • 打赏
  • 举报
回复
已发至邮箱,注意查收!!!!
good02xaut 2003-08-02
  • 打赏
  • 举报
回复
如果能够那么简单的搞定,还用的着发贴吗?
方法我都是过,可就是不行。有现成的例子代码吗,发给我一个。基于对话框的MFC程序,把一个 push button 文本改成红色。外观要和原来的一致,因为用绘图方式做的文本牵扯到坐标问题,往往位置不合适了。
我的邮箱:good02xaut@163.com
问题只要解决,马上结贴。高分相赠。
谢谢·
ckp 2003-07-30
  • 打赏
  • 举报
回复
使用m_button.SetTextColor()即可
baobeixiong 2003-07-30
  • 打赏
  • 举报
回复
重载
CButton类。

m_button.SetTextColor(clr);
lonkil 2003-07-30
  • 打赏
  • 举报
回复
其实,你如果不仅仅为了,改变按钮的颜色的话,还其他的一些特性的话。你可以重载
CButton类。
在Vckbase里面有详细的代码!
StdAfx 2003-07-30
  • 打赏
  • 举报
回复
to dzqsuper(丁轲) :
我不知道你说的 m_button是什么东西?在我给出的代码里面我没有看见。你说的是不是DrawFrameControl函数的用法呢?你看看MSDN就知道了,在我的代码里面绝对没有引入需要声明的变量的.
zxq80 2003-07-30
  • 打赏
  • 举报
回复
你看看http://www.codeguru.com/buttonctrl/color_button.shtml
dzqsuper 2003-07-30
  • 打赏
  • 举报
回复
但是那个m_button是个什么变量,如果是CButton那是不行的
StdAfx 2003-07-30
  • 打赏
  • 举报
回复
把button改成ownerdraw的。重载DrawItem函数。

void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
UINT uStyle = DFCS_BUTTONPUSH;
// This code only works with buttons.

ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)

uStyle |= DFCS_PUSHED;

// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,DFC_BUTTON, uStyle);

// Get the button's text.
CString strText;
GetWindowText(strText);

// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}
rockabyzzz 2003-07-30
  • 打赏
  • 举报
回复
没简单的办法,其实偶觉得自己写也没什么麻烦的嘛……
good02xaut 2003-07-30
  • 打赏
  • 举报
回复
为什么不可以改变push button的文本颜色??查阅MSDN后说是要用CBitmapButton类才行,
有没有更简单的办法改变push button 的文本颜色??
再加100分!!
StdAfx 2003-07-28
  • 打赏
  • 举报
回复
to good02xaut (good):
你说”第一种会把所有同类的控件颜色都改变“,这其实是你不知道怎么控制而已啊。
请看下面的例子。(来源于MSDN2003)
Example
// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CMyDialog
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.

HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)//请注意:只有IDC_MYSTATIC才可能受影响
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0));

// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);

// Return handle to our CBrush object
hbr = m_brush;
}

return hbr;
}
wjiangwin 2003-07-27
  • 打赏
  • 举报
回复
不用继承多个类,只要继承一次就可以了,你把颜色值设成一个公有变量,在对话框初始化时(OnInitDialog)就把颜色值重新设定就可以了。
infofox 2003-07-27
  • 打赏
  • 举报
回复
你要真的是不太会 可以用VS7 哈哈 那里有文字的属性:) 和WORD一样简单 哦VB一样
good02xaut 2003-07-27
  • 打赏
  • 举报
回复
我在网上找到了一些代码。大致都是两种,要么重载Dialog类的WM_CTLCOLOR消息,要么自定义类,反射WM_CTLCOLOR消息。可两种结果都不好。第一种会把所有同类的控件颜色都改变。第二种又太繁琐,如果我要用3种颜色就要用3个继承都类。
有没有方法可以使用一个类,而有自定义都颜色呢?
加载更多回复(3)

16,550

社区成员

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

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

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