问:关于改变文本框颜色的问题

vc1214 2005-09-14 03:59:26
我在OnInitDialog()中加入了这些代码:

CStatic * m_pwd=(CStatic*)GetDlgItem(IDC_STATIC4);
CDC *pdc=m_pwd->GetDC();
a1=0;a2=255;a3=255;
CRect rect;
m_pwd->GetClientRect(&rect);
pdc->SetBkColor(RGB(a1,a2,a3));
pdc->SetTextColor(RGB(a1,a2,a3));
pdc->DrawText("adsdada",&rect,DT_CENTER);
m_pwd->ReleaseDC(pdc);

为什么不起作用啊?连pdc->DrawText("adsdada",&rect,DT_CENTER);也没反应
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc1214 2005-09-15
  • 打赏
  • 举报
回复
那找各位提示,我改了程序:
HBRUSH CCsliderctrlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

// TODO: Return a different brush if the default is not desired
if ((pWnd->GetDlgCtrlID()==IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))

{
CRect rect;
pWnd->GetClientRect(&rect);
CBrush brush;
brush.CreateSolidBrush(RGB(a1,a2,a3));
pDC->FillRect(&rect,&brush);
pDC->SetBkColor(RGB(a1,a2,a3));
pDC->SetTextColor(RGB(0,0,0));
pDC->DrawText("adsdada",&rect,DT_LEFT);
pWnd->ReleaseDC(pDC);
}
return hbr;
}
其中a1,a2,a3是3个slider的值,可是结果还是不太好,我向edit输入字符,却显示不出来,我应该怎么改动???
vc1214 2005-09-15
  • 打赏
  • 举报
回复
vc1214 2005-09-14
  • 打赏
  • 举报
回复
谢谢
不过还是不太清楚
你们有没有用SliderCtrl来改变edit框背景颜色的例子?????
Bryan Ma 2005-09-14
  • 打赏
  • 举报
回复
对响应对话框的PAINT消息或者CTRL_COLOR消息
goodboyws 2005-09-14
  • 打赏
  • 举报
回复
补充一下,如果是单行EDIT,需要处理CTLCOLOR_MSGBOX
//{{AFX_MSG_MAP(CEditDialog)
ON_WM_CTLCOLOR()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////////
// CEditDialog message handlers

HBRUSH CEditDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor) {

case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
// Set color to green on black and return the background
brush.
pDC->SetTextColor(RGB(0, 255, 0));
pDC->SetBkColor(RGB(0, 0, 0));
return (HBRUSH)(m_pEditBkBrush->GetSafeHandle());

default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}


快乐鹦鹉 2005-09-14
  • 打赏
  • 举报
回复
CStatic * m_pwd=(CStatic*)GetDlgItem(IDC_STATIC4);
CDC *pdc=m_pwd->GetDC();
a1=0;a2=255;a3=255;
CRect rect;
m_pwd->GetClientRect(&rect);
pdc->SetBkColor(RGB(a1,a2,a3));
pdc->SetTextColor(RGB(a1,a2,a3));
pdc->DrawText("adsdada",&rect,DT_CENTER);
m_pwd->ReleaseDC(pdc);

==这段代码写在初始化函数中是不行的。没有作用,因为界面启动时,会调用刷新函数(OnPaint),由于你没有在刷新函数中重绘,所以你在初始化函数中绘制的东西,刷新时就被擦掉了。
cutexue 2005-09-14
  • 打赏
  • 举报
回复
WM_CTLCOLOR是一个由控制(Control)发送给它父窗口的通知消息(Notification message)。


生成一个标准的单文档应用程序框架,假设应用程序的名称为Color。我将利用它的About对话框做示范。

在About dialog中添加两个Edit control,设定其ID为IDC_EDIT1与IDC_EDIT2;


第一种方法(对应于IDC_EDIT1): 按照标准的Windows编程,由其父窗口的消息处理函数负责处理WM_CTLCOLOR消息。

1. 在CAboutDlg中添加一个数据成员:HBRUSH m_brMine;

2. 利用向导映射AboutDlg的WM_CTLCOLOR消息,产生函数:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);pDC是AboutDlg的设备上下文,pWnd是AboutDlg中发送该消息的control指针,nCtlColor市Control的类型编码。对其进行如下修改:

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

{

if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))

{

COLORREF clr = RGB(255,0,0);

pDC->SetTextColor(clr); //设置红色的文本

clr = RGB(0,0,0);

pDC->SetBkColor(clr); //设置黑色的背景

m_brMine = ::CreateSolidBrush(clr);

return m_brMine; //作为约定,返回背景色对应的刷子句柄

}

else

{

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

return hbr;

}

}


第二种方法(对应于IDC_EDIT2): 利用MFC 4.0的新特性: Message relection。

1.利用向导添加一个新的类:CColorEdit,基类为CEdit;

2.在CColorEdit中添加一个数据成员: HBRUSH m_bkBrush;

3.利用向导映射CColorEdit的"=WM_CTLCOLOR"消息,产生函数:HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor); 对其进行如下修改:

HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)

{

COLORREF clr = RGB(0,0,0);

pDC->SetTextColor(clr); //设置黑色的文本

clr = RGB(255,0,0);

pDC->SetBkColor(clr); //设置红色的背景

m_bkBrush = ::CreateSolidBrush(clr);

return m_bkBrush; //作为约定,返回背景色对应的刷子句柄

}

4.利用向导为IDC_EDIT2生成一个数据成员CColorEdit m_coloredit;

5.在定义CAboutDlg的color.cpp文件中加入:#include "coloredit.h"

16,551

社区成员

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

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

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