win32开发(简单绘图)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


    在win32上面,所有的操作都是通过消息来完成的。正如前面一节说的那样,WM_CREATE、WM_PAINT、WM_SIZE、WM_DESTROY、WM_CHAR等消息都是我们在开发中经常要遇到的消息内容。这其中,以WM_PAINT和WM_SIZE处理得最为频繁。这是因为,每次app重新绘图的时候,os都要发送WM_PAINT消息给app。同理,每次窗口的长度发生改变的时候,os也会发送WM_SIZE消息给app。为了验证我们的想法,其实我们可以先定义一个全局变量g_text,比如像这样,

int g_text =0;

    接着,我们在每次WM_PAINT绘图的时候,看看g_text的数值是不是发生改变,

		case WM_PAINT:
			g_text += 1;
			TCHAR buffer[10];
			buffer[9] = '\0';
			_snprintf(buffer, 10, "%d\n", g_text);
			
			hdc = BeginPaint(hWnd, &ps);
			// TODO: Add any drawing code here...
			RECT rt;
			GetClientRect(hWnd, &rt);
			DrawText(hdc, buffer, strlen(buffer), &rt, DT_CENTER);
			EndPaint(hWnd, &ps);
			break;
    当然,这里我们需要一个buffer变量,它将g_text转变成字符串的形式,再用DrawText的方法显示出来。

    这里,由于使用了_snprintf这个函数,你可能需要添加头文件才能编译通过,比如像这样

#include <stdio.h>

    剩下来的事情就是编译这个项目,生成可执行文件、运行执行文件。这个时候,我们就会发现,不管是最小化应用、还是窗口被覆盖的时候,WM_PAINT都会被调用,因为g_text的数值是一直在增加的。相同的方法可以应用在其他消息当中,

    比如,如果是验证WM_CREATE被调用了多少次,那么可以这么写

case WM_CREATE:
    g_text += 1;
    break;
    再比如,如果是WM_MOUSEMOVE这种会一直发送的消息,我们想确认是不是真的一直在发送呢?它可以这么处理,

case WM_MOUSEMOVE:
    g_text += 1;
    InvalidateRect(hWnd, NULL, 0);
    break;

    编写命令行程序的时候,打印是一种很不错的方法。但是在win32上面,大家其实可以利用win32的消息机制,将要打印的信息投射在app上就可以了。这也是一种很重要的调试方法。这里InvalidateRect其实就是强力要求os重新绘制app的意思。


    另外,有一些朋友为了跨平台,喜欢用opengl来绘图。作为游戏开发者,用opengl来做2d的渲染,这无可厚非,coco2dx等很多平台也是这么做的。但是,我还是建议大家可以好好学一学win32的开发方法,这对提高大家的开发技能很有好处。还有一个库是duilib,也很不错。建议大家学习的时候多练习win32,使用的时候多用duilib。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SerialPlot接受3种不同类型的数据输入: *简单的二进制流,支持不同的数字格式(无符号/有符号 - 8/16/32位和浮点数) * CSV格式的ASCII数据 *用户定义的自定义帧格式(帧开始字节,帧大小,校验和等)。 您可以拍摄当前视图的快照并将其存储在CSV文件中。您也可以从CSV文件加载它们,方便查看。 用户也可以通过点击定义“命令”发送到串口设备。命令可以用HEX或ASCII格式定义。 SerialPlot v0.10.0发布 哈桑YavuzÖzderya • 09/03/ 2017在15:19 • 0评论 SerialPlot 0.10发布。此版本带来了一些性能改进,次要功能和错误修复。 现在,您可以设置2个选项,而不是“样本数”选项卡中的“样本数”选项。“缓冲区大小”和“绘图宽度”。“缓冲区大小”是保存在内存中的样本总数,“绘图宽度”是在X轴上一次绘制的最大样本数。要查看以前的样本,只需使用X轴滚动条。这个区别的主要原因是表现。以前,您无法将样本数量设置得太高,因为SerialPlot试图一次绘制所有数据。现在您可以将“缓冲区大小”设置为1.000.000,只要保持“绘图宽度”较小,很可能就可以了。另一个好处是,有时当你频繁地更改数据时,缩放出路并不意味着太多,您也可以在X轴上保持一定的缩放级别,以便能够看到任何细节。如果你喜欢旧的行为,你总是可以设置缓冲区大小选项相同的数量作为绘图宽度,它应该没事。请记住,虽然“绘图宽度”选项有一个较小的限制,然后“缓冲区大小”出于性能的原因。一张纸条; 性能改进没有完成。我仍在进行一些改进,以增加“缓冲区大小”限制。 现在您可以设置RS232控制信号(DTR,RTS),并从“端口”选项卡查看输入信号()状态。能够设置DTR信号是一个要求的功能,以便SerialPlot可以与Arduino Leanardo板一起使用。 我们现在也有一个更新检查器。您可以从“帮助”菜单启动它。除非您禁用了SerialPlot,否则每天会检查一次更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值