- 56.50 KB
- 2022-07-28 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
1、创建一个编辑框控件和两个按钮控件,它们分别是“显示字符”和“显示字符数”,在此编辑框中输入某一个字符串,单击“显示字符”按钮,在另外一个输出框中输出此字符串;单击“显示字符数”按钮,在输出框中显示该字符串的字符数。如图所示,是在上面的编辑框中输入字符串HuangWeitong后,单击“字符数”按钮,在第二个编辑框中显示字符串HuangWeitong的longWINAPIWndProc(HWNDhWnd,UINTiMessage,WPARAMwParam,LPARAMlParam){caseWM_CREATE://窗口初始化消息.hEdit1=CreateWindow("EDIT",//创建EDIT对象.NULL,//无标题.WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,130,20,300,30,hWnd,(HMENU)IDE_1,//编辑框标识hInst,NULL);hEdit2=CreateWindow("EDIT",//创建EDIT编辑框.NULL,WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,130,70,300,30,hWnd,(HMENU)IDE_2,//编辑框标识hInst,NULL);hBtn1=CreateWindow("BUTTON",//创建BUTTON对象."显示",//标题WS_CHILD|WS_VISIBLE,130,120,100,70,hWnd,(HMENU)IDB1,//标识hInst,NULL);hBtn2=CreateWindow("BUTTON",//创建BUTTON对象."字符数",//标题.WS_CHILD|WS_VISIBLE,330,120,100,70,hWnd,(HMENU)IDB2,//标识.hInst,NULL);break;caseWM_COMMAND:switch(LOWORD(wParam)){caseIDE_1:if(HIWORD(wParam)==EN_SETFOCUS)SetFocus(hEdit1);break;caseIDE_2:if(HIWORD(wParam)==EN_SETFOCUS)SetFocus(hEdit2);break;caseIDB1://单击显示按钮.iMax=GetWindowTextLength(hEdit1)+1;//得到输入字符串的长度.GetWindowText(hEdit1,cInput,iMax);//得到输入字符串SetWindowText(hEdit2,cInput);//输出.break;caseIDB2://单击字符数按钮.iMax=GetWindowTextLength(hEdit1)+1;//得到输入字符串的长度._ltoa((long)(iMax-1),cImax,10);//转化为字符.SetWindowText(hEdit2,cImax);//输出.break;}break;caseWM_DESTROY://退出.PostQuitMessage(0);break;default:return(DefWindowProc(hWnd,iMessage,wParam,lParam));}return0;}编写一个窗口应用程序,其中有一个VC菜单项,该菜单下面有“显示”、“隐藏”、“退出”选项,当选择“显示”对话框时,窗口中显示一个对话框,在对话框中显示“我们一起来学习VC++”,如图6-9所示。当选择“隐藏”选项时,对话框消失,选择“退出”选项时,退出应用程序的运行。1.#include\n2.#include"6_6.h"3.MenuMENUDISCARDABLE//定义菜单条4.{5.POPUP"文件(&F)"//定义"文件"弹出菜单6.{MENUITEM"显示",IDM_SHOW//定义"显示"菜单7.MENUITEM"隐藏",IDM_HIDE//定义"隐藏"菜单8.MENUITEMSEPARATOR//定义分割条9.MENUITEM"退出",IDM_EXIT//定义"退出"菜单10.}11.}12.ShowDIALOG50,50,100,30//定义Show对话框//样式:细实线边框,弹出式13.STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_VISIBLE.14.CAPTION""//无标题15.FONT12,“楷体”//定义对话框中的文本字体类型和大小16.{//输出字符串.-1为标识,13为X坐标,10为Y坐标,80为宽度,10为高度17.CTEXT"我们一起来学习VC++",-1,13,10,80,1018.}#include#include"6_6.h"longWINAPIWndProc(HWNDhWnd,UINTiMessage,WPARAMwParam,LPARAMlParam);BOOLCALLBACKDlgProc(HWND,UINT,WPARAM,LPARAM);//对话框处理函数HWNDhDlg;//定义对话框句柄HINSTANCEhInst;//定义应用程序实例句柄intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){…………while(GetMessage(&Message,0,0,0)){if(!IsDialogMessage(hDlg,&Message))//若是对话框消息,发往对话框处理函数{TranslateMessage(&Message);//消息循环DispatchMessage(&Message);}}returnMessage.wParam;}longWINAPIWndProc(HWNDhWnd,UINTiMessage,WPARAMwParam,LPARAMlParam){switch(iMessage){caseWM_COMMAND:switch(LOWORD(wParam)){caseIDM_SHOW://点击Show菜单hDlg=CreateDialog(hInst,"Show",hWnd,(DLGPROC)DlgProc);//显示对话框break;caseIDM_HIDE://点击Hide菜单DestroyWindow(hDlg);break;//删除对话框caseIDM_EXIT://点击Exit菜单SendMessage(hWnd,WM_DESTROY,0,0);break;//发送退出消息}break;caseWM_DESTROY://退出PostQuitMessage(0);break;default:return(DefWindowProc(hWnd,iMessage,wParam,lParam));}return0;}位图操作示例。本例调用一幅图片,并在用户窗口区上显示1.#include#include2.#include#include\n3.LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);4.HDChdc,hdcmem;//设备环境句柄和内存设备环境句柄5.HBITMAPhBm;//位图句柄6.BITMAPbm;//BITMAP结构7.intWINAPIWinMain(……,……,)8.{HWNDhwnd;MSGMsg;WNDCLASSwndclass;9.charlpszClassName[]="位图";10.charlpszTitle[]="Example_For_BitMap";11.wndclass.style=0;12.……13.wndclass.lpszClassName=lpszClassName;14.if(!RegisterClass(&wndclass))15.{MessageBeep(0);returnFALSE;}16.hwnd=CreateWindow(……,……,……);17.hBm=LoadBitmap(hInstance,"forest");//加载位图18.GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);//获取位图尺寸19.ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);20.while(GetMessage(&Msg,NULL,0,0))21.{TranslateMessage(&Msg);DispatchMessage(&Msg);}22.returnMsg.wParam;23.}LRESULTCALLBACKWndProc(……,……,……,……){PAINTSTRUCTps;switch(message){caseWM_CREATE:hdc=GetDC(hwnd);//获取设备环境hdcmem=CreateCompatibleDC(hdc);//获取内存设备环境ReleaseDC(hwnd,hdc);//释放设备环境break;caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);SelectObject(hdcmem,hBm);//将位图选入内存设备环境//调用BitBlt将内存设备环境中的位图拷贝到设备环境中BitBlt(hdc,180,80,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);EndPaint(hwnd,&ps);//释放设备环境句柄break;caseWM_DESTROY:DeleteObject(hBm);//释放位图PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,message,wParam,lParam);}return0;}第一章1、什么是WindowsSDK程序?使用SDK开发出来的Windows应用程序,叫做WindowsSDK程序2、什么是WindowsAPI函数?为了设计Windows应用程序,Windows提供了大量预定义的用C语言编写的函数5、什么是事件?试举例说明。能触发程序作出相应反映的刺激叫做事件,例如在键盘上按下一个键6、如何显示和更新窗口?调用函数ShowWindow显示窗口,调用函数UpdateWindow更新窗口7、什么是消息循环?在创建了窗口的应用程序中,应用程序将要不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列中获取消息,这个不断重复的工作过程叫做消息循环8、Windows应用程序的主函数有哪3个主要任务?注册窗口类、创建应用程序的窗口和建立消息循环(注:如果题目问有哪2个主要任务,应该答后两个)9、说明Windows应用程序的主函数,窗口函数与Windows系统之间的关系。\n主函数和窗口函数都是Windows系统调用的函数;主函数是应用程序启动后,系统首先调用的函数;窗口函数是主函数在消息循环中获得消息并把消息发送给系统之后,由系统调用函数。第二章1、在窗口类CFrameWnd中需要封装哪些成员?窗口句柄,窗口类的定义,注册窗口类,创建窗口和显示更新窗口(注:对应书上P16//窗体类的声明这一段代码)2、应用程序类CWinApp应该具备哪些主要功能?注册、创建、显示应用程序的窗口;建立消息循环3、在MFC程序设计中,如果要建立拥有自己的风格的主窗口,应该重写什么函数?在CWinApp的派生类中重写InitInstance函数4、什么是消息映射表?在MFC中,能够根据消息取得消息处理函数的表,叫做消息映射表。(我自己概括的)第三章1、CObjectistheprincipalbaseclassfortheMFCLibrary.(最“基”的一个类)2、功能:CObject类:为其派生类提供了支持序列化、调试信息、运行期类型消息等一些通用功能。CCmdTArget类:支持消息处理。CWnd类:为所有子窗口类提供通用属性和方法。CFrameWnd类:创建应用程序主窗口。CWinApp类:把程序的主函数体作为一个对象来处理。3、文档类CDocument:它的对象存储和管理应用程序的数据。视图类CView:它的主要作用是为框架窗口提供用户区显示数据以及接受应用程序用户对程序的操作,从而实现应用程序与用户的交互。框架窗口类CFrameWnd:创建应用程序窗口。应用程序类CWinApp:作为上述各类对象的容器,并实现应用程序的初始化及执行消息循环的工作。4、在文档/视图结构的应用程序中,视图类的对象是如何来获取文档类对象中的数据的?视图类的对象是通过成员函数GetDocument来访问文档类对象中的数据的。第四章1、为什么要使用DC?为了屏蔽硬件输出设备的多样性(也可以答书上P56第一句)2、MFC中CDC的派生类有哪几个?试说出它们的作用。CClientDC、CMetaFileDC、CPaintDC、CWindowDC,作用P57表4-3的说明3、如何把绘图工具载入设备描述环境?创建绘图工具的对象之后,使用CDC类的成员函数SelectObject把绘图工具载入DC第六章1、应用程序的界面有哪3种方式?单文单界面、多文档界面、基于对话框的界面2、分别说明什么是SDI界面的程序和什么是MDI界面的程序。SDI界面的程序:用户使用应用程序时,程序一次只能打开一个文档。MDI界面的程序:应用程序具有一个主窗口,用户可以在这个主窗口中打开若干个显示不同文档的小窗口。4、在应用程序框架类的PreCreateWindow函数中添加以下代码:cs.cx=200;//程序窗口的宽、高cs.cy=200;cs.x=400;//程序窗口的坐标位置cs.y=400;6、文档类的成员函数UpdateAllViews的作用是什么?通知文档所对应的所有窗口同时进行重绘7、为什么拆分窗口的显示更新必须要同步?因为应用程序的所有拆分窗口显示的应该是同一个文档,所以当文档发生变化时,该文档所对应的窗口当然要同时更新显示以正确地反映文档的内容8、什么是无效显示区?在有效提高拆分窗口显示更新效率的方法中,程序只重绘必须重绘的区域。9、让程序只重绘必须重绘的部分。第七章1、鼠标消息分为哪两类?它们之间有什么区别?鼠标消息分为两类:客户区鼠标消息和非客户区鼠标消息。区别:消息产生的区域不同。3、用手工方法在程序中添加非客户区鼠标消息的消息映射宏和对应的消息响应代码。\n4、调用CWnd*SetCapture()完成任务后及时调用ReleaseCapture()。5、一般是屏幕上位置最靠前(被激活)的窗口才能接受键盘的消息。7、键盘消息分为:一般键盘消息、系统按键消息。Alt键、Shift键、F1~F12功能键、Tab键等。第八章1、Windows应用程序中,什么样的数据称为资源?常用资源有哪些?资源:在应用程序被启动后,它们一般仍驻留在硬盘上的可执行文件中,只有当程序需要它时,才从可执行文件中读取相应的数据。常用的资源:菜单、加速键、图标、位图。2、在VisualC++中,编辑资源数据可以使用哪两种方法?使用文本编辑器或VC++的资源编辑器对资源进行编辑。3、程序运行时,用户选中一个菜单项,会发出哪种消息?根据什么来判断消息源?用户选中菜单项时,会发出WM_COMMAND消息。系统根据菜单项的标识ID来判断消息源。4、准备好ICON图表文件→在VC++中,Project|AddtoProject|Files,选择图表文件→在资源文件中添加如下描述句:程序资源的IDICON【选项】“资源文件路径”5、1)把位图资源载入位图对象;2)获得位图信息;3)把位图选入内存设备环境;4)显示位图。第九章1、什么是序列化?什么是永久性对象?序列化:就是指应用程序可以把对象的当前状态,以文件的形式写入永久性存储体中,在需要时还可以从永久性存储体中读取它,并可以在应用程序中重建对象的过程。(也可答:在面向对象理论中,能使对象成为永久性对象的机制)永久性对象:具有描述自身信息能力的类的对象。2.设计永久性类的时候必须使用哪两个宏?DECLARE_SERIAL、IMPLEMENT_SERIAL3、在声明类的时候使用MFC定义的两个宏:DECLARE_SERIAL、IMPLEMENT_SERIAL4、(待定)5、(待定)第十章1、简述在应用程序的窗口中使用一个控件的步骤。1)首先选择控件所属的类,创建该类对象;2)然后向应用程序的消息映射中添加需要的消息;3)最后实现消息响应函数。2、必须使用控件的两个样式:WS_CHILD、WS_VISIBLE3、为何创建每个控件一般都要传递this参数给Create函数?因为在一般的情况下都是为某一窗口对象创建控件,所以必须调用Create函数创建控件时,在控件的父窗口参数中要将this作为参数4、区别:标准控件能单独使用,而通用控件一般不会单独使用,需要与标准控件一起使用。(?)5.控件的标识有什么用途?一般在应用程序的什么位置创建控件?控件标识符的作用是用来区分应用程序中的不同控件。创建控件的最佳时机是在窗口建立之后,且窗口尚未显示之时,之时应用程序会发出WM_CREATE消息。因此,创建控件的代码应该编写在该消息的相应函数OnCreate中。第十一章1.什么是对话框模板资源文件?描述对话框外观的资源文件。2.用户定义的对话框类派生自哪个类?CDialog类3.通常在什么地方进行对话框的初始化?通常在CDialog类的OnInitDig函数中进行对话框的初始化。(?)4、CColorDialog、CFileDialog、CFindReplaceDialog、CFontDialog、CPrintDialog5、Windows有哪两个类对话框?它们的区别是什么?模式对话框和非模式对话框。区别:模式对话框可以垄断所有的用户消息,非模式对话框不能垄断用户消息。