《深入浅出MFC第2版(PDF格式)》第21章


#0020 MENUITEM SEPARATOR 
#0021 MENUITEM 〃E&xit〃; IDM_EXIT 
#0022 END 
#0023 POPUP 〃&Edit〃 
#0024 BEGIN 
#0025 MENUITEM 〃&UndotCtrl+Z〃; IDM_UNDO; GRAYED 
#0026 MENUITEM SEPARATOR 
#0027 MENUITEM 〃Cu&ttCtrl+X〃; IDM_CUT; GRAYED 
#0028 MENUITEM 〃&CopytCtrl+C〃; IDM_COPY; GRAYED 
#0029 MENUITEM 〃&PastetCtrl+V〃; IDM_PASTE; GRAYED 
#0030 MENUITEM 〃Paste &Link〃; IDM_LINK; GRAYED 
#0031 MENUITEM SEPARATOR 
#0032 MENUITEM 〃Lin&ks。。。〃; IDM_LINKS; GRAYED 
#0033 END 
#0034 POPUP 〃&Help〃 
#0035 BEGIN 
#0036 MENUITEM 〃&Contents〃; IDM_HELPCONTENTS; GRAYED 
#0037 MENUITEM 〃&Search for Help On。。。〃; IDM_HELPSEARCH; GRAYED 
#0038 MENUITEM 〃&How to Use Help〃; IDM_HELPHELP; GRAYED 
#0039 MENUITEM SEPARATOR 
#0040 MENUITEM 〃&About Generic。。。〃; IDM_ABOUT 
#0041 END 
14 
…………………………………………………………Page 77……………………………………………………………
#0042 END 
#0043 
#0044 AboutBox DIALOG DISCARDABLE 22; 17; 144; 75 
#0045 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU 
#0046 CAPTION 〃About Generic〃 
#0047 BEGIN 
#0048 CTEXT 〃Windows 95〃; …1;0; 5;144;8 
#0049 CTEXT 〃Generic Application〃;…1;0;14;144;8 
#0050 CTEXT 〃Version 1。0〃; …1;0;34;144;8 
#0051 DEFPUSHBUTTON 〃OK〃; IDOK;53;59;32;14;WS_GROUP 
#0052 END 
程序进入点 WinMain 
main C
是一般 程序的进入点: 
int main (int argc; char *argv ' '; char *envp ' '); 
{ 
。。。 
} 
WinMain 则是Windows 程序的进入点: 
int CALLBACK WinMain (HINSTANCE hInstance; HINSTANCE hPrevInstance; 
LPSTR lpCmdLine; int nCmdShow) 
{ 
。。。 
} 
// Win32 CALLBACK __stdcall 
在 中 被定义为 ,是一种函数调用习惯,关系到 
// 参数挤压到堆栈的次序,以及处理堆栈的责任归属。其它的函数调用习惯还有 
// _pascal _cdecl 
和 
当Windows 的「外壳」(shell,例如Windows 3。1 的程序管理员或Windows 95 的文件 
总管)侦测到使用者意欲执行一个Windows 程序,于是调用加载器把该程序加载,然后 
调用C startup code,后者再调用WinMain ,开始执进程序。WinMain 的四个参数由操作 
系统传递进来。 
15 
…………………………………………………………Page 78……………………………………………………………
窗口类别之注册与窗口之诞生 
一开始,Windows 程序必须做些初始化工作,为的是产生应用程序的工作舞台:窗口。 
这没有什么困难,因为API 函数Create Window 完全包办了整个巨大的工程。但是窗口 
产生之前,其属性必须先设定好。所谓属性包括窗口的「外貌」和「行为」,一个窗口 
的边框、颜色、标题、位置等等就是其外貌,而窗口接收消息后的反应就是其行为(具 
API RegisterClass 
体地说就是指窗口函数本身)。程序必须在产生窗口之前先利用 函数 
设定属性(我们称此动作为注册窗口类别)。RegisterClass 需要一个大型数据结构 
WNDCLASS 做为参数,Create Window 则另需要11 个参数。 
WNDCLASS wc; GENERIC。C 
GENERIC。C LRESULT CALLBACK WndProc(HWND hWnd;
wc。style = CS_HREDRAW | CS_VREDRAW; 窗口函数 UINT message; 
wc。lpfnWndProc = (WNDPROC)WndProc; WPARAM wParam;
wc。cbClsExtra = 0; LPARAM lParam) 
wc。cbWndExtra = 0; { 
wc。hInstance = hInstance; 。。。 GENERIC。C 
wc。hIcon = LoadIcon(hInstance; 〃jjhouricon 〃); } GENERIC。C 
wc。hCursor = LoadCursor(NULL; IDC_ARROW); 
wc。hbrBackground = GetStockObject(WHITE_BRUSH); 窗口图标(icon) 
wc。lpszMenuName = 〃GenericMenu〃; 
jjhouricon ICON DISCARDABLE 〃jjhour。ico〃 
wc。lpszClassName = 〃Generic〃; 菜单(menu) GenericMenu MENU DISCARDABLE 
BEGIN 
RegisterClass(&wc); POPUP 〃&File〃 GENERIC。RC 
GENERIC。RC 
窗口类別名称 。。。 
HWND hWnd; 
POPUP 〃&Edit〃 
菜单(menu) 
hWnd = CreateWindow( 。。。 
〃Generic〃;
小说推荐
返回首页返回目录