MFC中的窗口

MFC

窗口:

 重叠窗口(Overlapped),弹出窗口(Popup),子窗口(Child)
 
 MFC窗口不对窗口进行直接的控制,而在API环境中却是可以的。如果不能在API环境中实现某项功能,那么
 肯定也不能在MFC环境中实现。举例来说,MFC库的CWnd可以创建一个窗口,但它只是过去在API环境中使用
 API调用的封装。
 
 创建MFC窗口是复杂的,首先,创建类CWnd的一个实例,然后调用类CWnd的一个成员函数,该成员函数调用
 API中的CreateWindow()函数。返回的窗口句柄保存在类CWnd的成员变量m_hWnd中
 
 注:因为窗口在内存中创建,而内存经常发生变化,窗口地址可能是经常变化的。因此,窗口句柄并非直接
 指向窗口对象,而是指向跟踪窗口对象地址的另一个指针。
 
 销毁窗口同样复杂,必须确保销毁了该窗口对象,以及封装该窗口对像的CWnd实例。
 
 
怎样应用MFC创建一个窗口:
CWnd wnd
BOOL b=wnd.CreateEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,parent,Menu,param);

第一行代码创建了一个CWnd类的对象,第二行通过调用Windows API函数CreateWindowEx创建了真正的
窗口。
HWND hwnd=::CreateWindowEx(Exstyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,
                           meun,instance,Param);
                          
      因为CWnd类只是封装了用于创建窗口的Window API函数(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()做重画工作。
              
               CWnd wnd;
               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)