您的位置:首页 > 其它

浅谈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()强制窗体重绘,是设置立刻生效.



好了,文章就到这里,有什么不妥之处,还望各位多多指教啊.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: