浅谈vc里控件的字体和颜色的改变

        五一在家,闲来无事,搬弄起vc,记得vc里的对UI的设计很麻烦,就算是设置个字体和颜色也要一串代码, 怪不得大家都喜欢用.net啊.不过个人感觉vc更接近windows本质.

        好了,废话少说,花了将近一下午时间,终于将vc里的字体和颜色设置基本搞定(我这里只谈static,至于button,呵呵,还比较麻烦啊).我先说下思路,因为窗口总要被重绘的,所以我们对字体的设置就放在onpaint里了,而窗口也是在不断接受wm_ctlcolor消息的,所以我们对颜色的设置就放在OnCtlColor函数里了.还有一个问题,我想动态设置static的字体和颜色怎么办呢.这个问题我思考了很九,也上网查了不少资料,我决定自己在头文件里添加关于颜色和变量的成员.

class CSxDlg : public CDialog
{
// Construction
public:
 CSxDlg(CWnd* pParent = NULL); // standard constructor
DWORD color;
DWORD font;

..............................

..............

这里我定义了color和font两个变量.在再OnInitDialog()里添加下面代码:

this->color=0;
 this->font=0;

好了,完成了初始化设置.

接下来我们添加onpaint里的代码:

void CSxDlg::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
 {
  if(this->font){
  CStatic* b=(CStatic*)this->GetDlgItem(IDC_STATIC);
  CFont c;
 c.CreatePointFont(300,"黑体");
 b->SetFont(&c);
 c.DeleteObject();
  }
 this->color=0x666666;
  CDialog::OnPaint();
 }
}

大家看到了吧,我在else里做了个判断,看this->font是否为0,这样就完成了设置,再看ctlcolor()里的代码:

HBRUSH CSxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 if(pWnd->GetDlgCtrlID()==IDC_STATIC){
  if(this->color) pDC->SetBkColor(this->color);
  pDC->SetTextColor(0x333333);
 }
 
 
 return hbr;
}

这里主要是要判断pwnd是否是我们要设置的static.

最后我们在button里添加代码,完成点击按钮就对static进行改变.

void CSxDlg::OnButton1()
{
 
  this->font=1;
 this->color=0x666666;
 Invalidate();
}

这里 Invalidate()强制窗体重绘,是设置立刻生效.

       好了,文章就到这里,有什么不妥之处,还望各位多多指教啊.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值