`
hme53hme
  • 浏览: 10489 次
社区版块
存档分类
最新评论

windows程序设计相关思想

 
阅读更多

windows程序设计相关思想
2011年05月24日
  就我个人观点,C++/MFC 程序设计必须跨越四大技术障碍:
  1. 对象导向观念与C++ 语言。
  2. Windows 程序基本观念(程序进入点、消息流动、窗口函数、callback...)。
  3. Microsoft Foundation Classes(MFC)本身。
  4. Visual C++ 整合环境与各种开发工具(难度不高,但需熟练)  
  SDK - Software Development Kit,原指软件开发工具。每一套环境都可能有自己的SDK。
  凡以Windows raw API 撰写的程序我们通常也称为SDK 程序。
  MFC - Microsoft Foundation Classes 的缩写,这是一个架构在Windows API 之上的C++ 类别库(C++ Class Library),意图使Windows 程序设计过程更有效率,更符合物件导向的精神。
  Windows 程序分为「程序代码」和「UI(User Interface)资源」两大部份,两部份最后以RC编译器整合为一个完整的EXE 文件。
  并不是延伸档名为.dll 者才是动态联结函数库(DLL,Dynamic Link Library),事实.exe、.dll、.fon、.mod、.drv、.ocx 都是所谓的动态联结函数库。
  Windows 程序调用的函数可分为C Runtimes 以及Windows API 两大部份。
  另一组函数,Windows API,由操作系统本身(主要是Windows 三大模块GDI32.DLL 和USER32.DLL 和KERNEL32.DLL)提供。
  所有Windows 程序都必须包含WINDOWS.H。
  噢,USER 模块掌管各个外围的驱动程序,它们各有侦测回路。
  如果把应用程序获得的各种「输入」分类,可以分为由硬件装置所产生的消息(如鼠标移动或键盘被按下),放在系统队列(system queue)中,以及由Windows 系统或其它Windows 程序传送过来的消息,放在程序队列(application queue)中。  
  接受并处理消息的主角就是窗口。每一个窗口都应该有一个函数负责处理消息,程序员必须负责设计这个所谓的「窗口函数」(window procedure,或称为window function)。
  如果窗口获得一个消息,这个窗口函数必须判断消息的类别,决定处理的方式。  
  所谓makefile,就是让你能够设定某个文件和某个文件相比-- 比较其产生日期。由其比
  较结果来决定要不要做某些你所指定的动作。
  makefile 必须以NMAKE.EXE(Microsoft 工具)处理。
  WinMain 则是Windows 程序的进入点:
  int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  LPSTR lpCmdLine, int nCmdShow)
  {
  ...
  }
  // 在Win32 中CALLBACK 被定义为__stdcall,是一种函数调用习惯,关系到
  // 参数挤压到堆栈的次序,以及处理堆栈的责任归属。其它的函数调用习惯还有
  // _pascal 和_cdecl
  因为API 函数CreateWindow 完全包办了整个巨大的工程。但是窗口产生之前,其属性必须先设定好。所谓属性包括窗口的「外貌」和「行为」,一个窗口的边框、颜色、标题、位置等等就是其外貌,而窗口接收消息后的反应就是其行为(具体地说就是指窗口函数本身)。  
  初始化工作完成后,WinMain 进入所谓的消息循环:
  while (GetMessage(&msg,...)) {
  TranslateMessage(&msg); // 转换键盘消息
  DispatchMessage(&msg); // 分派消息
  }
  其中的TranslateMessage 是为了将键盘消息转化,DispatchMessage 会将消息传给窗口函数去处理。
  程序进行过程中,消息由输入装置,经由消息循环的抓取,源源传送给窗口并进而送到窗口函数去。窗口函数的体积可能很庞大,也可能很精简,依该窗口感兴趣的消息数量多寡而定。
  LRESULT CALLBACK WndProc(HWND hWnd,
  UINT message,
  WPARAM wParam,
  LPARAM lParam)
  注意,不论什么消息,都必须被处理,所以switch/case 指令中的default: 处必须调用defWindowProc,这是Windows 内部预设的消息处理函数。  
  Windows 的对话框依其与父窗口的关系,分为两类: 1. 「令其父窗口除能,直到对话框结束」,这种称为modal 对话框。
  2. 「父窗口与对话框共同运行」,这种称为modeless 对话框。
  为了做出一个对话框,程序员必须准备两样东西:
  1. 对话框模板(dialog template)。这是在RC 文件中定义的一个对话框外貌,以各种方式决定对话框的大小、字形、内部有哪些控制组件、各在什么位置...等等。
  2. 对话框函数(dialog procedure)。其类型非常类似窗口函数,但是它通常只处理WM_INITDIALOG 和WM_COMMAND 两个消息。
  Modal 对话框的激活与结束,靠的是DialogBox 和EndDialog 两个API 函数。
  对话框处理过消息之后,应该传回TRUE;如果未处理消息,则应该传回FALSE。这是因为你的对话框函数之上层还有一个系统提供的预设对话框函数。如果你传回FALSE,该预设对话框函数就会接手处理。  
  RC 文件是一个以文字描述资源的地方。
  所谓空闲时间(idle time),是指「系统中没有任何消息等待处理」的时间。  
  Console 程序与DOS程序的差别:
  都是所谓Win32 程序。如果程序是以main 为进入点,调用C runtime 函数和「不牵扯GUI」的Win32 API 函数,那么就是一个console 程序,console窗口将成为其标准输入和输出装置(cin 和cout)。
  Win32 Console 程序设计、MFC Console 程序设计。
  过去在DOS 环境下开发的程序,称为DOS 程序,它也是以main 为程序进入点,可以调用C runtime 函数。但,当然,不可能调用Win32 API 函数。  
  这么简单的例子中,我们看到MFC Console 程序的几个重点:
  1. 程序进入点仍为main
  2. 需包含所使用之类别的头文件(本例为AFX.H)
  3. 可直接使用与GUI 无关的MFC 类别(本例为CStdioFile 和CString)
  4. 编辑时需指定/MT,表示使用多执行线程版本的C runtime 函数库。
  指定/MT的编译选项的方法:project->project settings->C/C++->code generation 运行库选项。  
  MFC console程序中不需要指定头文件windows.h,用_T()宏转化字符串为宽字符串。
  什么是C Runtime   函数库的多线程版本?、
  当C runtime 函数库于1970s 年代产生出来时,PC 的内存容量还很小,多任务是个新奇观念,更别提什么多执行线程了。因此以当时产品为基础所演化的C runtime 函数库在多线程(multithreaded)的表现上有严重问题,无法被多线程程序使用。利用各种同步机制(synchronous mechanism)如critical section、mutex、semaphore、event,可以重新开发一套支持多执行线程的runtime 函数库。问题是,加上这样的能力,可能导至程序代码大小和执行效率都遭受不良波及-- 即使你只激活了一个执行线程。  
  我们习惯以进程(process)表示一个执行中的程序,并且以为它是CPU 排程单位。事实上执行线程才是排程单位。
  你可以说核心对象是系统的一种资源(噢,这说法对GDI 对象也适用),系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予核心对象一个计数值(usage count)做为管理之用。
  核心对象包括下列数种:
  核心对象       产生方法
  event CreateEvent
  mutex CreateMutex
  semaphore CreateSemaphore
  file CreateFile
  file-mapping CreateFileMapping
  process CreateProcess
  thread CreateThread
  前三者用于执行线程的同步化:file-mapping 对象用于内存映射文件(memory mappingfile)。
  CreateThread(),第五个参数如果是0,表示让执行线程立刻开始执行,如果是CREATE_SUSPENDED , 则是要求执行线程暂停执行( 那么我们必须调用ResumeThread 才能令其重新开始).
分享到:
评论

相关推荐

    C++ 学习资料大全 C++编程思想 WINDOWS 核心编程 WINDOWS程序设计第5版 深入浅出MFC简体中文版 C++ Primer 3rd Edition 中文完美版

    学习C++必备资料续。。。C++编程思想 WINDOWS 核心编程 WINDOWS程序设计第5版 深入浅出MFC简体中文版 C++ Primer 3rd Edition 中文完美版,陆续奉上

    Windows应用程序设计大纲.doc

    该课 程的主要任务是讲授利用MFC进行Windows应用程序设计的基本原理和方法,并向学生灌 输框架编程的核心思想,从而为今后开发实用性较强的软件系统打下坚实基础。 二、教学目的与基本要求 本课程的目的是使学生深刻...

    c++程序设计教程——设计思想与实现(课件)

    课件和学习笔记。课件非常的仔细。还有在学习过程遇到的问题与解决!

    基于VB.NET的Windows应用程序设计

    本课程介绍使用VB.NET开发Windows应用程序所需的知识和技能 预备知识 掌握基本的VB.NET语法 掌握数据库的基本知识 掌握面向对象的编程思想 能够使用Visual Studio.NET图形化界面开发环境 课时:108 课时 分为两部分 ...

    windows程序设计英文,STL源码剖析,设计模式,c++primer 习题答案,java编程思想

    windows程序设计英文版,STL源码剖析,设计模式,c++primer 习题答案, java编程思想

    windows 程序设计帮助文件

    详细介绍了windows程序设计的基本方法和思想,以及在设计中应注意的问题和重点,注重讲授控件操作(经典)

    刘艺新书 Delphi程序设计大学教程

    本书以Delphi语言为载体,通过讨论程序设计的一般过程和方法,重点讲述程序设计基础、算法与结构化程序设计、面向对象程序设计、Windows程序设计和数据库程序设计的知识,并涉及计算机科学基础、数据和控制、程序...

    windows 程序设计指南

    了解windows的基本编程思想,是你做windows编程必不可少的开发工具

    c#.net程序设计教程罗福强版课件

    本书共分为12章,在讲解Visual C# .NET语法的基础上,以面向对象的程序设计方法和基于事件的程序设计方法为核心,重点阐述Windows程序设计、Web应用程序设计、数据库编程、文件操作与编程等实用技术。本书内容丰富,...

    JSP+Servlet聊天室 windows程序设计 课程设计

    windows程序设计 课程设计----用JSP+Servlet实现多人网络聊天室 内含: 1.源文件 2.软件工程企业项目文档 3.部署说明 文档目录: 目 录 § 1 引言 3 §1.1 编写目的 3 §1.2 术语定义 4 §1.3 参考资料 4 § 2 ...

    《C#面向对象程序设计》源代码(CS)

    本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发,以及数据库访问技术。...

    Python语言程序设计习题答案.zip

    随着国家大数据战略的深入实施,各行业智慧化建设急需数据分析人才和智能应用人才。智慧化简单来说是一个以机器替换人力的过程,而机器的“灵魂”是程序。...学习本章,重在理解面向对象程序设计思想、类和对象的概念

    用C++编写的windows操作系统的多线程同步程序

    理解Windows程序设计的基本思想,理解基于消息的程序设计方法,设计出简单的基于事件的windows程序,完成基本控件的使用 结合操作系统中信号量与互斥体的概念,在MFC中找到对应的相关类 设计一个多线程同步的程序,

    程序设计入门—C语言(完)-浙江大学-翁恺 视频.txt

    对于计算机相关专业而言,程序设计是专业基础知识,是进一步学习其他专业知识的第一步阶梯;对于非计算机专业而言,程序设计的学习有助于理解计算机的能力所在,理解哪些是计算机擅长解决的问题,怎样的方式方法是...

    可视化程序设计(VB)课件_东北大学

    掌握结构化程序设计和面向对象程序设计基本思想,掌握类概念,以及对象的建立与编辑、对象的属性、事件和方法;掌握建立简单应用的方法,掌握窗口和基本控件的基本属性和用法,以及VB的管理和环境的设置。 (二) 重点...

    Visual C#程序设计

    并通过大量的程序实例和相关练习逐步掌握高级程序设计语言的基本知识和基本技术,在理论和实践上使学生掌握面向对象的思想方法并初步具备软件开发的能力。全书共17章,内容包括流程控制语句、类与对象 、继承与多态...

    WINDOWS 程序设计

    这是CHM格式的文档,对于想要了解明白windows系统的设计思想与原理是一本不错的书。

    C++程序设计题解与上机指导

    《中国高等院校计算机基础教育课程体系规划教材:C++程序设计题解与上机指导(第2版)》是和作者编著的《C++程序设计(第2版》(清华大学出版社出版)一书配套使用的参考用书。《中国高等院校计算机基础教育课程体系...

    Python语言程序设计PPT课件.zip

    随着国家大数据战略的深入实施,各行业智慧化建设急需数据分析人才和智能应用人才。智慧化简单来说是一个以机器替换人力的过程,而机器的“灵魂”是程序。...学习本章,重在理解面向对象程序设计思想、类和对象的概念

    Visual C#程序设计(2012版)

    本书以Visual C# 2012语言为工具,介绍面向对象程序设计中的基本概念和方法,并通过大量的程序实例和相关练习逐步掌握高级程序设计语言的基本知识和基本技术,在理论和实践上使学生掌握面向对象的思想方法并初步具备...

Global site tag (gtag.js) - Google Analytics