Windows 程序设计 复习笔记(共 81 问)
(个人整理,仅做复习用 :D,转载注明出处:http://blog.youkuaiyun.com/hcbbt/article/details/42706501)
知识点
-
双字节字符集和Unicode字符集有何区别?采用双字节字符集有何问题
- 双字节字符集(DBCS)编码是0-255,DBCS含有1字节代码与2字节代码,而Unicode是统一的16位系统,这样就允许表示 65536个字符。Unicode中的每个字符都是16位宽而不是8位宽。在Unicode中,8位二进制表示一个数值已没意义,而在双字节字符集中仍然 处理8位数值。
- 双字节字符集并不是所有字符由两个字节代表,这会引起附加的程序设计问题,例如字符串的长度计算。而且处理双字节字符集非常复杂。
-
什么叫宽字符?什么是Unicode字符?它们有何区别?
- 用多个字节来代表的字符称为宽字符,C中用wchar_t表示宽字符数据类型 。
- Unicode只是宽字符编码的一种实现,用2个字节存贮一个字符
- Unicode是宽字符的一种,而宽字符并不一定是Unicode。
-
讲述_Unicode识别子,TCHAR.h头文件的作用。
- _UNICODE是控制程序段中的字符串处理函数是按照宽字符串处理函数对待还是按照常规字符串处理函数对待。
- TCHAR.h为以字符串作为参数的标准库函数提供一系列的替代名称。这些通用函数名称可以指向函数的Unicode版,也可以指向非Unicode版,实现的关键是在编译命令中增加_UNICODE识别字。
-
资源描述文件的作用是什么?资源编译器的功能是什么?
- 资源描述文件的作用是把应用程序或进程用到的资源记录其中。
- 资源编辑器的功能是根据 RC 文件中模板提供的信息生成资源再编译成所需要的二进制文件,所以现代的资源编译器本质上把资源生成器、编译器联合在一起,利于编程人员的使用。
- 资源文件与资源描述文件(.RC)的区别?
- 把应用程序或进程用到的资源记录在一个文件中,这个文件叫做资源描述文件。
- 在WIN32中,资源称作对象,可分为正文资源,与二进制资源两大类。
-
讲讲匈牙利命名惯例的约定,还要记住哪些习惯用法?
- 匈牙利命名惯例的约定有两条:
1. 标识符以一个或者几个小写字母开始,这些小写字母表示标识符的数据类型;
2. 大小写混杂写,使得标识符具有一定的含义,便于理解,增强可读性。 - 习惯用法:
- 在命名结构变量时,可以用结构名的小写字符序列作为变量名的字首,或者用整个结构名用作结构变量名。
- 匈牙利命名惯例的约定有两条:
-
解释事件驱动程序的原理,并和过程式程序进行比较。
- 事件驱动程序
- 在初始化和创建应用窗口结束后,其他活动基本停止,执行一个无限循环,坐等用户输入消息。一旦用户提供输入产生事件,windows接到消息并分析,根据重要性指挥应用程序工作。如果消息和应用程序无关或无意义则不响应,如果发生很多事件,则在消息队列中排队等候处理。
-
开始 -> 设置变量,结构 -> 填写窗口类的条款 -> 注册窗口类 -> 创建应用程序窗口 -> 在屏幕上显示窗口
进入消息循环并从队列中得到一个消息 <--------------------------- v ^ 此消息是否为 WM_QUIT---非----> | | | 是 窗口函数 | |是 应用程序定义过的消息吗?----> 处理消息->| v 否 V | 终止执行 对消息进行默认处理--------------->
-
过程式程序是按照编程人员编出程序的顺序执行,自顶向下,单执行流程式样。Windows程序执行过程是应用程序与操作系统相互通信对话的过程,和消息事件密切相关。
-
何谓动态链接?何谓静态链接?动态链接库文件的后缀是什么?
- 动态链接:建立动态链接库让相同的部分只要一个备份,程序执行到这个函数时,就到动态链接库中去取用。
- 静态链接:程序调用函数时函数的机器码在链接过程中会合并到程序本身中。
- DLL
-
解释窗口类结构名与窗口类变量,为什么要填写窗口类条款?注册的作用是什么?
- WNDCLAS是Windows中的窗口类结构名,可定义某类窗口的通用模板,体现了窗口们的共同特征。
-
窗口类变量是依据窗口类结构条目印刷出来的存储区。
-
窗口类条款是窗口共同书写的记录,填写各条款,形成初始化的窗口类。
- 注册窗口类的作用是使得Windows操作系统知道这个窗口类,把Windows操作系统和这个窗口类联系起来,使得窗口类处于Windows操作系统的控制之下。
-
用哪个函数创建窗口?它是几个参数?请解释每一个参数?
- CreateWindow:
HWND CreateWindow( LPCTSTR lpClassName, //pointer to register class name LPCTSTR lpWindowName, //pointer to window name DWORD dwstyle, //window style int X, //horizontal position of window int Y, //vertical positon of window int nWidth, //window width int nHeight, //window height HWND hWndParent, //handle to parent or owner window HMENU hMenu, //handle to menu or child-window identifier HANDLE hInstance, //handle to application instance LPVOID lpParam //pointer to window-creation data }
- CreateWindow:
-
应用程序中用的窗口类名从哪里取得?
- 窗口类结构条款中的 szAppName,正常应用程序中窗口类名与应用程序名相同。
-
主程序WinMain和WndProc是如何联系的?
wndclass.lpfnWndProc = WndProc ; // 窗口消息处理程序地址
- WinProc窗口处理函数是一个回调函数,它是用来处理消息的,是由Windows调用的。
- 在注册窗口类的时候指定了窗口处理函数的入口地址,应用程序获得的消息都交给此入口地址对应的窗口处理函数来处理。
-
解释消息循环中的几个函数?
- 消息循环与MSG结构:
while (GetMessage (&msg, NULL, 0, 0)) { // 是否为 !WM_QUIT TranslateMessage (&msg); // 规范化 DispatchMessage (&msg); // 调用 }
- 消息循环与MSG结构:
-
解释系统全局窗口类、应用全局窗口类、应用专用窗口类。
- 系统全局窗口类又称预先定义窗口类,32位Windows提供了7种预先注册好的窗口类,在开发者编写的代码里无需进行任何注册。(COMBOBOX EDIT USEBOX SCROLLBAR CTATIC MDICLIENT)
- 应用全局窗口类是属于应用程序的,这个应用程序生成的任何进程都可用这个全局窗口类,而不是注册。在多文档程序中使用。
- 应用专用窗口类是执行进程时就要填写窗口类结构条款、注册的窗口类,属于这个进程,从生成进程过程中注册窗口类开始到进程中断这段时间才是活动的。
-
32位Win