Windows编程复习重点_第1页
Windows编程复习重点_第2页
Windows编程复习重点_第3页
Windows编程复习重点_第4页
Windows编程复习重点_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows编程复习知识点考试内容选择20×1′填空10×2′简答4×5′程序解释5条线×3′程序设计10′+15′知识点第一章:构架代码文件的结构应用程序类对话框类资源文件预编译文件应用程序类MFC定义了一个应用程序基类CWinApp,所有基于MFC的应用程序都会继承这个类。第二章:模态对话框当打开一个模态对话框时,用户只能与该模态对话框进行交互,而应用程序的其他界面都得不到用户输入的信息属性对话框添加资源中的三个属性页只有大小的区别,属性页只是对话框的一种形式。CProperty类是CDialog类的派生类,因而在处理属性页资源的时候完全可以把它当作对话框来处理。属性对话框制作步骤:添加3个属性页资源分别设置资源ID为IDD_PROPPAGE_1、IDD_PROPPAGE_2、IDD_PROPPAGE_3分别添加基于CPropertyPage类的CMyPage1、CMyPage2、CMyPage3类添加基于CPropertySheet类的CMySheet类在CMySheet框架中定义3个属性页CMyPage1page1;CMypage2page2;CMypage3page3;在CMySheet构造函数中添加3个属性页this->AddPage(&page1);this->AddPage(&page2);this->AddPage(&page3);显示属性对话框//定义属性对话框对象CMySheetMySheet(L”[第二章]属性对话框——多页面切换”);//显示属性对话框MySheet.DoModal();向导对话框在显示属性对话框代码的基础上代码变为://定义属性对话框对象CMySheetMySheet(L”[第二章]属性对话框——多页面切换”);//设置属性对话框为向导模型MySheet.SetWizardModel();//显示属性对话框MySheet.DoModal();为属性页添加OnSetActive重载函数在属性页框内单击右边的重载标签按钮会出现可以重载的函数列表。在CMyPage1的OnSetActive设置“下一步”按钮有效:((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_NEXT);在CMyPage2的OnSetActive设置“上一步”和“下一步”按钮有效:((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);在CMyPage3的OnSetActive设置“上一步”和“完成”按钮有效:((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);在“格式”菜单中能够实现对控件的排列操作。通用对话框代码必考第三章:列表框的制作步骤:定义列表框控件和编辑框控件变量CListBoxlist;CStringszInfo;添加对“添加”按钮的响应//检测所要添加的字符串是否为空if(this->szInfo.IsEmpty()==TRUE) this->MessageBox(L”字符串不能为空!”,L”Error”);else this->list.AddString(this->szInfo); //添加条目添加对“删除”按钮的响应//取得当前所选择的条目intnCurSel=this->list.GetCurSel();if(nCurSel==LB_ERR)this->MessageBox(L"请选择想要删除的条目!",L"Error");else this->list.DeleteString(nCurSel);添加对ListBox的更新响应voidCListBoxDlg::OnEnChangeInfo(){this->UpdateData();}组合框的模式组合框有三种模式:简易式(Simple)、下拉式(Dropdown)和下拉列表式(DropList)。组合框的使用方法设置对话框界面,组合框的样式可以通过修改控件的“Type”属性来设置。定义控件变量。CString szFruitName; //新的水果名称CString szCurName,szCurName2; //当前选择的水果名称CComboBox MyComboBox,MyComboBox2; //定义组合框对象初始化组合框设置。this->MyComboBox.AddString(L”苹果”);this->MyComboBox.AddString(L”香蕉”);this->MyComboBox.AddString(L”西瓜”);this->MyComboBox.SetCurSel(0);this->OnCbnSelchangeCombo();添加对组合框改变选择的响应。//取得组合框当前所选择的水果索引intnCurSel=this->MyComboBox.GetCurSel();if(nCurSel!=LB_ERR){ //取得当前所选择的水果名称 this->MyComboBox.GetLBText(nCurSel,this->szCurName); //更新“当前选择”中的水果名称 this->UpdateData(FALSE);}添加对“添加”按钮的响应//检测要添加的水果名称是否为空if(this->szFruitName.IsEmpty()==TRUE) this->MessageBox(L”请输入水果名称”,L”Error”);else{ //把水果名称添加到左边的组合框 this->MyComboBox.AddString(this->szFruitName); //把水果名称添加到右边的组合框 this->MyComboBox2.AddString(this->szFruitName);}进度条的使用方法设计对话框界面定义变量。BOOL bStatus; //当前状态,是否正在演示UINT nStart; //起始值UINT nEnd; //终止值UINT nStep; //步长CStringszInfo,szInfo2; //当前进度信息CProgressCtrlProgressCtrl; //采用定位方式的进度条CProgressCtrlProgressCtrl2; //采用逐步方式的进度条添加对“演示”按钮的响应。if(bStatus==TRUE){this->MessageBox(L"正在运行!",L"Error");return;}//检测输入是否合法if(this->nEnd<=this->nStart){this->MessageBox(L"输入不合法!",L"Error");return;}this->bStatus=TRUE;//设置两个进度条的范围this->ProgressCtrl.SetRange32(this->nStart,this->nEnd);this->ProgressCtrl2.SetRange32(this->nStart,this->nEnd);//设置进度为起始值this->ProgressCtrl.SetPos(this->nStart);this->ProgressCtrl2.SetPos(this->nStart);//设置步长,固定设置为100步(步长不为0)this->nStep=(this->nEnd-this->nStart)/100;if(this->nStep==0)this->nStep=1;this->ProgressCtrl2.SetStep(this->nStep);//设置记时器ID为1,每100ms触发一次this->SetTimer(1,100,NULL);添加对WM_TIMER消息的响应。//判断是否指定的记时器 if(nIDEvent==1) { //取得当前进度 intnCurPos1=this->ProgressCtrl.GetPos(); intnCurPos2=this->ProgressCtrl2.GetPos(); //如果两个进度条都执行结束,就关闭记时器 if(nCurPos1>=this->nEnd&&nCurPos2>=this->nEnd) { this->KillTimer(1); //关闭计时器 this->bStatus=FALSE; } //定位方式:每次进度增加1 if(nCurPos1<this->nEnd) this->ProgressCtrl.SetPos(nCurPos1+1); //逐步方式:每次进度增加指定的步长 if(nCurPos2<this->nEnd) this->ProgressCtrl2.StepIt(); //第一个进度条的当前信息 this->szInfo.Format(L"[定位方式]当前进度(CurPos=%d,Step=1)",nCurPos1); //第二个进度条的当前信息 this->szInfo2.Format(L"[逐步方式]当前进度(CurPos=%d,Step=%d)",nCurPos2,this->nStep); //更新显示信息 this->UpdateData(FALSE); } CDialog::OnTimer(nIDEvent);列表控件列表控件有4种呈现方式:图标视图(Iconview)、小图标视图(Smalliconview)、列表视图(Listview)、报表视图(Reportview)。列表控件的使用方法设计界面为“添加人员资料”对话框添加类CAddInfoDlg。初始化列表控件。//添加列this->list.InsertColumn(0,L"姓名", LVCFMT_CENTER,80); this->list.InsertColumn(1,L"身份证", LVCFMT_CENTER,200); this->list.InsertColumn(2,L"性别", LVCFMT_CENTER,60); this->list.InsertColumn(3,L"籍贯", LVCFMT_CENTER,80); //设置整行选择属性 this->list.SetExtendedStyle(this->list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);添加对主对话框的“添加”按钮的响应。CAddInfoDlgdlg; if(dlg.DoModal()!=IDCANCEL) { //取得列表控件中条目数量 intnItemNum=this->list.GetItemCount(); //添加人员信息到列表控件 this->list.InsertItem(nItemNum,dlg.NEW_GetName()); this->list.SetItemText(nItemNum,1,dlg.NEW_GetId()); this->list.SetItemText(nItemNum,2,dlg.NEW_GetGender()); this->list.SetItemText(nItemNum,3,dlg.NEW_GetAddr()); }添加对主对话框的“删除”按钮的响应//取得当前所选择的条目索引 intnCurSel=this->list.GetNextItem(-1,LVNI_SELECTED); if(nCurSel!=-1) this->list.DeleteItem(nCurSel);第四章:文档视图结构是使用MFC开发基于文档的应用程序的基本框架,最主要的思想是数据的管理与显示分离。一个文档可以对应于多个视图,而一个视图只能唯一对应一个文档。MFC的CView类是所有视图的基类,主要有两大功能:将与其相关联的文档的数据呈现给用户。接受用户对数据的修改,并反馈给文档。在文档/视图体系中,文档负责数据的管理,视图负责数据的显示,框架窗口则负责管理这些界面。第五章:在MFC中使用GDI绘图操作一般会涉及两类对象,一是设备上下文对象,包括CDC及其派生类;二是GDI对象,包括CFont、CBrush、CPen等。MFC把不同的上下文对象用不同的类进行了封装,如下所示:(所有红框内的基类)GDI对象主要包含以下几种:(所有GDI对象)GDI绘图过程中出现抖动现象的原因和解决办法:画刷是一个像素大小为8*8的位图,用对个相同的位图对封闭图形的内部进行填充。位图是描述图像的最简单直观的一种方式,把图像横向分为等间距的W列,纵向分为等间距的H列。于是这个图像的大小就被定义为分辨率W*H。解决抖动现象的方法:第六章:键盘上的每一个键都对应一个唯一的扫描码。四种基本的键盘消息:一般情况下,在应用程序中响应键盘消息有两种方式:响应本进程的键盘消息;响应系统的键盘消息。指定组合键有两种方法可以很方便地实现模拟键盘消息:使用PostMessage消息发送WM_KEYDOWN;使用keybd_board模拟键盘事件。SendMessage与PostMessage的区别:第十二章:进程是一个正在运行的程序实例,由两部分组成:一个操作系统用来管理进程的内核对象;创建时系统所分配的资源,主要是内存地址空间。进程的特点每个进程运行在一个独立的虚拟地址空间,各个进程之间不可直接通信或者修改数据。(可间接通信)这可避免应用程序之间相互干扰的问题,要实现进程之间的通信就需要使用操作系统所提供的一些合法途径。进程地址空间作为一个载体,包含进程的所有数据和代码以及堆和栈,为线程运行提供了保障。进程是静态的,其本身并不能执行。进程并不能脱离线程而存在。运用win32API实现进程的创建:BOOLCreatProcess( LPCTSTRlpApplicationName, LPTSTRlpCommandLine, LPSECURITY_ATTRIBUTESlpProcessAttributes, LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTUPINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation};线程和进程一样也由两部分组成:线程内核对象——每个线程都有一个与之对应的内核对象,这也是内核在创建线程时所分配的。线程堆栈——用来维护线程在执行代码时所需要的函数参数和局部变量。线程的特点:线程是动态的,可执行的。线程总是在某个进程的环境中创建的。当一个进程中有多个线程在运行时,这些线程则共享进程的地址空间,可以操作相同的数据,使用相同的资源,共享进程内的内核对象句柄。注:创建线程时,系统首先会创建一个线程内核对象,通过这个内核对象可以实现对线程的管理;系统从进程的地址空间中分配内存作为线程的堆栈空间。创建线程函数定义如下:HANDLECreateThread( LPSECURTY_ATTRUBUTESlpThreadAtteibutes, SIZE_TdwStackSize, LPTHREAD_START_ROUTINElpStartAddress, LPVOIDlpParameter, DWORDdwCreationFlags, LPDWORDlpThreadId);第十三章:所谓“页”,只是操作系统为了更好地管理地址空间所产生的一个逻辑上的概念,把一个固定长度的地址空间作为一个页(通常为4KB)。系统在对地址空间进行管理时,把每4KB的空间作为一个单位。最终形成内存管理的多级索引结构。虚拟内存页有3种基本的状态:空闲:地址空间没有被占用,不能使用;保留:地址空间已被占用,但还没有与物理存储器相关联,不能使用;提交:地址空间已被占用,且已与物理存储器相关联,可以使用堆栈的定义及优缺点:堆栈可以用来分配许多较小的数据块,例如对链接表和链接树进行管理等。堆栈的优点:可以不考虑分配粒度和页面边界之类的问题。堆栈的缺点:分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收。内存映射文件的原理及内存映射文件与虚拟内存的关系内存映射文件可在内存中保留一个地址空间区域,并把磁盘文件提交给该区域。一旦映射成功,就可在内存中直接操作文件,而不再需要使用ReadFile,WriteFile等文件操作的API。与虚拟内存一样:内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。他们之间的区别是:物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件。一旦该文件被映射,就可以访问它,就像整个文件被加载到了内存一样。第十四章:管道和邮槽进程间通信的三种基本方法:匿名管道;命名管道;邮槽。使用CreatePipe函数创建匿名管道:BOOLCreatePipe( PHNADLE hReadPipe, //管道读取端句柄 PHANDLEhWritePipe, //管道写入端句柄 LPSECURITY_ATTRIBUTESlpPipeAttributes //安全描述符 DWORDnSize //缓存大小匿名管道:定义:匿名管道是基于字符和半双工的(即单向),一般用于程序输入输出的重定向。使用:如果需要获取一个基于控制台窗口应用程序的输出,此时就可以使用匿名管道。命名管道:命名管道是双向的,进程间可以使用同一管道进行交互;命名管道不但可以面向字节流,还可以面向信息,所以读取进程可以读取写进程发送到不同长度的信息;多个独立的管道实例可以用一个名称来命名。命名管道可以用于网络间两个进程的通信,而其实现的过程与本地进程通信完全一致。邮槽:邮槽是实现单通道的进程间通信方式。创建邮槽的进程为邮槽服务器,向邮槽发送消息进程为邮槽客户端。邮槽客户端能发送消息给本机的邮槽,也可以发送消息给局域网内其他计算机内的邮槽。创建命名管道使用CreateNamedPipe函数,创建成果后,服务器使用ConnectNamedPipe函数等待管道客户端的连接。创建邮槽使用CreateMailslot函数,从邮槽读取消息使用ReadFile函数,在这之前调用GetMailslotInfo函数查询当前邮槽状态。第十六章:动态连接库(DLL,DynamicLinkLibrary)是Windows操作系统的基础,所有的API函数都包含在DLL中。DLL是一个可以执行的并可以被多个Windows应用程序共享的程序模块(称为Module),模块中包含了一些可以被多个Windows应用程序或DLL共享的代码、数据和资源。动态连接库文件的扩展名一般是dll,也有可能是drv,sys和fon(它们分别对应的是设备驱动文件、系统文件和字体资源文件)。DLL特性:DLL中存放的一般是一些公共的子程序段或各种资源和数据.一个最大的特点:可以实现应用程序本地化.如在DLL中封装了各种语言,在安装时进行适当的选择就能实现本地化.DLL的最大特性是支持动态载入,即:应用程序在运动时根据所需要的功能加载对应的DLL,而在不需要该功能的时候,又可以卸载这个DLL。一个应用程序和函数的链接方式有两种:动态链接:在应用程序中不需要包含所要调用函数的代码,而只需要所调DLL函数的一些信息,如DLL位置及相应的函数名。与函数的链接到编译或运行时进行。静态链接:应用程序必须从静态链接库中取得所需调用函数的代码,并把这些代码放在应用程序的可执行代码中。如一般的库函数调用则属此类。与隐式链接相比,显式加载DLL主要有以下几个特性:显式加载的DLL并不会在应用程序初始化时就加载,而是在运行时根据需要调用LoadLibrary或LoadLibraryEx函数来加载;在应用程序输入表中没有记录;隐式链接的前提是需要有DLL所对应的lib文件,如果没有lib文件就无法进行隐式链接,而显式加载就没有这个限制。隐式链接与显式链接的原理与比较隐式链接DLL原理:先说明DLL的导入库文件(lib),因在库文件中包含了一系列指向动态链接库的指针.应用程序通过库文件和DLL链接,调用DLL中的函数.显式链接DLL原理:应用程序在运行时通过函数调用来显式装载和卸载DLL,并通过函数指针来调用DLL的导出函数,这种方式主要用于灵活控制DLL库动态装入和装出的场合.显式方式不仅灵活,而且较为安全。缺陷是:若DLL文件较大,且引入时为首次引导加载,则影响运行速度。DllMain函数是DLL的可选入口点;WinMain函数是windows程序的入口点函数。线程本地存储器(TLS)的主要作用是:可以避免多个线程同时访问同一个全局或静态变量时所导致的冲突。使用TLS机制,为每一个使用这个全局或静态变量的线程都提供一个变量副本,所有线程都只改变自己的副本,并不影响其他线程。结构化异常处理(SEH,StructuredExceptionHandling)是被作为一种系统机制引入到操作系统中的,跟开发工具和使用的语言无关。把程序中所可能出现的异常进行统一的处理,使得程序显得更加简洁且增加可读性。结构化异常处理有三种基本的使用方式:结束异常程序;异常处理程序;顶层异常处理。第十八章:可执行文件格式(PE,ProtableExecutable)是微软制定的一种文件标准,是Win32环境自身所带的执行文件格式。在Windows操作系统中扮演非常重要的角色,其格式中的数据结构通常定义在winnt.h中。

程序设计题涉及的源代码属性对话框//CMySheet.hprivate:CMyPage1page1;CMyPage2page2; CMyPage3page3;//CMySheet.cppCMySheet::CMySheet(UINTnIDCaption,CWnd*pParentWnd,UINTiSelectPage) :CPropertySheet(nIDCaption,pParentWnd,iSelectPage){ this->AddPage(&page1); this->AddPage(&page2); this->AddPage(&page3);}CMySheet::CMySheet(LPCTSTRpszCaption,CWnd*pParentWnd,UINTiSelectPage) :CPropertySheet(pszCaption,pParentWnd,iSelectPage){ this->AddPage(&page1); this->AddPage(&page2); this->AddPa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论