助力软件开发企业降本增效 PHP / java源码系统,只需一次付费,代码终身使用! 广告
在windows10 winform(win32windowsApi上)绘制图形其实是比较简单的。要想进行图形绘制,关键是找到设备上下文。就我目前所知道的,获得设备上下文主要有这么几种方式: 一、根据BeginPaint获得设备上下文,这主要在WM_PAINT使用; 二、根据GetDC获得设备上下文,这主要用在非WM_PAINT消息中; 三、CreateDC获得设备上下文,这个主要用在屏幕的截取; 四、根据CreateCompatibleDC获得设备上下文,然后通过BitBlt进行绘制,这个一般用在图形界面较多的绘制场景。今天,我们就讨论前面两种,后面两种等遇到了再说。 WM_PAINT下用BeginPaint获得设备上下文是比较常用的方式,比如下面一段代码, case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... MoveToEx(hdc, 100,100,NULL); LineTo(hdc, 150,230); Rectangle(hdc, 200, 200, 300, 300); Ellipse(hdc, 15,15, 130, 130); EndPaint(hdc, &ps); break; 同样一段代码,如果是在鼠标响应的时候调用,应该怎么修改呢? case WM_RBUTTONUP: hdc = GetDC(hWnd); // TODO: Add any drawing code here... MoveToEx(hdc, 100,100,NULL); LineTo(hdc, 150,230); Rectangle(hdc, 200, 200, 300, 300); Ellipse(hdc, 15,15, 130, 130); ReleaseDC(hWnd, hdc); break; 大家发现没有,其实绘制的内容都是一样,只是hdc获取的方式发生了改变而已。 其次,这里主要使用了这几个函数, MoveToEx(hdc, 100,100,NULL); LineTo(hdc, 150,230); Rectangle(hdc, 200, 200, 300, 300); Ellipse(hdc, 15,15, 130, 130); 这其中MoveToEx和LineTo搭档画直线,Rectangle画矩形,Ellipse画椭圆形。 --------------------- 尝试过的其它可选的方式: MFC性能不错,但太陈旧! CLI( .net的winform)太新,据说坑特别多! QT?太华丽? OpenCV值得尝试…… 简单质朴为王…… 尤其是倾向计算的项目……