千家信息网

wxWidgets第十课 渲染字体

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,说明DrawText的缺点:字体的大小以及字体摆放位置需要手动计算,并且字体的宽和高实际上是不能随意的设置的,在可伸缩的情况下,效果差基于以上的缺点,引入DrawLabel函数应用void DrawL
千家信息网最后更新 2024年11月11日wxWidgets第十课 渲染字体

说明

DrawText的缺点:字体的大小以及字体摆放位置需要手动计算,并且字体的宽和高实际上是不能随意的设置的,在可伸缩的情况下,效果差基于以上的缺点,引入DrawLabel函数


应用

void DrawLabel(const wxString& text, const wxRect& rect,

int alignment = wxALIGN_LEFT | wxALIGN_TOP,

int indexAccel = -1)

第一个参数是标签的文本内容

第二个参数是标签所在的矩形区域

第三个参数是文本的对齐方式,其中包含居中对齐,左对齐等等,详细见

wxAlignment

wxALIGN_CENTER_HORIZONTAL = 0x0100,

wxALIGN_CENTRE_HORIZONTAL = wxALIGN_CENTER_HORIZONTAL,

wxALIGN_LEFT = wxALIGN_NOT,

wxALIGN_TOP = wxALIGN_NOT,

wxALIGN_RIGHT = 0x0200,

wxALIGN_BOTTOM = 0x0400,

wxALIGN_CENTER_VERTICAL = 0x0800,

wxALIGN_CENTRE_VERTICAL = wxALIGN_CENTER_VERTICAL,


该函数在自定义控件中,渲染控件的标题非常有用

例子:控件的标题占整个控件的百分之30的高度,居中对齐

wxBufferedPaintDC dc(this);

int titleHeight = m_size.GetHeight()*0.3;

wxRect rect(0, 0, m_size.GetWidth(), titleHeight);

dc.DrawLabel(m_szTitle, rect, wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP);

说明 0,0表示从控件的左上角开始,取控件的宽度为标签的矩形宽度,百分之三十的高位矩形的高度



采用DrawText的例子

wxFont titleFont(wxSize(0, titleHeight), wxFONTFAMILY_SCRIPT , wxNORMAL, wxFONTWEIGHT_LIGHT);

dc.SetFont(titleFont);

dc.DrawText(m_szTitle, 4, 0);

注意wxSize主要是用来设置字体的宽和高,实际上,可以只设置字体的高,来自动确认字体的宽,但是往往效果差,下面提供了一个设置字体大小的方法,同样的效果差

wxClientDC dc(this);

//定义一个wxFont类的对象font

//构造函数wxFont::wxFont(字体大小、字体类型(书法、艺术)、斜体、)

wxFont font(30,wxFONTFAMILY_ROMAN ,wxNORMAL,wxBOLD);

//利用DC类的成员函数SetFont设置字体

dc.SetFont(font);

//设置背景透或者不透

dc.SetBackgroundMode(wxSOLID);

//设置前景颜色

dc.SetTextForeground(wxColor(0, 255, 127));

//设置背景颜色

dc.SetTextBackground(wxColor(0, 36, 17));

//写字,文本wxString,位置wxPoint

dc.DrawText("9", 100, 100);


0