也有很多处理异常的方法,但这样的异常处理也仍然是顺序的,过程驱动的结构。
11、Windows的驱动方式是事件驱动,就是不由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的。做为一个程序员,在你编写程序时,你并不知道用户先按哪个按纽,也不知道程序先触发哪个消息。你的任务就是对正在开发的应用程序要发出或要接收的消息进行排序和管理。事件驱动程序设计是密切围绕消息的产生与处理而展开的,一条消息是
关于发生的事件的消息。
12、Windows程序则至少两个主程序,
一个是WinMain(),
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
);
另一个是窗口过程函数WndProc,它的函数原型为:
long FAR PASCAL WndProc(HWND hWnd,WORD message,WORD wParam,LONG lParam);
13、窗口函数与回调函数:
在Windows中,应用程序通过要求Windows完成指定操作,而承担这项
通信任务的API函数就是Windows的相应窗口函数WndProc。应用程序不直接调用任何窗口函数,而是等待Windows调用窗口函数,请求完成任务或返回信息。为保证Windows调用这个窗口函数,这个函数必须先向Windows登记,然后在Windows实施相应操作时回调,所以窗口函数又称为回调函数。WndProc是一个主回调函数,Windows至少有一个回调函数。典型的回调函数有窗口过程、对话框过程和钩子函数。实际上,也许有不止一个的窗口过程。例如,每一个不同的窗口类都有一个与之相对应的窗口过程。
15、实例:在Windows中,能多次同时运行同一个应用程序,即运行多个副本,每个副本叫做一个“实例”。
16、C runtime函数库:
就跟它的名字一样,运行类型信息
主要有COject类和CRuntimeClass类来实现,用来存贮COject类和派生类的运行类型信息,
1.类的基本情况:如类的名字,存贮空间大小,用于运行类的类型确定.
2.ms在C++的标准上,添加动态创建的类对象功能,也就是时时提到的动态创建
3.串行化处理.
The OS does not know main(), so C-runtime is first called and transfer control to main
it also provide library for common usage, such as math functions
17、WinMain()函数的调用约定是PASCAL。
在这里PASCAL是一个调用约定,由于这种方式最早由PASCAL采用,所以这么叫。
在MSDN中的C++ Language Reference中,Calling Conventions这一章都是讲调用约定的。
约定:微软重定义了许多约定类型,为的是可以让代码更容易跨平台或者跨编译器。
其实,调用约定要解决两个
问题,都是针对堆栈操作:
1。参数传递的顺序(本质是压栈的顺序)
2。谁负责平栈(调用者还是调用对象)
一个函数的声明、定义和实现中的调用方式一般都一致。
WINAPI标识符的定义是:#define WINAPI __stdcall, __stdcall指Window调用函数的一种方式,也就是如何在堆中存取函数参数的方式。许多Windows Api函数调用声明为__stdcall方式。
18、用位的“或”操作(操作符“|”)把若干个常数
组合起来控制消息窗口显示的按钮和图标等。
19、在Windows应用程序中,每一个窗口都必须从属于一个窗口类,窗口类定义了窗口所具有的属性,如它的样式、图标、鼠标指针、菜单名称及窗口过程名等。
窗口种类是定义窗口属性的模板,这些属性包括窗口式样,鼠标形状,菜单等等,窗口种类也指定处理该类中所有窗口消息的窗口函数.只有先建立窗口种类,才能根据窗口种类来创建Windows应用程序的一个或多个窗口.创建窗口时,还可以指定窗口独有的附加特性.窗口种类简称窗口类,窗口类不能重名.在建立窗口类后,必须向Windows登记.建立窗口类就是用WNDCLASS结构定