C++Windows编程之创建窗口

Windows编程之注册窗口类介绍了注册窗口类。接下来就是创建窗体。
    我们用Visual Studio创建一个win32项目上会自动生成一个创建窗体函数。如下:

[cpp] 
view plain
copy

  1. <  
  2. //   函数: InitInstance(HINSTANCE, int)  
  3. //  
  4. //   目的: 保存实例句柄并创建主窗口  
  5. //  
  6. //   注释:  
  7. //  
  8. //        在此函数中,我们在全局变量中保存实例句柄并  
  9. //        创建和显示主程序窗口。  
  10. //  
  11. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  
  12. {  
  13.    HWND hWnd;  
  14.   
  15.    hInst = hInstance; // 将实例句柄存储在全局变量中  
  16.   
  17.    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,  
  18.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);  
  19.   
  20.    if (!hWnd)  
  21.    {  
  22.       return FALSE;  
  23.    }  
  24.   
  25.    ShowWindow(hWnd, nCmdShow);  
  26.    UpdateWindow(hWnd);  
  27.   
  28.    return TRUE;  
  29. }  

下面一句一句解释:

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函数。函数原型为:
[cpp] 
view plain
copy

  1.  HWND CreateWindow(  
  2. LPCTSTR lpClassName,  
  3. LPCTSTR lpWindowName,  
  4. DWORD dwStyle,  
  5. int x,  
  6. int y,  
  7. int nWidth,  
  8. int nHeight,  
  9. HWND hWndParent,  
  10. HMENU hMenu,  
  11. HANDLE hlnstance,  
  12. LPVOID lpParam);  

lpClassName
指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。

lpWindowName
指向一个指定窗口名的空结束的字符串指针。如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。

dwExstyle
指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义如下表:

(表中风格宏都应为大写,为方便阅读,我使用小写,写程序是须使用大写)

风   格    宏解    释
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的值可以说下表中的任意一个。(表中显示宏都应为大写,为方便阅读,我使用小写,写程序是须使用大写)

显   示    宏结    果
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激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志

UpdateWindow(hWnd);

如果窗口更新的区域不为空,UpdateWindow函数通过发送一个WM_PAINT消息来更新指定窗口的客户区。函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。

    原文作者:alien6u
    原文地址: https://blog.csdn.net/chenxu6/article/details/42127653
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞