永发信息网

CreatePen 得到的画笔若宽度大于1 绘图就很慢么?

答案:2  悬赏:20  手机版
解决时间 2021-04-22 16:04

CreatePen的宽度设置为1的时候绘图速度还是可以吧,但设置大于1的时候就感觉很慢.是不是我代码有问题.还是要用其它方法解决?

LRESULT CALLBACK WndPaintProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static POINT LastPoint;
static POINT StartPoint;
static BOOL bDrawing = FALSE;

switch(message)
{
case WM_CREATE:
return 0;

case WM_PAINT:
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;

case WM_LBUTTONDOWN:
bDrawing = true; //描画状态开始
StartPoint.x = LOWORd(lParam);//MAKEPOINT(lParam); //当前点保存于NowPoint中
StartPoint.y = HIWORd(lParam);
return 0;

case WM_MOUSEMOVE:
if(wParam & MK_LBUTTON)
{
if (bDrawing == false)//如果是描画状态
{
StartPoint.x = LOWORd(lParam);
StartPoint.y = HIWORd(lParam);
bDrawing = true;
}

HDC hdc;
hdc = GetDC(hwnd);

LastPoint.x = LOWORd(lParam);//MAKEPOINT(lParam); //当前点保存于LastPoint中
LastPoint.y = HIWORd(lParam);

Draw(hdc, StartPoint, LastPoint); //画开始点到当前点
StartPoint = LastPoint; //当前点设置为旧的点

ReleaseDC(hwnd, hdc);

TRACKMOUSEEVENT MouseEvent;//注册鼠标事件,检查是否离开了绘图区
MouseEvent.cbSize = sizeof(MouseEvent);
MouseEvent.dwFlags = TME_LEAVE;
MouseEvent.dwHoverTime = 10;
MouseEvent.hwndTrack = g_hwndPaint;
TrackMouseEvent(&MouseEvent);

//InvalidateRect(hwnd,NULL,FALSE);
}
return 0;

case WM_LBUTTONUP:
bDrawing = false; //描画状态结束
return 0;

case WM_MOUSELEAVE:
//SendMessage(hwnd, WM_LBUTTONUP, NULL, NULL);
bDrawing = false; //描画状态结束
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

void Draw(HDC hdc, POINT beg, POINT end)
{
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0) ); //实线画笔
HPEN hOldPen;
//LOGBRUSH lb;
//LOGPEN logpen = {PS_SOLID, Width, RGB(0, 0, 0) };
//HPEN hPen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_FLAT,16, &lb, 0, NULL);

//POINT Width = {1, 1 };
//hPen = CreatePenIndirect(&logpen);

//SetROP2(hdc, R2_COPYPEN); //设置前景配色方式为画笔颜色

hOldPen = (HPEN)SelectObject(hdc, hPen);//保存旧画笔

MoveToEx(hdc, beg.x, beg.y, NULL); //移动描画点到按下鼠标键的地方
LineTo(hdc, end.x, end.y); //从描画点到(end.x, end.y)点

SelectObject(hdc, hOldPen);
DeleteObject(hPen);
}

最佳答案
你把CreatePen和SelectObject,DeleteObject这些工作分别安排到WM_CREATE和WM_DESTROY,应该就要快很多了,否则你鼠标每移动一个坐标,就要create,select然后delete,这个过程是很费时间的。
全部回答
一点也不慢啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京有直达河北胜芳镇的客车么
伊美莲家纺在什么地方啊,我要过去处理事情
一米四七结婚可以穿婚姻吗
男人的根吃什么食物能更应
我想问长春到厦门的火车卧铺
安踏公司的有来
安慰人心情不好古诗词,安慰朋友心情不好时的
双色球2009140期中奖号码是多少?
联华仓华店我想知道这个在什么地方
手机看电子书的网址哪里有
犬夜叉经典语录日语版,犬夜叉经典台词日语翻
给我找几个像这样的图片
怎么下载会计初级职称报名表
城步天翼手机卖场怎么去啊,有知道地址的么
魔兽世界现在还需要买点卡吗?
推荐资讯
QB能给好友吗?
如果两个人的家有一定的距离,那他们谈恋爱会
刺猬最想要的是什么啊
每次来月经很少有什么办法嘛
谁有;我敢去爱;这歌url
刷深渊刷第一还是第二好?
日本靠左还是靠右,日本是靠左行驶的吗
如何坚持做自己,如何管住自己,按自己的计划
誰能告訴我,心碎了該如何弥补?
金鹏E6189手机上端的圆插口是干什么用的?
现在征途挂机如何自动拾取.
和天秤座最配的星座
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?