第11章 GUI Page421~422 步骤六 支持文字
2023-12-23 18:28:16
运行效果:
关键代码:
新增头文件:
//item_text.hpp
#ifndef ITEM_TEXT_HPP_INCLUDED
#define ITEM_TEXT_HPP_INCLUDED
#include "item_i.hpp"
class TextItem : public IItem
{
public:
TextItem()
: _startPosition(0, 0), _endPosition(0, 0)
{
_text = wxT("hello d2schol");
}
void Draw(wxDC& dc) const;
void OnDrawStart(wxPoint const& point) override
{
_startPosition = point;
}
void OnDrawEnd(wxPoint const& point) override
{
_endPosition = point;
}
private:
wxPoint _startPosition, _endPosition;
wxString _text;
};
#endif // ITEM_TEXT_HPP_INCLUDED
新增源文件
//item_text.cpp
#include "item_text.hpp"
#include <cmath>
#include <wx/font.h>
void TextItem::Draw(wxDC& dc) const
{
if(_text.IsEmpty()) //空串,直接返回
{
return; //直接返回,动作干脆利落还可以防止后面发生除零错
}
int w = std::abs(_endPosition.x - _startPosition.x) / _text.Length();
int h = std::abs(_endPosition.y - _startPosition.y);
if(w == 0 || h == 0)
{
return;
}
wxFont old_font = dc.GetFont();
wxFont font(wxSize(w, h)
, wxFONTFAMILY_DEFAULT
, wxFONTSTYLE_NORMAL
, wxFONTWEIGHT_NORMAL);
int x = std::min(_startPosition.x, _endPosition.x);
int y = std::min(_startPosition.y, _endPosition.y);
dc.SetFont(font);
dc.DrawText(_text, x, y);
dc.SetFont(old_font);
}
新增加宏:
文章来源:https://blog.csdn.net/yanzhenxi/article/details/135167386
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!