要先画一条线,应分为其起点和终点,以及在画线的时候应注意画线的步骤:首先按下左键、其次鼠标移动、最后松开左键,因此我们可以根据实际创建头文件
首先创建point.h文件
#pragma once
class Point {
public:
Point(int x = 0, int y = 0);
int& getX();
int& getY();
private:
int x;
int y;
};
其次我们创建drawline.h头文件(数据中包含了画线开始点的数据,线的粗细数据,颜色和是否按下左键)
#pragma once
#include<graphics.h>
#include"point.h"
class Drawline {
public:
Drawline(int size, COLORREF color);
void drawline(ExMessage m);
private:
Point begpot;
int size;//线的粗细
COLORREF color;
bool isDown;
};
再根据头文件创建point.cpp文件和drawline.cpp文件
#include"point.h"
Point::Point(int x, int y) {
this->x = x;
this->y = y;
}
int& Point::getX() {
return x;
}
int& Point::getY() {
return y;
}
#include "drawline.h"
Drawline::Drawline(int size, COLORREF color)
{
this->size = size;
this->color = color;
isDown = false;
}
void Drawline::drawline(ExMessage m)
{
//1、按下左键
if (m.message == WM_LBUTTONDOWN) {
isDown = true;
begpot = Point(m.x, m.y);//匿名对象
}
//2、移动
if (m.message == WM_MOUSEMOVE && isDown) {
setlinestyle(BS_SOLID, size);
setlinecolor(color);
line(begpot.getX(), begpot.getY(), m.x, m.y);
}
begpot = Point(m.x, m.y);
//3、松开左键
if (m.message == WM_LBUTTONUP) {
isDown = false;
}
}
最后创建主文件调用即可
#include"drawline.h"
int main() {
initgraph(800, 600);
Drawline* myline = new Drawline(5,BLACK);
setbkcolor(WHITE);
cleardevice();
ExMessage m;
while (1) {
while (peekmessage (&m)) {
myline->drawline(m);
}
}
return 0;
}
总结
画线封装运用了C++类的知识以及类中构造函数的用法,最主要的思路是想好画线的每一步操作再逐一解决画线的部分操作即可,最后的结果如下图所示
![](https://img-blog.csdnimg.cn/img_convert/c128021c858de5be4f0384beaee10efc.png)