zoukankan      html  css  js  c++  java
  • 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 小程序,差不多也就上手了。

  • 相关阅读:
    数据类型基础
    变量的三个特征
    常量
    变量
    django基础 -- 2. django初识
    django基础 -- 1. 前奏 web框架的本质
    前端 --- 7 Bootstrop框架
    前端 --- 6 jQuery 初始
    前端 --- 5 BOM 和 DOM
    前端 --- 4 js
  • 原文地址:https://www.cnblogs.com/xzxl/p/7660828.html
Copyright © 2011-2022 走看看