首先,在对话框上添加一个Static控件,关联一个控制变量m_static(不是Value,是Control)
然后,建立一个字体变量
private: CFont m_Font;
然后,在对话框初始化中添加下列代码即可
BOOL CTransstaDlg::OnInitDialog() { //设置Static字体 m_Font.CreatePointFont(300, "Arial", NULL); m_static.SetFont(&m_Font,true); m_static.SetWindowText("100");
后面,还想把静态控件的背景设置成透明的,还没解决。。。
在论坛里解决了点击打开链接
要添加如下代码:
HBRUSH CTransstaDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if(nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255, 0, 0)); return (HBRUSH)GetStockObject(HOLLOW_BRUSH); } // TODO: Return a different brush if the default is not desired return hbr; }
msdn中OnCtlColor的解释:
The framework calls this member function when a child control is about to be drawn.
当一个子控件(比如这里的静态文本、按钮等)要绘制的时候,框架会调用这个函数,在这个函数中比如设置静态文本控件的颜色,背景,字体什么的。
OnCtlColor must return a handle to the brush that is to be used for painting the control background.
最后,最重要的是要返回一把刷子,让系统去刷控件的背景,像字的颜色似乎不用刷子什么的,但是背景需要返回一把刷子去刷,我一开始就没明白这个到底是怎么回事,所以觉得那个return返回似乎没有必要,以为,在这个函数里控件就已经绘制好了,其实,这个函数只是准备素材、设置格式,绘制是由系统来做的。所以,这个函数有点像回调函数。
还有,那个pDC--set的,这个函数里只是设置了参数,真正用这个pDC去绘制,还得等这个函数返回后有系统去绘制,所以,我当时想既然设置了参数就应该透明了啊,但是没有传回空的刷子(NULL_BRUSH),所以还是不行。不过,这里有个地方还是想不通,设置透明和传回空的刷子这两个条件必须要吗?这两者又是什么关系呢?还得再研究研究。。。
再说那个GetStockObject,这里,stock有库存的意思,就是系统本来就有的,由于要返回一把刷子,所以,或者自己定义一把刷子,或者直接返回系统自备的刷子,获取系统自备的东西(TheGetStockObjectfunction
retrieves a handle to one of the stock pens, brushes,fonts, or
palettes.)就用GetStockObject这个函数。
终于把这个理清楚了,没有系统学习过VC,只是大概知道那么回事,所以,会遇到许多问题,只能遇到问题,一点一点的学习了!~~~