资源描述:
《自动生成与消息处理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章自动生成与消息处理本章主要介绍如何利用系统给定的程序框架进行Win32程序设计及在此基础上添加功能的方法,最后根据消息处理的新思路,进行改制,以便进一步熟悉Windows程序的消息处理机制,为学习使用MFC编程打下基础。主要内容4.1使用预定格式自动产生一个程序4.2改造程序结构修改头文件并编制相应的cpp文件4.3添加新的功能添加菜单资源并修改对话框窗口函数4.4使用model对话框4.5其他资源4.6改变消息处理方法将消息和消息处理的函数关联起来4.1使用预定格式自动产生一个程序从第3章的程序
2、中可以看出,Windows程序有很强的模块化结构特性,各种Windows应用程序之间有很多共同点。如果将这些共同点都固定下来,并使用自动编程方法加以实现,就可以省去编程人员的许多麻烦。假设在建立一个wnd4项目时,选择“Atypical"HelloWord!"application”(参见图2.1),则自动生成一个Windows程序。图4.1是其运行示意图。图4.1自动生成程序运行示意图图4.1自动生成程序运行示意图该程序不是使用WNDCLASS,而是使用WNDCLASSEX定义窗口,即WNDCLASS
3、EXwcex;WNDCLASSEX只是多了两个参数,使用方法一样。这个程序表演了使用菜单和对话框资源,回调函数的消息处理如下:switch(message){caseWM_COMMAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);//Parsethemenuselections:switch(wmId){caseIDM_ABOUT:DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);break;
4、caseIDM_EXIT:DestroyWindow(hWnd);break;default:returnDefWindowProc(hWnd,message,wParam,lParam);}break;caseWM_PAINT:hdc=BeginPaint(hWnd,&ps);//TODO:Addanydrawingcodehere...RECTrt;GetClientRect(hWnd,&rt);DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
5、EndPaint(hWnd,&ps);break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hWnd,message,wParam,lParam);}由此可见,命令在WM_COMMAND消息中,具体是哪一个命令则再次使用swich语句进行筛选。例如本程序中设计了IDM_ABOUT和IDM_EXIT两个菜单消息,前者由“Help”菜单的“About…”菜单项产生,后者由“File”菜单的“Exit”菜单项产生,在
6、resource.h中定义它们的值。程序还使用了字符串资源,如图4.2所示。如将“HelloWord!”修改为“Hello”,则窗口的输出内容为“Hello”。IDS_APP_TIFLE的内容是标题条内容“wnd4”,可以改变它的内容,例如将它的内容修改成“简单的Hello程序”。图4.2StringTable资源示意图资源文件为wnd4.rc,其中的菜单定义如下:IDC_WND4MENUDISCARDABLEBEGINPOPUP"&File"//菜单条上的File弹出菜单BEGINMENUITEM"E
7、&xit",IDM_EXIT//File菜单Exit菜单项ENDPOPUP"&Help"//菜单条上的Help弹出菜单BEGINMENUITEM"&About...",IDM_ABOUT//Help菜单About菜单项ENDEND资源文件还为对话框定义了加速键(即热键),“Alt+?”和“Alt+/”均可弹出对话框。IDC_WND4ACCELERATORSMOVEABLEPUREBEGIN"?",IDM_ABOUT,ASCII,ALT"/",IDM_ABOUT,ASCII,ALTEND这种消息的处理也很
8、简单,先判是否有加速键消息,如果有则调相应函数处理,否则继续按常规处理。while(GetMessage(&msg,NULL,0,0)){if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}注意自动增加的源文件StdAfx.cpp,它只有如下一句话:#include"stdafx.h"文件std