改变控件颜色

   笔者曾在《软件报》2000年第5期中讨论过如何改变控件的颜色,但还有  
  相当一部分的读者来信提问:一个基于对话框的MFC   AppWizard应用程序中,如  
  何改变对话框的背景颜色呢?对于这个问题,其实可以由几种不同的方法来实  
  现,具体如下(粗斜体代码为增添的):    
   
  ----   方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。    
   
  ----   其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。  
  下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:    
   
  ----   ①   新建一个基于Dialog的MFC   AppWizard应用程序ExampleDlg。    
   
  ----   ②   在CExampleDlgApp   ::InitInstance()中添加如下代码:    
   
  BOOL   CExampleDlgApp:   :   InitInstance   (   )  
  {  
  …  
  CExampleDlgDlg   dlg;  
  m_pMainWnd   =   &dlg;  
   
  //先于DoModal()调用,将对话框设置为蓝色背景、红色文本  
  SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));  
  int   nResponse   =   dlg.DoModal();  
  …  
  }  
   
  ----   编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的  
  是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变  
  应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。    
  ----   方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):    
   
  void   CExampleDlgDlg::OnPaint()    
  {  
  if   (IsIconic())  
  …  
  else  
  {  
  CRect   rect;  
  CPaintDC   dc(this);  
  GetClientRect(rect);  
  dc.FillSolidRect(rect,RGB(0,255,0));   //设置为绿色背景  
   
  CDialog::OnPaint();  
  }  
   
   
  ----   方法三:重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),  
  即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):    
  ----   ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:    
   
  class   CExampleDlgDlg   :   public   CDialog  
  {  
  ...  
  protected:  
  CBrush   m_brush;    
  ...  
  };  
   
   
  ----   ②在OnInitDialog()函数中添加如下代码:    
  BOOL   CExampleDlgDlg::OnInitDialog()    
  {  
  ...  
  //   TODO:   Add   extra   initialization   here  
  m_brush.CreateSolidBrush(RGB(0,   255,   0));   //   生成一绿色刷子    
  ...  
  }    
   
  ----   ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:    
  HBRUSH   CExampleDlgDlg::OnCtlColor  
  (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  /*  
  **   这里不必编写任何代码!  
  **下行代码要注释掉  
  **   HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  */  
   
  return   m_brush;   //返加绿色刷子  
  }  
   
   
  ----   方法四:还是重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),  
  即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):    
  ----   步骤①、②同上方法三中的步骤①、②。    
   
  ----   步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有  
  些不同:    
   
  HBRUSH   CExampleDlgDlg::OnCtlColor  
  (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
   
  //在这加一条是否为对话框的判断语句  
  if(nCtlColor   ==CTLCOLOR_DLG)  
  return   m_brush;   //返加绿色刷子  
  return   hbr;  
  }  
   
  ----   编译并运行即可。    
  ----   关于如何改变对话框背景颜色的问题,可能还有很多种不同方法可以实现,  
  笔者在这仅举出四种常见的方法。其中方法三的编程似乎有点不太规范,方法四则  
  要比方法三正统些,笔者这样的对比举例是为了拓宽VC编程爱好者特别是初学者的  
  编程思路,读者可以根据实际情况选用其中的一种。如果再结合《软件报》2000年第  
  5期中改变对话框上的控件颜色,相信会使您的MFC应用程序"增色"不少。  
  --------------------------------------------------------------------------------  
  增加一个消息响应函数WN_CTLCOLOR  
  HBRUSH   CTestDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)    
  {  
  //HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);  
   
  //   TODO:   Change   any   attributes   of   the   DC   here  
   
  switch   (nCtlColor)  
  {  
  case   CTLCOLOR_BTN:  
  case   CTLCOLOR_STATIC:  
  {  
      pDC->SetBkMode(TRANSPARENT);  
  }  
  case   CTLCOLOR_DLG:  
  {  
      CBrush*           back_brush;  
      COLORREF         color;  
      color   =   RGB(0,0,0);//对话框的颜色  
      back_brush   =   new   CBrush(color);  
      return   (HBRUSH)   (back_brush->m_hObject);  
  }  
  }  
   
  return(CTestDlg::OnCtlColor(pDC,   pWnd,   nCtlColor));  
  //   TODO:   Return   a   different   brush   if   the   default   is   not   desired  
  //return   hbr;  
  }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整的函数:CreateImageButton HWND Options Margins 0 有三个需要输入的参数 第一个是按钮的句柄值 必填 第二个是个数组 必填 第三个是按钮的边界宽度 可填值 0 1 2 3 4 值越高边框越宽 不填的话默认为0 ;这是一个简单事例: ;创建一个普通的按钮 对比用: Gui Add Button w200 Button 0 ; 再创造出实验的按钮: { hwndHBT1 貌似是取得该按键的句柄 hwnd是固定的 就像 g v 值存在变量HBT1里} Gui Add Button w200 hwndHBT1 Button 1 ; 编写出函数的第二个参数: BT1Options : [{BC: "A00000|FF00FF" TC: "White" 3D: 0 G: 1}] ;这个代表普通状态下 按钮的样式 BT1Options[2] : {BC: "600000" TC: "Lime" 3D: 0 G: 0} ;这个代表鼠标悬在按钮上方状态下 按钮的样式 ;是个数组 下边是具体含义 格式直接按照他这样来 ;1 数组序号 也就是 BT1Options[2] 里边的 2 的含义: ; 1 代表普通状态下 ; 2 代表鼠标悬停在按钮上 不按下 ; 3 代表鼠标按住按钮 ; 4 代表按钮在 disable 状态下 按钮无效化 ; 5 代表按钮在 Default 状态下 按钮默认 ; 6 估计用不上 直接上老外的原文吧:< used only on tablet computers ; 其中数组的第一个必须有 也就是上边的BT1Options 后边的根据需要添加 ; ;2 BC是Background Color的缩写 就是代表按钮的颜色 ; 使用的是RBG色 例如:00FF00 或者HTML色 例如"Red" ; "|" 前边的 也就是上边的"A00000" 外围颜色 后边的是中心颜色 ; 也可以里外用一种颜色直接 像这样 BC: "600000" ; ;3 TC是Text Color的缩写 也就是按钮上边文字的颜色 ; 参照背景颜色BC ; ;4 3D表示的是按钮的样式 大家自己改改看就知道了: ; 0 普通 ; 1 中间鼓起 ; 2 垂直纹理 ; 3 水平纹理 ; 9 老外写的背景图片 大家自己试试吧 原文:BC contains the picture"s path or HBITMAP handle ; 默认为 0 ; ;5 G代表Gamma Correction 图像灰度矫正 这个太专业 我也不懂 大家自己试试吧 ; 0 表示否 ; 1 代表是 ; 默认为 0 ;解释完毕 ; ;调用函数 参数依次填入 这里的第三个函数"边界宽度"就缺省了 默认0 CreateImageButton HBT1 BT1Options ">完整的函数:CreateImageButton HWND Options Margins 0 有三个需要输入的参数 第一个是按钮的句柄值 必填 第二个是个数组 必填 第三个是按钮的边界宽度 可填值 0 1 2 3 4 值越高边框越宽 不填的话默认为0 ;这是一个简单事 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值