以下主要介绍:win32 程序开发流程,导入函数库,windows的运行机制,输入分类,信息,窗口函数等概念。
MFC microsoft foundation classes
API application programming interface
DLL dynamic link library
GUI graphics user interface
MDI multiple document interface
SDI sigle document interface
OLE object linking&embeded
SDM software development kit
UI user interface
WinApp windows application
windows程序是信息为基础,事件驱动 message based,event driven
windows程序分为程序编码和UI资源两部分,用rc编译器集成一个完整的exe文件
win32 程序开发流程:
资源描述文件.rc中描述各种UI资源,RC编译器RC.EXE读取RC文件描述的所有UI资源
文件集中制作一个.RES文件,再和程序编码结合在一起,成为一个完整的windows可
执行文件。
WINDOWS程序为什么必须使用导入函数库?
windows程序调用的函数分为:c runtimes 以及 windows api两大部分。
windows api,由操作系统本身提供(windows 三大模块
GUI32.DLL,USER32.DLL,KERNEL32.DLL).
导入函数库,就是存放在链接的时候需要使用什么样的dll文件,以及这些文件存放
的地方。而三大模块所对应的导入函数库别为
GUI32.LIB,USER32.LIB,KERNEL32.LIB.
一般函数是存放到了上边的三大模块中,还有新的api函数,放在dll文件中,比如
COMMDLG.DLL,TOOLHELP.DLL,中,如果使用这些API,链接时还得加上这些dll对应的
导入函数,比如COMDLG32.LIB和TH32.LIB.
WINDOWS程序需要什么头文件?
windows程序必须包含windows.h.它包含的是三大模块所提供的api函数,如果用到
其他system dlls,比如COMMDLG.DLL,MAPI.DLL,TAPI.DLL,就要使用相对应的头文件
COMMDLG.H MAPI.H TAPI.H等等。
windows的运行机制?
信息为基础,以事件驱动。
windows程序运行依靠外部发生的事件来驱动的。程序等待任何可能的输入,然后判
断,最后做出适当处理。
输入是由操作系统捕捉到,以信息形式进入程序之中。
信息,就是windows内设的一种数据结构。
输入分类?
硬件设置所产生的信息:放到系统队列(system queue)
windows系统或是其他windows程序传送过来的信息:放到程序队列(application
queue)。
信息?
信息,就是windows内设的一种数据结构。
typedef struct tagMSG
{
HWND hwnd;
UINT message;(WM_)
WPARAM wParam;(WM_MOUSEMOVE,WM_SIZE,WM_LBUTTONDOWN)
LPARM lParm;
DWORD time;
POINT pt;
}MSG;
接受并处理信息的就是窗口。每个窗口都有一个函数负责处理信息,这个函数就叫
窗口函数(window procedure,window function)
窗口注册和窗口的诞生?
窗口函数就是窗口接收信息后的反应。
产生窗口前用API函数RegisterClass设定窗口属性(就是注册窗口)
窗口的注册用的是RegisterClass (被封装在InitApplication函数中)
窗口的诞生是用CreateWindow(被封装在InitInstance函数中)
InitApplication 和 InitInstance区别:
函数注册:窗口类只需要注册一次,以后可供同一程序的后继每一个实例
(instance)使用(所有进程公在一个地址空间中),因此将RegisterClass这个动
作放在“只有第一个实例才会进入”的InitApplication函数中。
一个进程是否是某个程序的第一个实例,可以用WinMain的参数hPrevInstance来判
断
产生窗口:CreateWindow是任何实例都可以进入,放到InitInstance函数中。
信息循环?
while(GetMessage(&msg,...))
{
TranslateMessage(&msg);//为了将键盘信息转化
DispatchMessage(&msg);//将信息传给窗口函数去处理
}
窗口函数?
DispatchMessage(&msg)是一种回调函数,就是你自己写的程序中的被windows系统
调用的函数。
窗口函数形式:
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
资源定义文件(.RC):
.RC文件是一个用文字描述资源的地方。常用资源有九项:ICON(图标),CURSOR(
指针),BITMAP(位图),FONT(字体),DIALOG(对话框),MENU(菜
单),ACCELERATOR(加速器),STRING(字符串),VERSIONINFO.
核心对象?
系统的一种资源,一旦产生,任何应用程序都可以开启并使用这个对象。系统给核
心对象 一个计数值来管理它。
核心对象包括: 产生方法
event CreateEvent
mutex CreateMutex
semaphore CreateSemphore
以上用于线程同步化
file CreateFile
file-mapping CreateFileMapping 用于内存映射文件
process CreateProcess
thread CreateThread
进程的诞生和死?
shell中以鼠标双击一个可执行文件图标,就可以执行这个(比如)App.exe的流程:
1shell调用CreateProcess启动App.exe。‘
2系统产生一个“进程核心对象”,计数值为1。
3系统为此进程建立一个4GB地址空间
4载入器将必要的数据载入到上述地址空间中,包括App.exe的程序,数据,以及所
需要的连接函数库(DLL).载入器是根据.idata section中的(PE文件格式)的记
录文件。
5系统为此进程建立一个线程,称为主线程。线程才是分配cpu时间的分配对象。
6系统调用 C runtime函数库的Startup code。
7Startup code调用App程序的WinMain函数。
8App程序运行开始
9使用者关闭App主窗口,是WinMain中的信息循环结束掉,于是WinMain结束。
10 返回到Startup code。
11返回到系统,系统调用ExitProcess结束进程。
产生子进程?
用CreateProcess
结束进程?
VOID ExitProcess(UINT fuExitCode);
产生额外的线程?
CreateThread()
当进程建立起来后,系统会完成什么(就是已经有了主线程)?
1配置“线程对象”,其handle将成为CreateThread的返回值
2设定计数值为1
3配置线程的context(工作)
4保留线程的堆栈
5将context中的堆栈指针寄存器(ss)和指令指针寄存器(ip)设定妥当
线程优先级?
0-31 从低到高,
级别 代码 优先权值
idle IDLE_PRIORITY_CLASS 4
normal NORMAL_PRIORITY_CLASS 9
high HIGH_PRIORITY_CLASS 13
realtime REALTIME_PRIORITY_CLASS 24
posted on 2009-07-18 19:27
Bluesea 阅读(1022)
评论(0) 编辑 收藏 引用 所属分类:
MFC