现在的位置: 首页 > 综合 > 正文

VC设置静态文本控件的显示字体和显示内容

2013年09月30日 ⁄ 综合 ⁄ 共 1473字 ⁄ 字号 评论关闭

首先,在对话框上添加一个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,只是大概知道那么回事,所以,会遇到许多问题,只能遇到问题,一点一点的学习了!~~~

抱歉!评论已关闭.