C++学习.docx

上传人:b****5 文档编号:12327889 上传时间:2023-04-18 格式:DOCX 页数:11 大小:21.06KB
下载 相关 举报
C++学习.docx_第1页
第1页 / 共11页
C++学习.docx_第2页
第2页 / 共11页
C++学习.docx_第3页
第3页 / 共11页
C++学习.docx_第4页
第4页 / 共11页
C++学习.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C++学习.docx

《C++学习.docx》由会员分享,可在线阅读,更多相关《C++学习.docx(11页珍藏版)》请在冰豆网上搜索。

C++学习.docx

C++学习

CWND窗口类

2011-03-2214:

56

‍CDialog的成员函数:

1、构造函数:

 

CDialog(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL);

CDialog(UINTnIDTemplate,CWnd*pParentWnd=NULL);

CDialog();

CDialog重载了三个构造函数。

其中,第三个是缺省构造函数;第一个和第二个构造函数从指定的对话框模板资源创建,pParentWnd指定了父窗口或所属窗口,若空则设置父窗口为应用程序主窗口。

 

2、初始化函数

 

BOOLCreate(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL);

BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);

BOOLCreateIndirect(LPCDLGTEMPLATElpDialogTemplate,CWnd*pParentWnd=NULL);

BOOLCreateIndirect(HGLOBALhDialogTemplate,CWnd*pParentWnd=NULL);

BOOLInitModalIndirect(LPCDLGTEMPLATElpDialogTemplate,CWnd*pParentWnd=NULL);

BOOLInitModalIndirect(HGLOBALhDialogTemplate,CWnd*pParentWnd=NULL);

Create用来根据模板创建无模式对话框;CreateInDirect用来根据内存中的模板创建无模式对话框;InitModalIndirect用来根据内存中的模板创建模式对话框。

它们都提供了两个重载版本。

 

3、对话框操作函数

 

voidMapDialogRect(LPRECTlpRect)const;

voidNextDlgCtrl()const;

voidPrevDlgCtrl()const;

voidGotoDlgCtrl(CWnd*pWndCtrl);

voidSetDefID(UINTnID);

voidSetHelpID(UINTnIDR);

voidEndDialog(intnResult);

 

4、虚拟函数virtualintDoModal();

virtualBOOLOnInitDialog();

virtualvoidOnSetFont(CFont*pFont);

virtualvoidOnOK();

virtualvoidOnCancel();

 

5、用来管理对话框控件的CWnd成员函数

CheckDlgButton选中或不选中按钮控件。

CheckRadioButton选择一个指定的单选按钮并使同组内的其它单选按钮不被选择。

DlgDirList往一个列表框中添加文件、目录或驱动器的列表。

DlgDirListComboBox往一个组合框中的列表框内添加文件、目录或驱动器的列表。

DlgDirSelect从一个列表框中获得当前选择的文件、目录或驱动器。

DlgDirSelectBomboBox从一个组合框中获得当前选择的文件、目录或驱动器。

GetCheckedRadioButton返回指定的单选按钮组中被选择的单选按钮的ID。

GetDlgItem返回一个指向一给定的控件的临时对象的指针。

GetDlgItemInt返回在一个指定的控件中由正文表示的数字值。

GetDlgItemText获得在一个控件内显示的正文。

GetNextDlgGroupItem返回一个指向一组控件内的下一个或上一个控件的临时对象的指针。

GetNextDlgTabItem返回下一个tab顺序的控件的临时对象的指针。

IsDlgButtonChecked返回一个按钮控件的状态。

SendDlgItemMessage把一个消息传送给一个控件。

SetDlgItemInt将一个整数转换为正文,并将此正文赋给控件。

SetDlgItemText设置一个控件显示的正文。

CWinThread:

:

m_pMainWnd:

保存指向应用程序的主窗口指针。

CWinThread:

:

GetMainWnd:

查询指向线程主窗口的指针。

CWinThread:

:

InitInstance:

重载以实现线程实例的初始化。

AfxGetApp:

获得指向CWinApp对象的指针。

AfxGetInstanceHandle:

获得当前应用程序实例的句柄。

AfxGetResourceHandle:

获得应用程序资源的句柄。

AfxGetAppName:

获得一个字符串指针,其中包含了应用程序的名字。

另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

CDocument:

:

IsModified:

标识文档从最近一次保存以来是否被修改过。

CDocument:

:

UpdateAllViews:

通知所有视图文档已被修改的消息。

CWnd:

:

m_hWnd:

指明与这个CWnd对象相关联的HWND句柄。

CWnd:

:

Create:

创建并初始化与CWnd对象相关联的子窗口。

CWnd:

:

PreCreateWindow:

在与CWnd对象相关联的窗口被创建之前调用。

CWnd:

:

IsWindowEnabled:

确定一个窗口是否允许鼠标和键盘输入。

CWnd:

:

EnableWindow:

允许或禁止鼠标和键盘输入。

CWnd:

:

SetWindowPos:

改变子窗口、弹出窗口和顶层窗口的大小、位置以及顺序。

CWnd:

:

GetDlgItem:

获得指定的对话框中具有指定ID的控件。

CWnd:

:

UpdateData:

初始化对话框或获得对话框中的数据。

CWnd:

:

GetWindowRect:

获得CWnd的屏幕坐标。

CWnd:

:

GetDC:

获得客户区的设备环境。

CWnd:

:

RedrawWindow:

更新客户区中的指定矩形或区域。

CWnd:

:

UpdateWindow:

更新客户区。

CWnd:

:

Invalidate:

使整个客户区无效。

CWnd:

:

ShowWindow:

显示或隐藏窗口。

CWnd:

:

ClientToScreen:

将给定点或显示器上矩形的客户区坐标转换为屏幕坐标。

CWnd:

:

ScreenToClient:

将给定点或显示器上矩形的屏幕坐标转换为客户坐标。

CWnd:

:

SetWindowText:

将窗口的文本或标题文字(如果有)设为指定的文本。

CWnd:

:

SetFont:

设置当前字体。

CWnd:

:

GetDlgItemInt:

将给定对话框中控件的文本转换为整数。

CWnd:

:

SetTimer:

安装一个系统定时器,当它被激活时,发送一个WM_TIMER消息。

CWnd:

:

KillTimer:

销毁一个系统定时器。

CWnd:

:

FlashWindow:

使窗口闪烁一次。

CWnd:

:

MessageBox:

创建并显示一个窗口,其中包含了应用程序提供的消息和标题。

 

MFC

窗口:

 重叠窗口(Overlapped),弹出窗口(Popup),子窗口(Child)

 

 MFC窗口不对窗口进行直接的控制,而在API环境中却是可以的。

如果不能在API环境中实现某项功能,那么

 肯定也不能在MFC环境中实现。

举例来说,MFC库的CWnd可以创建一个窗口,但它只是过去在API环境中使用

 API调用的封装。

 

 创建MFC窗口是复杂的,首先,创建类CWnd的一个实例,然后调用类CWnd的一个成员函数,该成员函数调用

 API中的CreateWindow()函数。

返回的窗口句柄保存在类CWnd的成员变量m_hWnd中

 

 注:

因为窗口在内存中创建,而内存经常发生变化,窗口地址可能是经常变化的。

因此,窗口句柄并非直接

 指向窗口对象,而是指向跟踪窗口对象地址的另一个指针。

 

 销毁窗口同样复杂,必须确保销毁了该窗口对象,以及封装该窗口对像的CWnd实例。

 

怎样应用MFC创建一个窗口:

CWndwnd

BOOLb=wnd.CreateEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,parent,Menu,param);

第一行代码创建了一个CWnd类的对象,第二行通过调用WindowsAPI函数CreateWindowEx创建了真正的

窗口。

HWNDhwnd=:

:

CreateWindowEx(Exstyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,

                          meun,instance,Param);

                          

     因为CWnd类只是封装了用于创建窗口的WindowAPI函数(CreateWindowEx()),因此,从本质上讲,

     创建窗口所必须的参数在API环境和MFC环境中是相同的;

     

     参数style和Exstyle决定窗口的"外观"和类型(重叠,弹出,子窗口).

     参数ClassName决定在创建窗口时使用的窗口类

     参数WindowName决定窗口标题内容

     参数x,y,Width,Height决定窗口的位置的大小.

     参数parent指向拥有该窗口的窗口指针

     参数Menu指向内存中的一个对象,作为它的菜单使用----除非创建一个子窗口,如果是这样的话

              ,那么该参数是帮助父窗口识别子窗口的IDnumber

     参数Instance识别该窗口属于哪个应用程序,以便发送到该窗口的消息能被发送到正确的应用程序

                  的消息队列中。

CWnd类填入Instance参数

     参数param是在创建窗口时由窗口类使用的指针,该指针是指向附加信息的非强制性结构指针

     返回的hwnd参数是指向创建的窗口对象的指针,但在未创建任何窗口时,该窗口数返回值为NULL

     窗口句柄自动地保存在CWnd类的m_hWnd成员变量中.

     

      参数规则:

      a.窗口名称参数

        该参数是一个零结尾的文本串,用该串指明在窗口标题栏中显示的内容。

如果窗口没有标题

        栏,该参数可以为0

          然而,某些通过控件也使用该参数。

例如,按钮控件把该参数的内容放在按钮的表面。

          创建窗口标题栏后,可以用类CWnd的成员函数SetWindowText(),来改变窗口标题栏的名

          称.

      b.风格和扩展风格参数

        这两个是32位的参数,用来指定创建什么类型的窗口。

可以选择多种类型,如下面的例子所示:

        .WS_CHILD|WS_VISIBLE

          

          窗口风格参数的作用包括:

          

              用于创建三种基本窗口类的风格,用WM_CHILD创建一个子窗口;用WM_POPUP创建一个弹出

              窗口,WM_OVERLAPPED创建一个重叠窗口。

如果不为窗口指定任何一种风格,那么窗口风格

              默认为WM_OVERLAPPED.

              

              用以增添窗口的非客户区特色的风格。

例如可用WS_VSCROOLL窗口添加一个垂直滚动条.

              

              由每个通用控件定义的风格。

例如,BS_FLAT按钮风格告诉按钮控件绘制一个二维按钮

              

              用来标识控件组起始控件的风格,或者当用户敲击Tab键控制焦点在窗口中变化时,用

              来指示哪个控件有资格获得输入焦点的风格.

              

              在创建窗口以后,可以用CWnd的成员函数ModifyStyle()和ModifyStyleEx()改变窗口

              风格。

某些风格可能要求重画窗口,这时,可以给ModifySytle()函数添加三第三个参

              数,自动激发类CWnd成员函数SetWindowPos()做重画工作。

              

              CWndwnd;

              wnd.ModifyStyle(0,WS_BORDER,SWP_NOZORDER);

              

    事实上,给MOdifyStyle()或给MOdifyStyleEx()添加任何第三个参数,都要添加下面

    的SetWindowpos()选项:

SWP_NOZORDER,SWP_NOMOVE,SWP_NOACTIVATE,SWP_SHOW.

  

  c.X和Y位置参数

  

             这是两个32位的参数,用于以象素为单位指定窗口的位置。

创建重叠窗口和弹出窗口时,

             X和Y是相对于桌面窗口左上角的位置。

而创建子窗口时,X和Y是相对于父窗口客户区的左

             上角位置。

如果把X和Y参数都设置为CW_USEDEFAULT,那么系统将自动为窗口选定一个位置。

             

             然而,如果X和Y参数都设置为CW_USEDEFFAULT,那么子窗口在创建的时候,总被创建在

             (0,0)的位置

             创建窗口以后,可以用类CWnd的成员函数MoveWindow()移动窗口

             

          d.宽度和高度参数

           

             这是两个32位的参数,用于以像素为单位指定窗口的大小。

如果将参数Width和Heihght都

             设置为CW_USEDEFAULT,则系统将根据桌面窗口的大小,自动选定窗口的大小。

然而,对于

             一个子窗口来说,系统系统将创建一个长和宽为0的窗口。

如果窗口的风格是WS_MINIMIZE

             或WS_MAXIMIZE,那么系统将忽视用户为Width和Height设置的任何值。

             创建窗口以后,可以用类CWnd的成员函数MoveWindow()重新设置窗口的大小。

             

          e.Z_Order

          

             当几个窗口占据屏幕上同一区域时,Z_Order决定哪个窗口显示在哪个窗口之上。

             创建窗口后,可以用CWnd的成员函数SetWindowPos()改变窗口Z的顺序

             

          f.父窗口或物主窗口参数

           

            该参数是指向类CWnd对象的指针,根据创建的窗口类型标识是父窗口还是物主窗口。

            

            如果创建的是一个子窗口,那么用该参数来标识它的父窗口,该值不能为NULL。

            窗口只能出现在它的父窗口里面,当父窗口被销毁时它他们也被销毁;物主窗口最

            小化时,则从属窗口被隐藏;但当物主窗口被隐藏时,从属窗口并不被隐藏

      

     怎么使用MFC销毁一个窗口

     

          删除一个MFC窗口可能有些烦琐,必须按下面的顺序删除两个对象:

          pWnd->DestroyWindow();//destroyswindowObject

          deletepWnd;         //destroysCwndObject

          

             也可以只删除CWnd对象,因为DestroyWindow()是从CWnd的析构函中调用中,但不提倡

             使用这种方法。

销毁一个窗口而不先调用DestroyWindow()函数,将使某些析构消息不能

             被任何从CWnd派生的类处理。

你几乎不需自己销毁一个窗口,用户或系统通常会做这项

             工作。

如果需要在销毁窗口的同时销毁CWnd对象,则应该在CWnd的派生类中添加下面的

             重载函数:

                      CYourWnd:

:

PostNcDestroy()

                      {

      deletethis;

                      }      

              PostNcDestroy()是销毁窗口前调用的最后一个成员函数。

但是,几乎不需要对该函数

              进行重载,因为CWnd和派生类一般是嵌在另一个类中或建立在堆栈中的.

              

        捆绑到一个已有的窗口

        

            如果一个窗口是用WindowsAPI在应用程序建立之前或外面创建的,并且需要把它封装到CWnd

            类中,可以用下面的语句实现:

             CWndwnd;

             wnd.Attach(hwnd);

             这里的hwnd是已有窗口的句柄。

Attach()只是把CWnd的成员变量m_hWnd赋给hwnd.

             

             也可以使用CWnd:

:

Fromhandle(hwnd),它查看是否有CWnd对象已经封装了该窗口句柄并

             返回该CWnd对象的指针。

如果不存在这样的CWnd对象,将创建一个临时对象。

如果是临时

             对象,则不要使用该指针,因为在应用程序空闲的时候,该指针指向的对象将被删除。

       

       窗口类:

       

          一个窗口类不是一个C++类,而是早于并存在C++之外的窗口专用的类。

窗口类的作用就像一个

          模板,可以由此创建其它窗口,并可以共享某些特征,包括下面所示的特征:

          

          类风格       包括能给予窗口的一些微小的特征

          类图标       如果窗口有图标,用它来指定窗口中显示的菜单

          类菜单       如果窗口有菜单,用它来指定窗口中显示的菜单

          类光标       当光标通过窗口的客户区时,用它来指定显示哪种鼠标形状

          背景色       定义用什么颜色来擦除窗口的背景色。

窗口的客户区将显示该颜色

          窗口进程     定义处理任何发送到该窗口的消息时应该调用的函数。

定义窗口进程

                         可能是类唯一最重要的前提

                         

          窗口进程:

          

                    窗口与环境的交互是通过发送的接收消息实现的。

如果系统要求窗口自己进行绘制

                    ,系统给它发送一个WM_PAINT消息;如果系统要求窗口销毁自己,则发送一个WM_

                    DESTROY消息。

这些消息都由窗口的窗口进程处理,该窗口进程的地址在窗口类中

                    定义。

对于发送到由相同的窗口类创建的窗口的消息,系统采用完全相同的窗口进

                    程进行处理。

                    

         怎样使用MFC创建一个窗口类:

         

                  当用户创建一个窗口类时,实际上只是在三个操作系统列表之一中注册一个WNDCLASS

                  结构。

系统为每个窗口类类型维护一个列表:

                  

                  系统全局类(SystemGlobalClass)在系统启动时注册,且必须注册,对所有应用程序

                  都有效

                   

                  系统程序全局类(ApplicationGlobalClass)由应用程序注册,只对应用程序及应用

                  程序的线程有效

                  

                  应用程序局部类(ApplicationLocalClass)由应用程序注册,并只对注册它们的应用

                  程序或DLL有效

                  

                  当系统搜索一个窗口类时,从应用程序局部类开始,然后搜索应用程序全局类,最后

                  搜索系统全局类

                  

                  

                     要创建一个窗口类,可以及先创建WNDCLASS结构的实例,然后用MFC类库的

                     AfxRegisterClass()注册它。

也可以用MFC类库的AfxRegisterWndClass()来创建一个

                     基于调用参数的WNDCLASS对象

                 

   使用AfxRegisterWndClass()函数注册一个窗口类:

   

       AfxRegisterWndClass()函数在使用上是非常自动化的,一些通常需要你提供的参数都能自己

       填入,甚至连新的窗口类的名字也能自动产生。

       

       LPCTSTRlpszClassName=AfxRegisterWndClas

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1