`

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);
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消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。
下一篇Windows编程之消息循环和消息结构
分享到:
评论

相关推荐

    C++游戏编程:创建3D游戏依赖库

    在C++游戏编程中,创建3D游戏是一个复杂而令人兴奋的过程,涉及到多个技术领域和依赖库。3D游戏的开发需要对计算机图形学、物理、音频处理、输入设备控制等多个方面有深入的理解。本篇将围绕“C++游戏编程:创建3D...

    C++,Windows编程

    Windows编程则涉及到如何利用Windows API(Application Programming Interface)来创建窗口、处理用户输入、绘制图形以及管理系统资源。 Windows API是微软提供的一系列函数、结构和常量,开发者可以调用它们来实现...

    C++中级与windows编程

    在“C++中级与Windows编程”这一主题中,我们探讨的是如何使用C++语言进行高效且复杂的Windows应用程序开发。这通常涉及到对C++语言的深入理解以及Windows API的使用。以下是一些关键的知识点: 1. **C++基础知识**...

    c++ builder 创建窗口

    在C++ Builder中,创建窗口是一项基础且重要的任务,它为开发者提供了与用户交互的界面。C++ Builder是一个集成开发环境(IDE),专门用于使用C++语言开发Windows应用程序,其强大的VCL(Visual Component Library)...

    C++编程系列之窗口的动画效果

    开发者需要具备扎实的C++基础,熟悉Windows编程,并对图形编程有一定的了解,才能有效地创建出引人入胜的窗口动画。通过不断实践和学习,你可以在VC++环境中构建出各种令人印象深刻的动态用户界面。

    VISUAL C++MFC编程实例

    通过阅读《Visual C++ MFC编程实例》这本书并实践源码,你可以逐步掌握如何利用MFC开发功能丰富的Windows应用程序,了解MFC的各个组件以及它们之间的协作关系。书中可能涵盖从基本的窗口创建、事件处理,到复杂的...

    Windows API C++ 编程1

    在Windows编程领域,Windows API(应用程序接口)是开发者与操作系统交互的核心工具,特别是使用C++进行开发时。Windows API提供了一系列的函数、数据结构和消息机制,使得开发者能够创建具有图形用户界面(GUI)的...

    windows编程中文版CHM

    《Windows编程中文版CHM》是一本专门为C++编程初学者和希望深入学习Windows编程的开发者准备的资源。CHM(Compiled Help Manual)文件是一种由微软开发的帮助文档格式,它将多个HTML页面、图像和其他资源合并成一个...

    windows编程 c++ 小时钟

    在Windows编程领域,C++是一种常用的编程语言,用于创建高效且功能丰富的应用程序。在这个场景下,我们关注的是一个使用C++实现的“Windows编程小时钟”项目,这为我们提供了一个学习Windows核心编程技术的实例。这...

    Windows环境下C++编程(C++ Windows Programming)-2016年英文原版,0积分

    本书覆盖了广泛的Windows编程技术,包括但不限于窗口管理、消息处理、图形用户界面设计等。 #### 二、版权信息与出版详情 - **出版社:** Packt Publishing - **版权所有:** ©2016 Packt Publishing - **首次出版...

    Visual C++实用编程技术——从C++、面向对象到窗口程序设计.rar

    4. **Windows编程**:这涉及到Windows操作系统下的编程接口,如窗口消息、事件驱动编程模型、GDI(Graphics Device Interface)图形绘制、资源管理等。掌握窗口创建、消息处理机制、控件使用,以及如何通过GDI进行...

    QT5 C++ GUI 编程指南

    总之,QT5 C++ GUI编程指南是一份全面的教程,涵盖了QT5.9的各个方面,旨在帮助开发者熟练掌握使用C++和QT库创建GUI应用的技巧,无论是初学者还是有经验的开发者,都能从中受益。通过学习和实践,你可以构建出跨平台...

    Windows编程PPT课件

    接着,课程将详细介绍Windows编程环境的搭建,如安装Visual Studio IDE,设置开发环境,以及如何创建和配置C++项目。这是每个Windows开发者必须掌握的步骤,通过实际操作,学习者可以快速上手。 在C++编程方面,...

    Visual C++ For Windows编程(电子书)

    《Visual C++ For Windows编程》是一本专注于使用Microsoft Visual C++进行Windows应用程序开发的经典书籍。这本书深入探讨了如何利用Visual C++的强大功能来构建高效、稳定的Windows应用。Visual C++是一种集成开发...

    Visual+C++与Windows编程学习参考

    《Visual C++与Windows编程学习参考》是一本专注于利用Microsoft的Visual C++工具进行Windows应用程序开发的教程。这本书深入浅出地介绍了如何使用C++语言和Microsoft的开发环境来构建功能丰富的桌面应用。 Visual ...

    用c++封装windows窗口

    在Windows编程中,C++是一种常用的编程语言,用于创建高效且功能丰富的应用程序。"用C++封装Windows窗口"是一个项目,旨在将Windows API中的窗口管理功能整合到C++类中,以便于代码的管理和复用。这个项目是在Visual...

    c++界面编程实例 主要是关于C++界面编程的

    在C++中,通常使用Microsoft的Visual C++(VC)开发环境来实现这样的界面编程,因为它提供了对Windows API的直接访问,以及MFC(Microsoft Foundation Classes)库,这是一个面向对象的框架,简化了Windows应用程序的...

    C++ 控制台创建窗口,GDIPLUS加载png图片,实现悬浮窗

    在本文中,我们将深入探讨如何使用C++在控制台环境中创建窗口,并利用GDIPLUS库加载PNG图片,最终实现一个具有悬浮效果的窗口。我们还会提及`UpdateLayeredWindow`函数,它对于创建特效窗口至关重要。 首先,让我们...

    Visual C++6.0编程实用技术与案例(5源码)

    MFC封装了Windows API,使得开发者能够更容易地创建窗口、处理消息和图形渲染。 具体到"DrawLine"这个源码,我们可以推测这是一个演示如何在Windows窗口中绘制线条的示例程序。在C++中,通常会使用CDC(Device ...

Global site tag (gtag.js) - Google Analytics