MFC怎么绘制一个圆角矩形

MFC怎么绘制一个圆角矩形,第1张

参考代码如下:
#define OFFSET_X 5
#define OFFSET_Y 5
void DrawRoundRectange(Graphics &g,Color pens,int x,int y,int width,int height)
{
//设置画图时的滤波模式为消除锯齿现象
gSetSmoothingMode(SmoothingModeAntiAlias);
//创建一个红色的画笔
Pen pen = new Pen(pens,1);
//画矩形上面的边
gDrawLine(pen,x+OFFSET_X,y,width-OFFSET_X,y);
//画矩形下面的边
gDrawLine(pen,x+OFFSET_X,y+height,width-OFFSET_X,y+height);
//画矩形左面的边
gDrawLine(pen,x,y+OFFSET_Y,x,y+height-OFFSET_Y);
//画矩形右面的边
gDrawLine(pen,x+width,y+OFFSET_Y,x+width,y+height-OFFSET_Y);
//画矩形左上角的圆角
gDrawArc(pen,x,y,OFFSET_X2,OFFSET_Y2,180,90);
//画矩形右下角的圆角
gDrawArc(pen,x+width-OFFSET_X2,y+height-OFFSET_Y2,OFFSET_X2,OFFSET_Y2,360,90);
//画矩形右上角的圆角
gDrawArc(pen,x+width-OFFSET_X2,y,OFFSET_X2,OFFSET_Y2,270,90);
//画矩形左下角的圆角
gDrawArc(pen,x,y+height-OFFSET_Y2,OFFSET_X2,OFFSET_Y2,90,90);
delete pen;
}
/ 填充颜色 /
void FillRoundRectangle(Graphics &g,Color color,int x,int y,int width,int height)
{
//矩形填充的步骤:
//1、把圆角矩形画分为四个圆角上分成四个同等的扇形外加三个直角矩形
//2、先填充三个直角矩形
//3、然后填充四个角上的扇形
//创建画刷
Brush brush = new SolidBrush(color);
//填充三个直角矩形

gFillRectangle(brush,x,y+OFFSET_Y,width,height-OFFSET_Y2);
gFillRectangle(brush,x+OFFSET_X,y,width-OFFSET_X2,height);

//填充四个角上的扇形区
//填充左上角扇形
#define PIE_OFFSET 2
gFillPie(brush,x,y,OFFSET_X2+PIE_OFFSET,OFFSET_Y2+PIE_OFFSET,180,90);
//填充右下角的扇形
gFillPie(brush,x+width-(OFFSET_X2+PIE_OFFSET),y+height-(OFFSET_Y2+PIE_OFFSET),OFFSET_X2+PIE_OFFSET,OFFSET_Y2+PIE_OFFSET,360,90);
//填充右上角的扇形
gFillPie(brush,x+width-(OFFSET_X2+PIE_OFFSET),y,(OFFSET_X2+PIE_OFFSET),(OFFSET_Y2+PIE_OFFSET),270,90);
//填充左下角的扇形
gFillPie(brush,x,y+height-(OFFSET_X2+PIE_OFFSET),(OFFSET_X2+PIE_OFFSET),(OFFSET_Y2+PIE_OFFSET),90,90);
delete brush;
}

ps矩形怎么变圆角如下:

进入PS工作界面,这里用两种不同的方法将矩形变成圆角,先将上万的图层P愿瓶,3K口远择工具栏中的矩形选框工具,在要修改的矩形上,框选一个比足形相小HP,也再一方菜单栏中的选择,找到下方的修改,选择平滑,就进入到了平滑选区H充面。

因为矩形较大,所以将取样半径设置的大一些,这里设置为100,然后确定,按键盘上的Ctrl、Shift和l进行反选,然后按键盘上的Delete删除不要部分即可。

接下来,我们只显示上方的矩形,然后选择工具栏中的圆角矩形工具,在上方属性栏中,设置选择工具模式为路径,半径值同样设置为100,在要修改的矩形上,画一个比矩形稍小的路径,Ctrl+回车键将路径转换为选区,使用Ctrl、Shift和I进行反选。

按[Delete删除,仔细对比一下两种方法修改出来的圆角,使用圆角矩形工具制作的圆角更圆滑一些。

QT中QPainter的使用及矩形、圆形等常见图形的画法

#include<QApplication>
#include <QWidget> 
#include <QPainter> 
class MyMainWindow:public QWidget

public:
MyMainWindow(QWidget parent = 0);
private:
void paintEvent(QPaintEvent);
QPainter paint;
};


void MyMainWindow::paintEvent(QPaintEvent)

//paintEvent函数由系统自动调用,用不着我们人为的去调用。
{
paint=new QPainter;
paint->begin(this);
paint->setPen(QPen(Qt::blue,4,Qt::DashLine));//设置画笔形式
paint->setBrush(QBrush(Qt::red,Qt::SolidPattern));//设置画刷形式
paint->drawRect(20,20,160,160);
paint->end();
}


MyMainWindow::MyMainWindow(QWidgetparent):QWidget(parent)
{
setGeometry(100,100,200,200);
}


int main(int argc,charargv)
{
QApplication a(argc,argv);
MyMainWindow w;
wshow();
return aexec();
}


输出结果:

绘制圆和椭圆

核心代码:

paint->setPen(QPen(Qt::blue,4,Qt::SolidLine));

paint->drawEllipse(20,20,210,160);

第1,2个参数分别表示圆/椭圆距左上角的像素数。第3,4个参数表示圆/椭圆的宽度和高度。更加确切地表述,这个圆或椭圆是在矩形中,这个矩形的左上角的顶点在坐标轴中的位置为(20,20),这个圆或椭圆的中心为这个矩形的中心,以下的都相似!!!


绘制圆角矩形

核心代码:

paint->setPen(QPen(Qt::blue,4,Qt::SolidLine));

paint->drawRoundRect(20,20,210,160,50,50);

最后两个参数决定角的圆度。它可以为0到99之间的任意值(99代表最圆)。


绘制扇形图

核心代码:

paint->setPen(QPen(Qt::green,4,Qt::SolidLine));

paint->drawPie(20,20,210,160,0,500);

前四个参数定义圆(与drawEllipse()函数相同)。后两个参数定义圆的样式。0为起始角度(实际单位为1/16度),500为扇形所展开的角度(单位也为1/16度)。


绘制弦

核心代码:

paint->setPen(QPen(Qt::green,4,Qt::SolidLine));

paint->drawChord(20,20,210,160,500,1000);

drawChord()函数与drawPie()函数的参数完全相同。


绘制圆弧

核心代码:

paint->setPen(QPen(Qt::green,4,Qt::SolidLine));

paint->drawArc(20,20,210,160,500,1000);

drawArc()函数与drawPie()函数的参数完全相同。


绘制贝塞尔曲线

核心代码:

paint->setPen(QPen(Qt::green,4,Qt::SolidLine));

paint->drawQuadBezier(QPointArray(QRect(20,20,210,160)));

传递给该函数的唯一一个参数表示一个矩形,在其中创建贝塞尔曲线(其他参数为缺省参数,可以省略)。

按f6键,然后按住鼠标左键不放拖曳画出矩形。画好后输入数值(1的位置),回车。见图
按f6键,然后按键盘的shift键+ctrl键,画出正方形。
在属性栏输入数值(2的位置),可变成圆角矩形。如图
如果想变成圆角,也可以使用形状工具,推拉正方形顶点也可以。

使用 Qt::WindowFlags 可以实现一些不同类型的窗口,如:用 Qt::FramelessWindowHint 来实现无边框窗口,用 Qt::Popup 来实现d出式的窗口,用 Qt::Tool 来实现工具窗口,用Qt::CustomizeWindowHint 来关闭窗口标题栏以及与 Qt::WindowCloseButton(添加关闭按钮),Qt::WindowMaximumButtonSize(添加最大化按钮)联用来建立只有关闭按钮和最大化按钮的窗口,用 Qt::WindowStaysOnTopHint 使窗口永远在最前端等。 Qt::WidgetAttribute 使窗口支持透明背景以及在关闭后主动销毁。其它一些常用的 Attribute 有:Qt::WA_AcceptDrops 使 widget 支持拖拽 *** 作,Qt::WA_MouseTracking 使 widget 及时响应鼠标移动事件(MouseMoveEvent)。 Qt::setMask() 函数对窗口进行部分区域遮掩来实现各种形状的窗口。部分代码解释:头文件: 1:#ifndef SHAPEDWIDGET_H 2:#define SHAPEDWIDGET_H 3: 4:#include <QWidget> 5:class QPoint; 6:class QPixmap; 7:class ShapedWidget : public QWidget 8: { 9: Q_OBJECT 10:public: 11:explicit ShapedWidget(QWidget parent = 0); 12: ~ShapedWidget(); 13: 14:private slots: 15:void changeSkin(); 16: 17:protected: 18:void mousePressEvent(QMouseEvent ); 19:void mouseMoveEvent(QMouseEvent ); 20:void paintEvent(QPaintEvent ); 21: 22:private: 23:void initData(); 24:void initVisualComponents(); 25:void setupContextMenu(); 26: 27: QPoint dragPos_; 28: QPixmap backgroundPixmap_; 29: }; 30: 31:#endif // SHAPEDWIDGET_H构造: 1: ShapedWidget::ShapedWidget(QWidget parent) : 2: QWidget(parent, Qt::FramelessWindowHint) //无边框窗体 3: { 4: initData(); //初始化数据,这个demo里面就两个,具体下面有解释 5: initVisualComponents(); //初始化私有可视部件,这个demo里面没有私有的其它部件,所以只做了窗口的一些属性设置 6: setupContextMenu(); //设置右键菜单,分配各种QAction内存空间以及连接SIGNALS和SLOTS 7: setAttribute(Qt::WA_DeleteOnClose); //关闭事件发生后就主动从内存中销毁窗口 8: setAttribute(Qt::WA_TranslucentBackground); //透明背景支持 9: } 拖拽移动窗体(下面有图示): 1:void ShapedWidget::mousePressEvent(QMouseEvent event) 2: { 3:if(event->button() == Qt::LeftButton) 4: { 5: dragPos_ = event->globalPos() - frameGeometry()topLeft(); 6: event->accept(); 7: } 8: } 9: 10:void ShapedWidget::mouseMoveEvent(QMouseEvent event) 11: { 12:if(event->buttons() & Qt::LeftButton) 13: { 14: move(event->globalPos() - dragPos_); 15: event->accept(); 16: } 17: } 窗口绘制: 1:void ShapedWidget::paintEvent(QPaintEvent ) 2: { 3: QPainter painter(this); 4: painterfillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), backgroundPixmap_); 5: } 更换皮肤: 1:void ShapedWidget::changeSkin() 2: { 3: QAction source = qobject_cast<QAction>(sender()); //获取发送该信号的信号源,并转换对象 4: backgroundPixmap_->load(source->data()toString()); //因为给每个 QAction 赋了的地址的字符串 5://所以可以通过 data() 来获取该值,并更新背景的内容 6: resize(backgroundPixmap_->width(), backgroundPixmap_->height()); //窗口大小尽可能小

ppt中画出圆角矩形及弧线的步骤如下(2003版本的PPT做示例):

1、选定添加位置,在顶部工具栏里面依次选择命令:插入--自选图形

2、在自选图形里面,点击第三个按钮(基本形状),在里面就有“圆角矩形”,点击一下。

3、在空白处拖拽出圆角矩形,然后选中圆角矩形,更改填充颜色等属性。

4、弧形的命令也在第三个按钮那里面,可以轻松找到“弧形”。

5、然后鼠标拖拽出弧形。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13383403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存