- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
绘制直线
方法一:缺点是集中在一处画线,中间会变白。
十、绘制直线 返回
学会了画点,下一步就该是画线了,线是由点组成的,每个点的位置用两个数来表示(x,y),即平面直角坐标系,
一条直线有两个点,或者说两点确定一条直线,一个是起点,一个是终点,如果连续画线,上一次的终点就是下一次的起点,弄明白了这两个点,我们就来来学习一下,怎样在自己的窗口中画出漂亮的线条来;
画线也用到设备,画线的函数是LineTo(hdc,(x,y));其中的(x,y)是终点,起点用上次的终点,第一次起点是(0,0),屏幕的左上角,
另一个是移动函数MoveToEx(hdc,(x,y),NULL);把起点设为上一次的终点,下面我们来编制程序:
1、启动VC,新建一个名为Line的Win32 Application工程,再新建一个相同名称的头文件和源程序文件,在头文件中输入函数的申明,在源程序中输入窗口框架代码;
2、画线的鼠标指针是十字形的,把第3课中的指针文件curMouse拷贝到Line文件夹中,
在头文件中加入一句标识符申明#define IDC_MYCUR 201
再用记事本新建一个相同文件名的资源文件Line.rc输入鼠标指针的定义:IDC_MYCUR CURSOR DISCARDABLE curMouse.cur 保存并关闭文件;
3、使用工程菜单中的“添加工程”命令将资源文件Line.rc加入到工程中,
再在InitApplication函数中修改加载鼠标指针一句为wcexLine.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(201));
其中wcexLine是窗口类名,根据自己的代码修改一致,注意标识符前后一致;
4、加入消息处理函数过程,画线是用鼠标,因此需要处理鼠标按键消息WM_LBUTTONDOWN以及鼠标拖动的消息WM_MOUSEMOVE,还有鼠标抬起WM_LBUTTONUP消息;
消息处理过程MainWndProc(绿色双斜杠部分是注释),有的一行太长会自动折到下一行,代码如下,细细品味每一行的作用是铺垫呢,还是操作;是给谁铺垫,操作结果又是什么呢?
LRESULT APIENTRY MainWndProc(??? HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){??? HDC hdc;
??? static HPEN hpenBlue;//申明一支彩色笔;??? static POINT pointBegin,pointEnd,point;//保存起点和终点,当前点;??? static int x1,y1;//单击鼠标画线的终点位置??? switch (message)??? {????? case WM_CREATE: // 创建一支彩色笔???????? hpenBlue = CreatePen(PS_SOLID, 1, RGB(0,0,255));??????? break;????? case WM_LBUTTONDOWN://左键按下??????? pointBegin.x =LOWORD(lParam);//初始化起点x??????? pointBegin.y=HIWORD(lParam);//初始化起点y??????? pointEnd.x=LOWORD(lParam);//初始化终点x??????? pointEnd.y=HIWORD(lParam);//初始化终点y??????? //当前点的位置用默认为屏幕左上角(0,0)
??????? SetCapture(hWnd);//一直跟着鼠标???????? break;????? case WM_MOUSEMOVE://进入鼠标移动消息;??????? if(wParam MK_LBUTTON)//检测左键是否按下;??????? {//进入鼠标拖动;????????? point.x =LOWORD(lParam);//当前鼠标的位置x;????????? point.y=HIWORD(lParam);//当前鼠标的位置y;????????? hdc=GetDC(hWnd);?????????? SetROP2(hdc,R2_NOT);//使用与背景色相反的颜色;????????? //第二次用与背景色相反的颜色绘制,可以擦去原来的线条(双重否定);????????? MoveToEx(hdc,pointBegin.x,pointBegin.y,NULL);????????? //画线起点是单击左键时的鼠标的位
文档评论(0)