【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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。

win32开发(简单绘图)相关推荐

  1. C#开发简单绘图工具

    1:先用VS制作出界面 参数区用的控件:GropBox,label,TextBox 形状区:GropBox,Button 2:然后开始写代码; 2.1按钮绘图首先要设置参数区的参数: 空心矩形按钮1; ...

  2. 跟我一起玩Win32开发

    跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...

  3. GCC for Win32开发环境介绍

    GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...

  4. win32开发(对话框启动)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...

  5. win32开发(画笔、刷子、字体)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...

  6. 跟我一起玩Win32开发(4):创建菜单

    跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...

  7. chinese_province_city_area_mapper----一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块

    原文见Github: https://github.com/DQinYuan/chinese_province_city_area_mapper 简介 一个用于提取简体中文字符串中省,市和区并能够进行 ...

  8. html5移动web开发简答题,HTML5移动Web开发简单知识点介绍

    原标题:HTML5移动Web开发简单知识点介绍 1 :基于HTML5的移动Web应用 Canvas绘图:通过获取HTML中的Dom元素Canvas,调用其渲染上下文的Context对象,使用Js进行图 ...

  9. 【opencv 官方教程】翻译2 核心功能 中 图像操作 线性变换 亮度调整 简单绘图

    核心功能 The Core Functionality (core module) Here you will learn the about the basic building blocks of ...

  10. 跟我一起玩Win32开发(25):监视剪贴板

    跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...

最新文章

  1. python第三方库之学习flask-restful
  2. iOS的一些常用性能优化,和内存优化的方法
  3. 《漫画算法2》源码整理-7 第K大的数字
  4. java 命名内部类_如何把java SWT程序中的匿名内部类改写成命名内部类?
  5. python 统计单词个数---从文件读取版本---不去重
  6. CVPR2020 | PV-RCNN: 3D目标检测Waymo挑战赛+KITTI榜单模态第一算法
  7. 设计原则之单一职责原则
  8. python飞机大战创建多个敌机_Python 项目飞机大战- 03 游戏背景和敌机出场
  9. wordpress移除/移动/编辑/定制/独显管理员工具AdminBar
  10. jsf教程_JSF教程
  11. 深入理解Nginx:模块开发与架构解析
  12. 父亲儿子计算机语言,c语言之父_C语言编程,父亲30岁。儿子6岁,问多少年后父亲的岁数是儿子的2倍...
  13. IPO屡战屡败 而立之年WPS 能否闯关成功?
  14. 如何解决 Win10 卡顿的问题
  15. 为什么要分析网络流量?
  16. 如何截取其他人的pdf文件中的图片(矢量图)
  17. allgro显示网络名称_ALLEGRO如何显示网络标号?
  18. windows无法自动修复此计算机 鼠标,win10出现你的账户已被停用。开机按F8进不去。自动修复鼠标和键盘都用...
  19. 不同收入水平职工家庭 申请公积金贷款情况
  20. 企业证书打包ipa文件(图文详解)

热门文章

  1. 翻译qmake文档(二) Getting Started
  2. 法国电信:5G加速数字化落地 物联网是首座金矿
  3. zoj 3211 - Dream City
  4. 天律的云端大数据分析挖掘之旅
  5. docker mysql 主从配置
  6. 鸭子类型duck typing(动态)
  7. 在ecshop商品详情页显示供货商
  8. Sql Server 列转行 Pivot使用
  9. python-opencv实现简单的车牌定位
  10. Spring事物管理(二)