⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电子书籍笔记.txt

📁 vc mfc 编程实例 如何创建一个窗口、销毁一个窗口和控制windows操作系统与窗口的通信问题
💻 TXT
字号:
VC++学习基础知识
第一部分窗口
学习重点:如何创建一个窗口、销毁一个窗口和控制windows操作系统与窗口的通信问题

基本类型 : overlapped重叠窗口 popup弹出窗口 child子窗口
           客户区和非客户区
Windows操作系统提供一个扩展的应用程序接口application program interface(API)用来创建和维护窗口对象
CreateWindow()创建一个窗口对象
SetWindowLong()改变由窗口类定义的特征
MoveWindow()可以移动窗口
DestroyWindow()退出窗口

创建MFC窗口
①创建类CWnd的一个实例
②调用类CWnd的一个成员函数(该成员函数调用API中的CreatWindow()函数)
③返回的窗口句柄保存在类CWnd的成员变量m_hWnd中.


销毁窗口
①须确保销毁该窗口对象及封装该窗口对象的CWnd实例
 
第一部分

问:怎样应用MFC创建一个窗口
解答:可以用MFC的CWnd类创建一个窗口
CWnd wnd;//创建一个CWnd对象
BOOL b = wnd.CreateEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,Menu,Param);
//调用Windows API函数CreateWindowEx()创建真正的窗口
HWND hwnd=::CreateWindowEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,Menu,Param);

以下是参数说明:

  Style和ExStyle指风格和扩展风格参数32位参数
      用来指定创建什么类型的窗口
      窗口默认风格 WM_OVERLAPPED(重叠窗口)
      其它二种窗口分别如下:
           WM_CHILD创建一个子窗口    WM_POPUP创建一个弹出窗口
      可增添窗口的非客户区特色的风格:
       WS_VSCROLL为窗口添加一个垂直滚动条
       WS_HSCROLL垂直滚动条
       WS_MINIMIZEBOX最小化图标
       WS_MAXIMIZEBOX最大化图标
       WS_CAPTION 标题栏
       WS_SYSMENU系统菜单栏
       WS_VISIBLE使窗口可视
       WS_DISABLED禁止窗口输入
窗口创建后可用CWnd成员函数ModifyStyle()和ModifyStyleEx()改变窗口风格
如某些风格可能要求重画窗口,给ModifyStyle()函数添加第三个参数,自动激发类CWnd的成员
函数SetWindowPos()做重画窗口工作
示例:
  CWnd wnd;
  wnd.ModifyStyle(0,WS_BORDER,SWP_NOZORDER);
SetWindowPos()选项:SWP_NOZORDER\SWP_NOMOVE\SWP_NOACTIVATE和SWP_SHOW


ClassName创建窗口里使用的窗口类
WindowName窗口名称参数(零结尾的文本串,用该串指明在窗口标题栏中显示的内容)
亦可用CWnd成员函数SetWindowText()来改变窗口标题栏名称

x和y参数
  32位参数,用于以像素为单位指定窗口的位置.CW_USEDEFAULT

Width和Height参数
32位参数,用于以像素为单位指定窗口的大小

父窗口或物主窗口参数(Parent)
  该参数用来指向类CWnd对象的指针,根据创建的窗口类型标识是父窗口还是物主窗口

菜单或控件ID参数(Menu)
该参数用来标识菜单(Menu)句柄或控件(Control)ID这要依赖于创建的窗口是子窗口\重叠窗口还是弹出窗口
如果创建的是一个子窗口,用该参数标识控件ID,控件ID通常用来帮助父窗口识别子窗口.
该参数对示一个HMENU变量.示例:(HMENU)102
如果创建的是一个重叠窗口或弹出窗口,用该参数定窗口的菜单
亦可加载一个菜单:
  HMENU hMenu=::LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(XX));
                             xx指应用程序资源里的菜单ID(menu ID)


第二部分销毁窗口

销毁窗口的同时销毁CWnd对象.在CWnd的派生类中添加下面的重载函数
CYourWnd::PostNcDestory()
{
delete this;
}


窗口进程
  窗口与环境的交互是通过发送和接收消息来实现的.如果系统要求窗口自己进行绘制,系统给
 它发送一个WM_PAINT消息,如系统要求窗口销毁自己则发送一个WM_DESTROY消息


怎样使用MFC创建一个窗口类
  方法1:创建一个窗口类,先创建WNDCLASS结构实例,然后用MFC类库的AfxRegisterClass()注册它
  方法2:用MFC类库的AfxRegisterWndClass()来创建一个基于调用参数的WNDCLASS对象

怎么样使用AfxRegisterWndClass()函数注册一个窗口类
略:详见P1


第二部分  基类
基类:CObject、CCmdTarget和CWnd

CObject派生出CCmdTarget类
CCmdTarget派生出CWnd类

CObject派生的类,具有在运行时获得对象大小和名字的能力.
CCmdTarget派生的类,能够处理命令消息
从CWnd派生的类,能够控制它们自已的窗口

CObject类有六个伴生宏完成,功能主要是允许CObject的派生类在运行时获取类名和对象大小,
创建一个类对象而不必知道类名,以及允许从文件设备中存取一个类的实例而不必知道类名。

下面的宏允许类的一个实例在运行时知道它的类名和对象大小:
Declare_dynamic(CYourClass)
Implement_dynamic(CYourClass,CYourBaseClass)

可以用CObject::GetRuntime()获得运行时使用这些宏的类的详情

下面的宏包括了前面两个宏的功能,但是允行在不知道类名的情况下创建一个类的实例
Declare_dyncreate(CYourClass)
Implement_dyncreate(CYourClass,CYourBaseClass)

在不知道类名的情况下可用CRuntimeClass::CreateObject()创建一个运用这些宏的类的实例

下面的宏包括了前面所有宏的功能,但是允行在不知道类名的情况下,把一个类的实例存到磁盘上
Declare_Serial(CYourClass)
Implement_Serial(CYourClass,CYourBaseClass,schema)

由CCmdTarget派生的类,可以接收和处理来自应用程序菜单或工具栏的命令消息。

CWnd的成员函数封装了WindowsAPI中负责维护和创建窗口的函数
CWnd是从CCmdTarget派生的,因此也能接收和处理命令消息

学习应用程序、框架、文档和视图类的介绍
应用程序从四个基类派生:
CWinApp 应用程序的 "应用程序类",负责初始化和运行应用程序
CFrameWnd 应用程序的“框架类”,负责显示和搜寻用户命令
CDocument 应用程序的“文档类”,负责装载和维护文档。文档可以是从文档到网络设备设置的任何内容
CView 应用程序的“视图类”,负责为文档提供一个或多个视图
对话框应用程序 ---只应用了程序类的派生类(CWinApp)
  
单文档界面应用程序--能在某个时间内装入和编辑一个文档,包含上面四个基类
 
多文档界面应用程序--一次可装载和编辑多个文档。包括四个基类,并使用了CFrameWnd的两个派生类,

即CMDIFrameWND和CMDIChildWnd


2.2.1 CWinApp(O/C/W)
应用程序类CWinApp是应用程序开始创建的第一个对象,并且是在结束前最后一个执行的对象.
对于一个对应框应用程序,应用程序类应用CDialog创建一个对话框
对于一个SDI应用程序,应用程序类创建一个或多个文档模板,然后用模板打开一个空文档.
对于一个MID应用程序,在主框架类中,应用程序类创建一个或多个文档模板.

应用程序类是由CWinApp派生的  AppWizard以CXxxApp形式进行命名




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -