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。
win32开发(简单绘图)相关推荐
- C#开发简单绘图工具
1:先用VS制作出界面 参数区用的控件:GropBox,label,TextBox 形状区:GropBox,Button 2:然后开始写代码; 2.1按钮绘图首先要设置参数区的参数: 空心矩形按钮1; ...
- 跟我一起玩Win32开发
跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...
- GCC for Win32开发环境介绍
GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...
- win32开发(对话框启动)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...
- win32开发(画笔、刷子、字体)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...
- 跟我一起玩Win32开发(4):创建菜单
跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...
- chinese_province_city_area_mapper----一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块
原文见Github: https://github.com/DQinYuan/chinese_province_city_area_mapper 简介 一个用于提取简体中文字符串中省,市和区并能够进行 ...
- html5移动web开发简答题,HTML5移动Web开发简单知识点介绍
原标题:HTML5移动Web开发简单知识点介绍 1 :基于HTML5的移动Web应用 Canvas绘图:通过获取HTML中的Dom元素Canvas,调用其渲染上下文的Context对象,使用Js进行图 ...
- 【opencv 官方教程】翻译2 核心功能 中 图像操作 线性变换 亮度调整 简单绘图
核心功能 The Core Functionality (core module) Here you will learn the about the basic building blocks of ...
- 跟我一起玩Win32开发(25):监视剪贴板
跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...
最新文章
- python第三方库之学习flask-restful
- iOS的一些常用性能优化,和内存优化的方法
- 《漫画算法2》源码整理-7 第K大的数字
- java 命名内部类_如何把java SWT程序中的匿名内部类改写成命名内部类?
- python 统计单词个数---从文件读取版本---不去重
- CVPR2020 | PV-RCNN: 3D目标检测Waymo挑战赛+KITTI榜单模态第一算法
- 设计原则之单一职责原则
- python飞机大战创建多个敌机_Python 项目飞机大战- 03 游戏背景和敌机出场
- wordpress移除/移动/编辑/定制/独显管理员工具AdminBar
- jsf教程_JSF教程
- 深入理解Nginx:模块开发与架构解析
- 父亲儿子计算机语言,c语言之父_C语言编程,父亲30岁。儿子6岁,问多少年后父亲的岁数是儿子的2倍...
- IPO屡战屡败 而立之年WPS 能否闯关成功?
- 如何解决 Win10 卡顿的问题
- 为什么要分析网络流量?
- 如何截取其他人的pdf文件中的图片(矢量图)
- allgro显示网络名称_ALLEGRO如何显示网络标号?
- windows无法自动修复此计算机 鼠标,win10出现你的账户已被停用。开机按F8进不去。自动修复鼠标和键盘都用...
- 不同收入水平职工家庭 申请公积金贷款情况
- 企业证书打包ipa文件(图文详解)