Windows,C++编程创建窗口的过程详解

MFC创建窗口一般要经历以下四个操作步骤:

(1)   定义窗口类

主要指定窗口类的一些基本且必须指定的特征,窗口类的特征主要是由WNDCLASS结构体来定义的,

WNDCLASS的定义如下:

typedef struct _WNDCLASS {

   UINT    style;   

   WNDPROC lpfnWndProc;

   int     cbClsExtra;

   int     cbWndExtra;

   HANDLE  hInstance;

   HICON   hIcon;

   HCURSOR hCursor;

   HBRUSH  hbrBackground;

   LPCTSTR lpszMenuName;

   LPCTSTR lpszClassName;

} WNDCLASS;


(2)   注册窗口类

窗口类经过第一步后,需要调用RegisterClass函数进行注册,注册成功后就可以创建此类型的窗口。函数原型如下:

ATOM RegisterClass(
  CONST WNDCLASS *lpWndClass   // address of structure with class 
                               // data
);

(3)   创建窗口类实例

注册完窗口类过后,就可以创建窗口类的实例了,创建窗口类的实例了,函数原型如下:HWND CreateWindow(
  LPCTSTR lpClassName// pointer to registered class name
  LPCTSTR lpWindowName, // pointer to window name
  DWORD dwStyle,        // window style
  int x,                // horizontal position of window
  int y,                // vertical position of window
  int nWidth,           // window width
  int nHeight,          // window height
  HWND hWndParent,      // handle to parent or owner window
  HMENU hMenu,          // handle to menu or child-window identifier  
  HANDLE hInstance,     // handle to application instance
  LPVOID lpParam        // pointer to window-creation data
);
 

(4)   显示及更新窗口

当然创建窗口过后就可以调用ShowWindow()来显示窗口了。

函数原型如下:

BOOL ShowWindow(
  HWND hWnd,     // handle to window	处的句柄就是CreateWindow()函数的返回值
  int nCmdShow   // show state of window
);


显示窗口后紧接着要调用函数UpdateWindow()来刷新窗口,函数原型如下:

BOOL UpdateWindow(
  HWND hWnd   // handle of window ,此处的句柄就是CreateWindow()函数的返回值
 
);

到此时窗口就算创建成功了。

 

下面我用一个具体的程序来举个例子,方便大家理解: 

#include<windows.h>    //包含windows.h头文件

LRESULT CALLBACK WindowProc( HWND , UINT ,WPARAM , LPARAM ); //声明窗口函数

 

int APIENTRY WinMain(HINSTANCE hinstance ,HINSTANCE hPrevinstance , LPSTR lpcmdLine , int nCmdShow)     //MFC下的程序入口函数WinMain(),传统的dos程序是以main()作为程序入口的,这一点不同

{

                  WNDCLASSwndclass;    //定义窗口类结构体变量

                  HWNDhwnd;  //定义窗口类句柄

                  MSGmsg;        //定义消息结构体变量

 

                  wndclass.style=CS_HREDRAW|| CS_VREDRAW; //改变窗口大小则重绘

                  wndclass.lpfnWndProc=WindowProc;  //窗口函数为WindowProc()

                  wndclass.cbClsExtra=0; //窗口类无扩展

                  wndclass.cbWndExtra=0;       //窗口实例无扩展

                  wndclass.hInstance=hinstance;     //注册窗口类实例句柄

                  wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);          //使用光标箭头

                  wndclass.hCursor=LoadCursor(NULL, IDC_HELP);      //指定鼠标箭头的样式

                  wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);               //窗口背景为黑色

                  wndclass.lpszMenuName=NULL;           //窗口默认无菜单

                  wndclass.lpszClassName="Windows窗口创建";         //窗口类名为"Windows窗口创建"

 

                  if(!RegisterClass(&wndclass))         //此为注册类的函数

                          {

                                   returnfalse;    //注册不成功,返回false

                          }

 

                  //创建窗口的函数

                  hwnd=CreateWindow("Windows窗口创建" ,     //窗口类名为"Windows窗口创建"

                          "Windows窗口创建",   //窗口的名称为“Windows窗口创建”,即窗口标题栏显示的窗口名称

                          WS_OVERLAPPEDWINDOW, //重叠式窗口

                          CW_USEDEFAULT,CW_USEDEFAULT,    //窗口左上角在屏幕上的默认位置

                          CW_USEDEFAULT,CW_USEDEFAULT,    //窗口的宽度和高度

                          NULL,      //窗口无父类窗口

                          NULL,      //窗口无主菜单

                          hinstance,        //创建此窗口的实例句柄

                          NULL        //此窗口无创建参数

                  );

         ShowWindow(hwnd,nCmdShow); //显示窗口

         UpdateWindow(hwnd);          //不断的更新窗口的客户区

 

         while(GetMessage(&msg,NULL,0,0))    //捕获消息

         {

                  TranslateMessage(&msg);              //键盘消息转换

                  DispatchMessage(&msg);               //派送消息给窗口函数

         }

         returnmsg.wParam;       //返回退出值

}

 

LRESULT CALLBACK WindowProc(HWND hwnd,UINTmessage,WPARAM wParam,LPARAM lParam)               //窗口函数

{

         switch(message)

         {

                  caseWM_PAINT:             //重画窗口客户区消息处理

                          HDChdc; //定义设备句柄

                          PAINTSTRUCTps;            //定义绘图结构体变量

                          hdc=BeginPaint(hwnd,&ps);  //获取要重画的窗口的设备描述表句柄

                          TextOut(hdc,15,20,"Windows窗口创建的过程!",22);                //输出到窗口的文本

                          EndPaint(hwnd,&ps);               //结束重画

                          return0;

                  caseWM_DESTROY:               //撤销窗口消息处理

                          PostQuitMessage(0);               //产生退出程序消息WM_QUIT

                          return0; 

         }

         returnDefWindowProc(hwnd,message,wParam,lParam);

}

 总结以下,MFC创建窗口的四个步骤

(1)定义窗口类

(2)注册窗口类

(3)创建窗口类的实例

(4)显示以及更新窗口

其实这四个步骤很好理解的,打个比方吧。不合适的话还请指教:

(A.)比如我们新生入学,肯定要按照学校的录取通知书要求填写档案,这就好比定义窗口类,MFC是属于微软的一个基础类,当然我们得准守微软的规则来定义窗口类,而录取通知书是学校发的,我们也得按照学校制定的格式填写录取通知书。

(B)填写录取通知书过后我们要将通知书拿到学校去注册个人信息,这就好比我们定义了窗口类,然后要在程序中去注册窗口类。

(C)在学校注册了个人档案后,我们就属于学校的学生了,就属于学校学生的类一个实例了,这就好比我们用注册的窗口类创建了一个窗口实例。

(D)在学校期间,我们的身体状况是不断变化的,所以学校会定期给学生体检,然后存入学校的档案。这就好比窗口的不断更新,我们不断的对窗口进行操作,而窗口要接收这些消息,就要不断的更新窗口。

不知道这个比方合不合适,由于本人水平所限,如有不妥还请指正,我怕误导了读者。


下面是程序中所用到的窗口类实例的资源下载链接:

MFC创建窗口实例 - 下载频道 - CSDN.NET
http://download.csdn.net/detail/rl529014/8888867

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 概述 1.1 MFCC++ 1.2 VC++组件 1.3 安装 1.3.1 环境 1.3.2 安装过程 第2章 开发环境 2.1 主窗口 2.2 工具栏 2.2.1 Shaod工具栏 2.2.2 Build Mini-bar工具栏 2.3 菜单栏 2.3.1 File菜单 2.3.2 Edit菜单 2.3.3 View菜单 2.3.4 tasert菜单 2.3.5 Project菜单 2.3.6 Build菜单 2.3.7 Tools菜单 2.3.8 Window菜单 2. 3.9 Help菜单 2.4 工程工作区和主工作区 2.4.1 CtassView面板 2.4.2 FileView面板 2.4.3 ResourceView面板 2.4.4 主工作区 2.5 资源和资源编辑器 2.5.1 加速键编辑器 2.5.2 对话框编辑器 2.5.3 图形编辑器 2.5.4 菜单编辑器 2.5.5 字符串表编辑器 2.5.6 工具栏编辑器 2.6 版本信息编辑器 第 3章从 AppWisard开始 3.1 应用程序类型 3.2 创建简单的Windows应用程序 3.3 AppWizard——生成结果 3.3.1 分类 3.3.2 传递和接收 3.3.3 处理 3.4 实例 第4章 对话框及控件 4.1 对话框 4.1.1 组成与分类 4.1.2 CDiaiog类 4.1.3 创建对话框 4.1.4 通用对话框类 4.2 控件 4.2.1 标准Windows控件 4.2.2 其他控件 4.3 创建基于对话框的应用程序 4.4 控件栏 4.4.1 工具栏 4.4.2 状态栏 4.4.3 对话框栏 4.5 属性单、属性页和向导 4.5.1 CPropertyPage类 4.5.2 CPropertySheet类 4.5.3 创建属性单 4.5.4 创建向导 4.6 实例 第5章 文档类和视类 5.1 文档类 5.2 文档模板类 5.3 视类 5.4 文档/视结构 5.5 菜单和加速键 5.5.1 菜单 5.5.2 添加消息处理函数 5.5.3 CMenu类 5.5.4 创建快捷菜单 5.5.5 添加加速键 5.6 实例 第6章 图形处理 6.1 设备环境 6.1.1 图形设备接口 6.1.2 设备环境映射模式 6.2 设备环境类 6.2.1 基类CDC类 6.2.2 用类CPaintDC绘图 6.2.3 用类CClientDC管理客户区 6.2.4 用类CWindowDC管理框架窗口 6.2.5 具有类CMetaFileDC的Windows元文件 6.3 GDI对象 6.3.1 类型 6.3.2 构造 6.3.3 选择 6.3.4 表示和使用颜色 6.4 画笔 6.4.1 分类 6.4.2 创建CPen类对象 6.4.3 选择堆画笔 6.4.4 绘画 6.4.5 实例 6.5 画刷 6.5.1 分类 6.5.2 创建CBrush对象 6.5.3 使用逻辑画刷 6.5.4 实例 6.6 字
该书共分成15个章节,由易到难,由浅及深的介绍了MFC的功能框架和实际运用。每个知识点都有对应的代码实例。学习起来快速而不费力。更重要的是不是扫描版本。看着舒服。 目录结构如下: 目 录 译者序 前言 第一部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种类型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口类 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建一个窗口类 11 1.5.1 使用AfxRegisterWndClass () 函数注册一个窗口类 11 1.5.2 使用AfxRegisterClass ()函数 创建一个窗口类 12 1.6 怎样销毁一个MFC窗口类 14 1.7 厂商安装的窗口类 14 1.8 其他类型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 类 18 2.1 基类 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图类 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面类 22 2.3.1 通用控件类 23 2.3.2 菜单类 23 2.3.3 对话框类 24 2.3.4 控制条类 24 2.3.5 属性类 25 2.4 绘图类 25 2.4.1 设备环境类 25 2.4.2 图形对象类 25 2.5 文件类 26 2.6 数据库类 26 2.6.1 ODBC类 26 2.6.2 DAO类 27 2.7 数据集类 27 2.8 其他数据类 27 2.9 通信类 28 2.10 其他类 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送一个消息 32 3.1.1 发送一个消息 32 3.1.2 寄送一个消息 32 3.1.3 发送一个消息与寄送一个消息 的比较 32 3.2 怎样使用MFC发送一个消息 33 3.3 怎样用MFC寄送一个消息 33 3.4 三种类型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收一个寄送的消息 36 3.6 MFC怎样处理一个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 子分类和超分类 47 3.9.2 用MFC子分类窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建一个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3 处理WM_DRAWITEM 72 4.7.4 在其他时间绘图 73 4.8 小结 74 第二部分 用户界面实例 第5章 应用程序与环境 76 5.1 例1 规划MFC应用程序 76 5.2 例2 用AppWizard创建一个MFC 应用程序 79 5.3 例3 用ClassWizard创建一个类 83 5.4 例4 初始化应用程序屏幕 84 5.
C++ Windows 窗口编程的基本方法如下: 1. 引入头文件:`#include <Windows.h>` 2. 定义窗口过程窗口过程Windows 窗口程序的核心,负责处理窗口消息。定义窗口过程的语法如下: ``` LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ``` 其中,hwnd 是窗口句柄;msg 是消息类型;wParam 和 lParam 是消息参数。 3. 注册窗口类:窗口类是窗口的模板,定义窗口类的语法如下: ``` WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; // 窗口过程 wc.hInstance = hInstance; // 程序实例句柄 wc.lpszClassName = L"MyWindowClass"; // 窗口类名 RegisterClass(&wc); ``` 4. 创建窗口创建窗口的语法如下: ``` HWND hwnd = CreateWindow(L"MyWindowClass", L"窗口标题", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` 其中,第一个参数是窗口类名;第二个参数是窗口标题;第三个参数是窗口样式;第四个和第五个参数是窗口位置和大小;最后一个参数是父窗口句柄,这里设为 NULL。 5. 显示窗口:显示窗口的语法如下: ``` ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); ``` 其中,hwnd 是窗口句柄;nCmdShow 是窗口的显示方式,一般设为 SW_SHOW。 6. 处理消息:在消息循环中处理窗口消息,语法如下: ``` MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } ``` 其中,TranslateMessage 把虚拟键消息转换为字符消息,DispatchMessage 把消息派发给窗口过程处理。 以上就是 C++ Windows 窗口编程的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值