收录日期:2019/08/18 17:17:57 时间:2016/05/30 10:06:29 标签:网络编程
改变EDIT控件的背景颜色
应该是映射WM_CTCOLOR消息,然后得到控件ID,再用SetBkColor()吧
同意tjuzhangrui() 
  加入 消息 WM_CTCOLOR,更改颜色
http://www.enet.com.cn/eschool/inforcenter/A20040506307010.html
你好象问了好多界面的问题哦 
利用WM_CTLCOLOR消息实现Edit Control的文本与背景色的改变

首先要明白: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 reflection。

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" 
 
 
自CEdit派生一个类,重写OnEraseBkgnd方法
在设置edit控件的dialog类中重载OnCtlColor。
在其中加入:
if (pWnd==GetDlgItem(IDC_YOUREDIT))
{
             pDC->SetBkMode(TRANSPARENT);
             pDC->SetTextColor(RGB(0,255,0));
             CBrush YourBrush;
             MyBrush.CreateSolidBrush(RGB(0,128,128));
             hbr=(HBRUSH)MyBrush.GetSafeHandle();

最后
return hbr;

如何做帮助文件????? 安装Red Hat linux7.1是不是c盘必须是FAT? 如何將回車變成

? scjp 问题 送分:try except end的重复执行问题! 如何写好这个函数? 下班了,明天晚上再来向大家请教^_^ ^_^ ^_^ …… powerbuilder7.0怎么安装???? 帮帮忙 如何用c语言访问excel电子表格里的记录数据并将其分解为单个对象?各位高手请指教一下,谢谢! jdbc的四个驱动? 如何用命令方式将一个USER组帐号加入ADMIN组?命令怎么写? 谁有解密软件? 谁解一下这个题目 求普林(prim)算法生成的树为最小生成树的证明 oracle 提供的连接池的好处我怎么看不出来? 一个关于联合体内存分配问题,各位高手,请指教 vfp--如何更改图标?? 请问:SQL Server 70 的 floate 类型的数据在 PB 中用什么类型的变量对应。在从数据窗口中得到时用 getitemnumber 行吗?有什么区别? 推荐好软件eLib,用来保存IE网页,可以来图像甚至flash动画一起保存,我用它保存文档区的好文章,以及论坛区的贴子非常方便,它使用zip格式实时压缩数据,能够节省磁盘空间。 win2000的路由和远程访问的怪问题,我要弄个VPN,帮帮我! C++问题之二 各位大虾有关于CAPI 方面的资料吗? TO y10k 可以给一个简体转繁体的我吗?(flowerbacket) 动态配置数据源的的问题用SQLConfigDataSource API? 在VFP中如何在子表单中做菜单?????(VFP高手请进!!!) 原来的关于这个问题的帖子我也看过啦,但我的BCB5在编译Corba还是出“[IDL Error] could not create JVM” 数据串的问题,一定给分哟 准高手也有问题 javabean 如何和 applet 通信? 虚拟函数覆盖和成员函数有什么区别??