浅谈vc里控件的字体和颜色的改变
2009-05-03 18:50
302 查看
五一在家,闲来无事,搬弄起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()强制窗体重绘,是设置立刻生效.
好了,文章就到这里,有什么不妥之处,还望各位多多指教啊.
好了,废话少说,花了将近一下午时间,终于将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()强制窗体重绘,是设置立刻生效.
好了,文章就到这里,有什么不妥之处,还望各位多多指教啊.
相关文章推荐
- 在VC++中改变树状控件子项Item字体和颜色
- VC:改变控件的背景颜色及字体
- VC++之控件之改变编辑框内字体颜色
- VC++ 控件改变编辑框字体和颜色
- VC改变控件的背景颜色 字体 文本颜色
- VC改变控件的背景颜色 字体 文本颜色
- VC中控件字体与文本颜色的设置
- VC 编辑框 改变背景、字体、文本颜色、长度限制、英文 汉字判断
- VC 使用OnCtlColor函数来改变控件颜色
- 改变List列表控件中的字体颜色和单元格背景颜色
- VC 编辑框 改变背景、字体、文本颜色、长度限制
- 如何改变控件内的字体颜色?
- VC中控件字体与文本颜色的设置
- VC中动态改变控件和对话框字体(大小)
- vc 根据字体对话框和颜色对话框设置控件里的字体和颜色
- VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方
- 如何动态更改VC控件字体颜色
- VC中如何改变对框中控件的颜色
- UIPickerView控件中自定义 及 改变当前选中的Item的字体颜色
- 如何改变CRichEdit字体颜色 vc