windows编程入门最重要的
要入门 Windows 编程,最重要的不是阅读什么教材,使用什么工具,而是先必须把以下几个对于初学者来说非常容易困惑的重要概念搞清楚:
1. 文字的编码和字符集。这部分需要掌握 ANSI 模式和 Unicode 模式的区别(并且明白这里 ANSI 和 Unicode 事实上都属于术语的误用);明白这两种模式其实是通过宏实现的一个 dirty-hack(有相当数量的人在实际工作中因为这个宏的原因被咬过);知道如何通过 TCHAR、_T()、条件编译等方式写出 Unicode 兼容的代码(即使你将来写的所有 Windows 程序的源码都将是 pure Unicode 的,不再会支持 ANSI 模式编译)。
2. 熟悉常见 Win32 类型名称(譬如 LRESULT、WPARAM、UINT、LPCTSTR 等都是什么意思),知道什么是函数调用规范(譬如 __stdcall、__cdecl 等,以及常见别名譬如 WINAPI、PASCAL 等。不要求记住这些调用规范在汇编层面都是怎么实现的,只需要知道它们是不同的,大概了解为什么不同,为什么不能混用)。
3. 了解句柄的大概原理和资源管理。这部分要求比较简单,一个 C 语言真正入门的学生,在之前的学习里应该早就已经涉及过动态内存分配和管理了,也在一些练习里自己实现过类似句柄的面向对象封装方式了,因此学到这里的时候只要把句柄和他之前学过的内容联系起来,这部分并不难学。但如果你遇到动态内存分配的时候还是搞得一塌糊涂,对于对象所有权转移、生命周期管理等还一头雾水,我个人建议你先回到「黑框框」把 C 语言入门了再来学 Windows 编程。
4. 理解消息模型。当一个程序调用 GetMessage 之后,在收到消息之前你的程序是不在运行的,相当于是死在那儿的,这对于之前从来没有接触过 Win32 GUI 编程的人来说这个概念相当反直觉,需要举足够的例子来帮助他理解为什么一个「收不到消息就死在那里完全不运行」的记事本能做到用鼠标一点菜单就能弹出来,没人动它的时候它的光标仍然随时都在一闪一闪等等。思维转过弯来,理解了这个概念之后,对于为什么不能在窗体过程里做费时的操作,UI 线程和工作线程都有什么用,以及什么时候需要启动工作线程等问题,也就自然而然就能想明白了。
5. 理解窗体重绘机制。这点其实属于消息模型的一个子话题,但由于入门的时候会给初学者带来的困扰很大,因此我单独提出来作为一个点。在 Windows 9x 下,一个窗口出现在另外一个窗口上方的时候,是会把下面的窗口上的内容抹去的。当上面的窗口离开之后,下面的窗口需要重画自己被抹去的内容。更高版本的 Windows 虽然系统能够自动缓存被遮盖的窗体上的内容,但从编程的角度来看,程序员仍然需要遵从之前的窗口绘制机制来编写自己的程序,假定自己的程序被覆盖的时候会被擦除。为了能够正确处理擦除与重绘,绘制窗口内容必须通过监听重绘消息来进行,想改变窗口内容的时候不能随时往窗口上画,而是要先准备好要画的内容但不画,然后发消息触发重绘消息让系统通知你画。这些反直觉的行为的理解和掌握,是初学的时候必须迈过的坎。
上面这些概念都掌握之后,入门 Win32 GUI 编程就是一件相对容易的事情了。接下来只要找一份入门教程,按部就班把例题都过一遍,再自己亲手写几个 GUI 小程序,差不多也就上手了。
windows编程入门最重要的的更多相关文章
- Windows编程入门程序详解
引用:http://blog.csdn.net/jarvischu/article/details/8115390 1. 程序 /******************************* ...
- 1.windows编程入门MessageBox使用 -windows编程
引言:刚开始入门windows编程的时候,我记得当时我对MFC的给出的一大堆代码感到束手无策.因为历史的缘故,windows编程入门的代码并没有体现出C++语言的简洁性,相反一上来就给了我们一大堆代码 ...
- <2013 12 01> 一篇很好的关于windows编程的入门指导(2013年末写的,比较前沿)
我之前做了不少嵌入式开发,从单片机到ARM到RTOS到Linux等等,可以说走的是电气工程师的路线,对编程也是实用性的,跟计算机学院的科班套路不同.最近同学做一个windowsCE的项目请我帮忙,之前 ...
- 【Windows编程】入门篇——win 32窗口的hello word!
✍ Windows编程基础 1.Win 32应用程序基本类型 1) 控制台程序 不需要完善的windows窗口,可以使用DOS窗口方式显示 2) Win 32窗口程序 包含窗口的程序,可以通过窗 ...
- 走进windows编程的世界-----入门篇
1 Windows编程基础 1.1Win32应用程序基本类型 1) 控制台程序 不须要完好的windows窗体,能够使用DOS窗体方式显示 2) Win32窗体程序 包括窗体的程序,能够通过窗 ...
- Direct3D 10学习笔记(四)——Windows编程
本篇将简单整理基本的Windows应用程序的实现,并作为创建Direct3D 10应用程序的铺垫.具体内容参照< Introduction to 3D Game Programming with ...
- 操作系统,windows编程,网络,socket
首发:个人博客,更新&纠错&回复 之前关于c/s的一篇博文只记了思路没记代码,而且表达不清晰,事后看不知所云,这个习惯要改. 这十几天学了点关于操作系统.windows编程和网络,主要 ...
- MFC编程入门之五(MFC消息映射机制概述)
在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应. 一.什 ...
- VS2010/MFC编程入门之五(MFC消息映射机制概述)
VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html 上一讲鸡啄米为大家简单分析了MFC应用 ...
随机推荐
- 将图片写入二进制文件,再从二进制文件还原图片(c++)
#include "string" #include "iostream" #include "fstream" using namespa ...
- mysql 8.0.12安装步骤
首先从官网下载压缩包: 解压压缩包到指定目录,在目录下新建my.ini,配置内容如下; [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir ...
- Win10英文系统 JDK1.8安装及环境变量配置
前提 今天换新电脑了,需要重新安装一遍JDK.写个随笔记录一下整个过程. 下载 官网上JDK已经出到10了,但是回忆起JDK9都有各种坑(不支持一些软件),决定还是用JDK8. 下载地址: http: ...
- Excel2003 去除重复项
利用 数据透视表 间接 获得 非重复项 1] 选中要去除重复项 的列 数据 2] 3]将选中列移动到 左侧 即可 4] 或者导入到Access中,用sql 语句中的 distinct SELECT D ...
- linux服务器项目部署【完整版】
之前总玩v8虚拟机,最近看到腾讯云学生套餐很实惠就租了个linux服务器搭一个项目,做下这个项目部署全记录,即为了方便以后查看,同时也分享下自己的经验,不足之处还请多多指教,废话不多说,直接开始!!! ...
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一)
一.开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二.背景知识 ...
- 『Python基础-14』匿名函数 `lambda`
匿名函数和关键字lambda 匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数 在Python中,如果要声匿名函数,则需要使用lambda关键字 使用lambda声明的匿名函数能接收任何 ...
- wordpress网站程序漏洞修复办法
近日wordpress被爆出高危的网站漏洞,该漏洞可以伪造代码进行远程代码执行,获取管理员的session以及获取cookies值,漏洞的产生是在于wordpress默认开启的文章评论功能,该功能在对 ...
- php7+apache2.4+mysql 环境配置(window环境)
最近,小主从事PHP开发.特将最近如何搭建php7的过程记录在此!希望有需要,可以借鉴!( 电脑必须win7 sp1以上, .netframework4 ) Windows7安装php7,Win7+p ...
- 成都Uber优步司机奖励政策(1月12日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...