C++Windows编程之创建窗口

Windows编程之注册窗口类 介绍了 注册窗口类。接下来就是创建窗体。 
     我们用Visual Studio创建一个win32项目上会自动生成一个创建窗体函数。如下: 
//
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // 将实例句柄存储在全局变量中

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}
下面一句一句解释: 
HWND hWnd; 
      h 是类型描述,表示句柄, Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄  。 通俗地说,如果把一个到处跑的人当作指针的话,那么HWND就是该人的身份证----我想应该是身份证号码 
  
hInst是项目自动生成的一个全局变量,代码如下: HINSTANCE hInst; // 当前实例所以这句话的意识就是将实例句柄存储在全局变量中。 
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 
 CreateWindow函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。函数原型为:
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam);

风   格    宏 解    释
WS_border 单线边框
WS_caption 有标题框的窗口(包括WS_BODER风格)
WS_popup 作为一个弹出式窗口
WS_child 作为子窗体(与WS_popup互斥)
WS_disabled 窗口不能初始化,并且屏蔽与用户的交互
WS_dlgframe 窗口的外观类似与对话框
WS_group 作为窗体的控件,可以与其他控件组合
WS_hscroll 窗口具有水平滚动条
WS_vscroll 窗口具有垂直滚动条
WS_maximize 初始状态为最大化的窗口
WS_maximizebox 窗口右上角有一个最大化按钮
WS_minimize 初始状态为最小化的窗口
WS_minimizebox 窗口右上角有一个最小化按钮
WS_overlappedwindow 这是一个宏组合。为了方便书写,它等价于WS_overlapped|WS_caption|WS_sysmenu|WS_thickframe|WS_minimizebox|WS_maximizebox
WS_overlapped 边框重叠的窗口
WS_sizebox 窗口的边框可以变化
WS_sysmenu 在窗口的标题栏的最左上角有一个窗口菜单
WS_tabstop 窗口作为控件,并且交互可以停留在这个控件上
WS_visible 窗口建立的初始状态是可见的
x,y,nWidth,nHeight 制定了窗口的位置和大小,x和y指定初始左定点坐标,nWidth和nHeight指定宽度和高度。  hWndParent 指向被创建窗口的父窗口或所有者窗口的句柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗口是可选的。  hMenu 菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。  hInstance 在早期的操作系统中,如Windows 95/98/Me,该参数指定与窗口相关的模块实例的句柄,而在较新的操作系统中,如Windows NT/2000/XP/7,可以不理睬该参数。  lpPraram 指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
if (!hWnd)
   {
      return FALSE;
   }
如果创建  窗口句柄 失败,则返回错误 
ShowWindow(hWnd, nCmdShow);
显示窗体,ShowWindow函数的原型为BOOL ShowWindow(HWND hWnd,int nCmdShow);第一个参数指定要显示窗口的句柄,第二个参数指定窗口的显示方式,如果加载应用程序提供了STARTUPINFO结构,则应用第一次调用ShowWindow函数时不理财该参数;否则,应用第一次调用ShowWindow函数时从WinMain函数的nCmdShow参数中获取实际值。在后续的函数调用中,nCmdShow的值可以说下表中的任意一个。 

UpdateWindow(hWnd);
如果窗口更新的区域不为空,UpdateWindow函数通过发送一个WM_PAINT消息来更新指定窗口的客户区。函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。(表中风格宏都应为大写,为方便阅读,我使用小写,写程序是须使用大写) 
显   示    宏 结    果
SW_forceminimize 在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数
SW_hide 隐藏窗口并激活其他窗口
SW_mazimize 最大化指定的窗口
SW_minimize 最小化指定的窗口。
SW_restore 激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志
SW_show 在窗口原来的位置以原来的尺寸激活和显示窗口
SW_showdefault 依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_showmaximized 激活窗口并将其最大化
SW_showminimized 激活窗口并将其最小化
SW_showminnoactive 窗口最小化,并不激活窗口,但激活窗口仍然维持激活状态
SW_showna 以窗口原来的状态显示窗口,激活窗口仍然维持激活状态
SW_shownoactivate 以窗口最近一次的大小和状态显示窗口,激活窗口仍然维持激活状态
SW_shownormal 激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 窗口编程的基本方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值