如何改变文本颜色

xiaott 2003-01-02 07:05:29
如何能改变对话框中的静态子窗口中的文本颜色?

最近有一个应用:我在一个工程里加入了一个对话框,在其中添加了一个静态文本框,文本默认为黑色,我想改成其它的颜色,如何改呢?

我试过SetTextColor函数,但不行!我是用的SDK,MFC不会,最好能给出演示代码,谢谢各位大哥!
...全文
353 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyw2278 2003-01-03
  • 打赏
  • 举报
回复
我不知道
你所创建的静态文本控件设置了
WS_OWNERDRAW
属性没有

没有这个属性
它是不可能改变它的原有东西的显示的

swinbetter 2003-01-03
  • 打赏
  • 举报
回复
settextcolour
zwp771 2003-01-03
  • 打赏
  • 举报
回复
CWnd* pWnd=GetDlgItem(IDC_STATIC);
CDC pDC=pWnd->GetDC();
pDC->SetTextColor(RGB(0,0,0),RGB(1,1,1),RGB(2,2,2));
明天去抢劫 2003-01-02
  • 打赏
  • 举报
回复
MFC下先GetDC()再SetTextColor()
程序的色彩 2003-01-02
  • 打赏
  • 举报
回复
SetTextColor(hdc,RGB(255,0,0));
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
SDK的话我想还是直接对static控件进行子类化的好...
子类化后处理wm_paint然后都自己画...

没事上www.codeproject.com溜溜...
xiaott 2003-01-02
  • 打赏
  • 举报
回复
虽然我只会SDK,但我还是会尝试一下 demetry(大松) (朋友)的方法,谢谢大家,如果要是用用SDK说明的就好了!依然在线等待…………
demetry 2003-01-02
  • 打赏
  • 举报
回复
这时我的一个工程中的一段代码,应该可以解决楼主的问题:
这是我自己的程序中的一段代码:
void CMainCtrlDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CFont ftStatus, *pOldFt;
PAINTSTRUCT ps;
CString strTmp;
//创建字体
ftStatus.Detach();
ftStatus.CreateFont(m_rStatus.Height() - 2, 0, 0, 0, FW_NORMAL, 0, 0, 0,
DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, "宋体");
//画出字体
CDC* dc = m_stcStatus.BeginPaint(&ps);
//设置背景颜色不随字体颜色改变
dc->SetBkMode(TRANSPARENT);
pOldFt = dc->SelectObject(&ftStatus);
//在"状态"静态文本框中画出字体
if(m_strStatus.Compare("启 动") == 0)
{
dc->SetTextColor(RGB(0, 125, 0));
}
else
{
dc->SetTextColor(RGB(255, 0, 0));
}
dc->DrawText(m_strStatus, m_strStatus.GetLength(),
&m_rStatus, DT_CENTER | DT_VCENTER);
dc->SelectObject(&pOldFt);
m_stcStatus.EndPaint(&ps);

CDialog::OnPaint();
}
}

上面是显示三种颜色的字体,当你想要改变字体颜色的时候,还必须在程序中强行调用OnPaint。在调用OnPaint之前,还要先调用CWnd::Invalidate使你的按钮矩形无效化,然后调用CWnd::SetWindowText(""),将按钮文本清空。
这只是解决你提出的问题的一种方法,你按照我说的在试一试、


xiaott 2003-01-02
  • 打赏
  • 举报
回复
我在
else
{SetCursor(LoadCursor(NULL,IDC_ARROW));//指针恢复
iEmail=0;

语句后加了:
InvalidateRect(hwndCtrl,NULL,1);
但还是不管用?请指教!在线等待!
zswzwy 2003-01-02
  • 打赏
  • 举报
回复
简要说明:输入RGB值动态改变文字背景色和文字颜色
http://www.vccode.com/vcfile/show.php?id=257

真不错!
zswzwy 2003-01-02
  • 打赏
  • 举报
回复
刀兄,谢了!
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
to zswzwy:
不用呀...那些消息都流向OnCtlColor的函数...在OnCtlColor中通过nCtlColor判断是哪种消息...
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
onmousemove的时候调用一下InvalidateRect以便刷新static控件...
xiaott 2003-01-02
  • 打赏
  • 举报
回复
以下是本人源程序,此程序是将模似超级链接效果,首先我在对话框中插入一个静态文本控件,编写了部分代码实现了指针变形,但无法实现文本变色!WM_CTLCOLORSTATIC消息是放在对话框过程里处理的吗?以下的程序还是没有改变颜色,我快崩溃了!请高手指点,小弟不胜感激!!!!
==========================================================
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{

static HWND hwndCtrl;
static RECT rect;
static POINT pt;
static int iEmail=0;
//HDC hdc;
// PAINTSTRUCT ps ;
switch (message)
{
case WM_INITDIALOG:
hwndCtrl=GetDlgItem(hDlg,IDC_STATIC1); //获取静态文本框的句柄
return TRUE ;
case WM_LBUTTONDOWN:
if(iEmail)//若鼠标指针在静态文本框内
ShellExecute(hDlg,NULL,"mailto:xiaott@sd163.net",0,0,0);
EndDialog (hDlg, 0) ;
return TRUE ;
case WM_CTLCOLORSTATIC ://无法实现文本变色
if(iEmail)
SetTextColor((HDC)wParam,RGB(255,0,0));
else SetTextColor((HDC)wParam,RGB(0,0,0));
return TRUE;
case WM_MOUSEMOVE://可以实现鼠标命中测试
GetClientRect(hwndCtrl,&rect);
GetCursorPos(&pt);
ScreenToClient(hwndCtrl,&pt);

if(PtInRect(&rect,pt))//若鼠标指针在静态文本框内
{SetCursor(LoadCursor(NULL,IDC_HAND));//设置鼠标指针为手形
iEmail=1;
}
else
{SetCursor(LoadCursor(NULL,IDC_ARROW));//指针恢复正常
iEmail=0;
}
return TRUE;
}
return 0;
}
马志1993 2003-01-02
  • 打赏
  • 举报
回复
为什么不用CreateFont
zswzwy 2003-01-02
  • 打赏
  • 举报
回复
请问刀兄,要手工加入映射吗?
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
SDK中有WM_CTLCOLOR
WM_CTLCOLORBTN
WM_CTLCOLORDLG
WM_CTLCOLOREDIT
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC..
而MFC中合并为一个
zswzwy 2003-01-02
  • 打赏
  • 举报
回复
老大这个消息在哪?
kingcom_xu 2003-01-02
  • 打赏
  • 举报
回复
响应WM_CTLCOLORSTATIC 消息...
并把 wParam强制转成HDC...
HDC dc=(HDC)wParam;
SetTextColor(dc,RGB(255,0,0));
zswzwy 2003-01-02
  • 打赏
  • 举报
回复
OnCtrColor()
{
SetTextColor()
}
加载更多回复(2)

16,472

社区成员

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

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

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