本人小白,刚开始学C++项目,老师让用API编一个简单的绘图程序,但是遇到了几个问题
我在WM_LBUTTONDOWN和WM_LBUTTONUP中用Getcursorpos()函数获取了两个点的坐标,然后想实现画直线的功能,但是每次画直线的时候,起点和终点都会有偏差,而且画出的直线就会被下一次的直线覆盖,这是一个问题
同样我想画点,在WM_LBUTTONUP时同样用那个函数获取了一个点的坐标,然后用SetPixelV()函数画点,出现我点的位置和点出现的位置不在一起,总是有偏差。
请教大神们帮帮小白吧,以前从没用过WINMAIN函数和proc函数编过程序,查了好久也不会怎么用,所以求教大神们。主要代码如下:
//鼠标落下
case WM_LBUTTONDOWN:
{
GetCursorPos(&p1);
break;
}
//鼠标抬起
case WM_LBUTTONUP:
{
GetCursorPos(&p2);
break;
}
//画点
void Draw_Some_Point(HWND hwnd,HDC hdc,POINT p)
{
// 获得客户区域
RECT r;
GetClientRect(hwnd, &r);
// 设置映像模式
SetMapMode (hdc, MM_ISOTROPIC);
// 设置窗口坐标范围
SetWindowExtEx(hdc, 1000, 1000, NULL);
// 设置视口坐标范围
SetViewportExtEx(hdc, r.right, r.bottom, NULL);
FillRect(hdc, &r, (HBRUSH)GetStockObject(BLACK_BRUSH));
SetPixelV( hdc,p.x,p.y, RGB(255,255,255));
}
//画直线
void Draw_A_Line(HWND hwnd,HDC hdc,POINT p1,POINT p2)
{
// 获得客户区域
RECT r;
GetClientRect(hwnd, &r);
// 设置映像模式
SetMapMode(hdc, MM_ISOTROPIC);
// 设置窗口坐标范围
SetWindowExtEx(hdc, 1000, 1000, NULL);
// 设置视口坐标范围
SetViewportExtEx(hdc, r.right, r.bottom, NULL);
// 绘制直线
Point p[5000]={};
for(int j=0; j<5000; j+=2)
{
int k = j+1;
p[j]=Point(p1.x,p1.y);
p[k]=Point(p2.x,p2.y);
MoveToEx( hdc, p[j].get_x(), p[j].get_y(), NULL);
for(int i=0; i<2; i++)
{
if(i==1)
{
LineTo( hdc, p[j].get_x(), p[j].get_y() );
continue;
}
LineTo( hdc, p[i+1].get_x(), p[i+1].get_y());
}
}
}
说明一下,Point是我自己定义的一个点类,有横纵坐标