第11章 GUI Page429~430 步骤八 支持“十字”形
2023-12-24 15:29:38
运行效果:
关键代码:
新增头文件:
//item_cruciform.hpp
#ifndef ITEM_CRUCIFORM_HPP_INCLUDED
#define ITEM_CRUCIFORM_HPP_INCLUDED
#include <cmath>
#include "item_line.hpp"
class CruciformItem : public IItem
{
public:
CruciformItem()
: _startPosition(0, 0), _endPosition(0, 0)
{
}
virtual void SetForegroundColor(wxColor const& color)
{
_hor_line.SetForegroundColor(color);
_ver_line.SetForegroundColor(color);
}
virtual wxColor const& GetForegroundColor() const
{
return _hor_line.GetForegroundColor();
}
void Draw(wxDC& dc) const;
//在鼠标按下函数中调用,所以鼠标按下的点即为_startPosition
virtual void OnDrawStart(wxPoint const& point)
{
_startPosition = point;
}
virtual void OnDrawEnd(wxPoint const& point);
private:
LineItem _hor_line, _ver_line;
wxPoint _startPosition, _endPosition;
};
#endif // ITEM_CRUCIFORM_HPP_INCLUDED
新增源文件:
//item_cruciform.cpp
#include "item_cruciform.hpp"
void CruciformItem::OnDrawEnd(wxPoint const& point)
{//在鼠标移动和抬起时调用,所以鼠标抬起时的点即为_endPosition
_endPosition = point;
//重新调整水平线和垂直线的起点和终点
int dx = std::abs(_endPosition.x - _startPosition.x);//两点水平距离
_hor_line.OnDrawStart(wxPoint(_startPosition.x - dx, _startPosition.y));
_hor_line.OnDrawEnd(wxPoint(_startPosition.x + dx, _startPosition.y));
int dy = std::abs(_endPosition.y - _startPosition.y);
_ver_line.OnDrawStart(wxPoint(_startPosition.x, _startPosition.y - dy));
_ver_line.OnDrawEnd(wxPoint(_startPosition.x, _startPosition.y + dy));
}
void CruciformItem::Draw(wxDC& dc) const
{
_hor_line.Draw(dc);
_ver_line.Draw(dc);
}
新增“十字形”菜单项
注意:菜单项类型是Radio,否则不能被选中
新增创建十字形的代码:
文章来源:https://blog.csdn.net/yanzhenxi/article/details/135181626
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!