windows窗口的创建有以下几个步骤:

1、创建注册窗口类

2、创建窗口句柄

3、显示更新窗口

4、消息循环

1、创建注册窗口类

所谓创建窗口类就是定义一个WNDCLASS类对象,并将该对象进行初始化。之后就要用RegisterClass()函数对该窗口类对象进行注册,以便使某个窗口与该窗口类相关联。

关于WNDCLASS的定义如下:

typedef struct {
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
} WNDCLASS, *pWNDCLASS;

成员:
style

描述类风格。该成员可以是“Class Styles”的任意组合,styly可以取的值如下所示:

CS_VREDRAW 垂直重画
CS_HREDRAW 水平重画
CS_OWNDC 独占设备描述表
CS_SAVEBITS 保存窗口覆盖区
CS_DBCLKS 允许两次连续按动
CS_BYTEALLGNCLIENT 鼠标用户区域按字节对齐显示
CS_BYTEALLGNWINDOW 鼠标用户窗口按字节对齐显示
CS_NOCLOSE 系统菜单中没有CLOSE菜单项

lpfnWndProc
    指向窗口过程的函数指针。必须使用CallWindowProc函数调用窗口过程。
cbClsExtra
    表示窗口类结构之后分配的额外的字节数。系统将该值初始化为0
cbWndExtra
    表示窗口实例之后分配的额外的字节数。系统将该值初始化为0。如果使用资源文件里的CLASS指令创建对话框,并用WNDCLASS注册该对话框时,cbWndExtra必须设置成DLGWNDOWEXTRA。
hInstance
    包含该类实例的句柄,该实例包含了窗口过程。一般直接赋上WinMain()的hInstance参数值即可。
hIcon
    类图标的句柄。该成员必须为一个图标资源的句柄。可以使用LoadIcon()函数加载图标。如果hIcon为NULL,系统将提供默认图标
hCursor
    鼠标指针的句柄。改成员必须为一个指针资源的句柄。可以使用LoadCursor()去加载光标。如果hCursor为NULL,应用程序必须在指针移入应用程序窗口时显式设置指针类型。
hbrBackground
    背景画刷的句柄。该成员或者是用于绘制背景的物理画刷的句柄,或者是一个颜色值。颜色值必须为如下“标准系统颜色值”(值1必须加到选定颜色中):

BLACK_BRUSH   
DKGRAY_BRUSH
GRAY_BRUSH
HOLLOW_BRUSH  空画刷(相当于NULL_BRUSH) 
LTGRAY_BRUSH
NULL_BRUSH    等同于HOLLOW_BRUSH
WHITE_BRUSH   
BLACK_PEN
WHITE_PEN
NULL_PEN
SYSTEM_FONT  默认情况下,系统使用系统字体去绘制菜单、控制对话框和文本等。
DEFAULT_PALETTE  默认的调色板,这个调色板由系统调色板中的静态颜色组成。

如果颜色值给定后,必须将该值转换成如下HBRUSH类型:

COLOR_ACTIVEBORDER
    COLOR_ACTIVECAPTION
    COLOR_APPWORKSPACE
    COLOR_BACKGROUND
    COLOR_BTNFACE
    COLOR_BTNSHADOW
    COLOR_BTNTEXT
    COLOR_CAPTIONTEXT
    COLOR_GRAYTEXT
    COLOR_HIGHLIGHT
    COLOR_HIGHLIGHTTEXT
    COLOR_INACTIVEBORDER
    COLOR_INACTIVECAPTION
    COLOR_MENU
    COLOR_MENUTEXT
    COLOR_SCROLLBAR
    COLOR_WINDOW
    COLOR_WINDOWFRAME
    COLOR_WINDOWTEXT

当调用UnregisterClass时,系统自动删除背景画刷。应用程序不应删除这些画刷。
    当hbrBackground为NULL时,应用程序必须在绘制客户区域时绘制它自己的背景。为了确定背景是否一定要绘制,应用程序或者可以处理 WM_ERASEBKGND消息,或者测试PAINTSTRUCT的fErase成员。PAINTSTRUCT是由BeginPaint函数填充的。
lpszMenuName
    指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。
lpszClassName
    指 向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用RegisterClass或者RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个 字符串,它描述了窗口类名。这个类名可以是由RegisterClass或者RegisterClassEx注册的名字,或者是任何预定义的控件类名。
结构信息。

2、创建窗口句柄

HWND hWnd ;
 hWnd = CreateWindowEx(WS_EX_TOPMOST , 
     "CreateWindows" ,
     "测试" ,
     WS_POPUP ,
     0 , 
     0 ,
     1024 ,
     768 ,
     NULL ,
     NULL ,
     hInstance ,
     NULL) ;
 if(!hWnd)
 {
  return FALSE ;
 }

3、显示更新窗口

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

4、消息循环

MSG msg ;
 while(true)
 {
  if(PeekMessage(&msg , NULL , 0U , 0U , PM_REMOVE))
  {
   TranslateMessage(&msg) ;
   DispatchMessage(&msg) ;
  }
 }

win32 api Windows窗口的创建的更多相关文章

  1. Windows窗口的创建

    Windows窗口创建的基本代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); i ...

  2. Win32+API学习笔记:创建基本的窗口控件

    创建一个标签 CreateWindowEx(0, "static", "姓名:",                                        ...

  3. Windows运行机理——创建窗口

    Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...

  4. Direct3D 12 创建windows窗口

    之前列出了计算机图形学的计划,现在开始这一阶段的学习,首先是Windows窗口的创建. 创建windows窗口 环境: 1. Visual Studio 2015 新建项目 创建工程项目完成,确定为窗 ...

  5. Python调用win32 API绘制正弦波

    Python调用win32 API新建窗口与直接创建窗口的流程相同 流程:注册窗口→创建窗口→显示窗口→更新窗口→消息循环 代码: # -*- coding: utf-8 -*- import win ...

  6. Windows 08 R2_创建AD DS域服务(图文详解)

    目录 目录 Active Directory概念 创建第一个AD域控制器 搭建DNS服务器 使用Windows窗口程序创建AD域控制器 AD与LDAP的关系 使用Powershell来创建ADDS域控 ...

  7. 使用Win32 API创建不规则形状&带透明色的窗口

    前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...

  8. WIN32 API ------ 最简单的Windows窗口封装类

    1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C+ ...

  9. win32手动创建windows窗口的,小记

    摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...

随机推荐

  1. pcre函数具体解释

    PCRE是一个NFA正则引擎,不然不能提供全然与Perl一致的正则语法功能.但它同一时候也实现了DFA,仅仅是满足数学意义上的正则. PCRE提供了19个接口函数,为了简介,使用PCRE内带的測试程序 ...

  2. ASP.NET性能监视参数详解

    性能监视器- Performance Monitor 性能监视器是Windows自带的系统资源和性能监视工具. 性能监视器能够量化地提供CPU使用率, 内存分配状况, 异常派发情况, 线程调度频率等信 ...

  3. zoj 1409 Communication System

    /*如果要一个物体的多种属性,最好用结构体,不要用二维数组或者多维数组.用多维数组进行关键字排序很不稳定 */ /*给每个设备的所有价格排序,每个设备选取恰好比已知带宽大的价格(这个时候的比例最大) ...

  4. POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)

    题目:click here 题意: 有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量.分析: 其实这个求最大边可以 ...

  5. not enough actual parameters for macro 'min'(QT与vs2010)

    解决方案见以下: qdatetime.h:“min”宏的实参不足 | 浏览:73 | 更新:2015-01-06 12:36 百度经验:jingyan.baidu.com 最近用VS2012 中Qt5 ...

  6. VS的工程宏,比如$(SolutionDir) 的含义及查找

    Configuration->General->Output Directory->单击编辑框点下拉箭头-> <Edit...> 图1 图2

  7. 【转载】设备坐标(窗口/window)和逻辑坐标(视口/viewport)

    一.预备知识 1.窗口是基于逻辑坐标的. 2.视口是基于设备坐标. 3.设备坐标是以像素为单位的,逻辑坐标是以.cm,m,mm,..... 4.系统最后一定要把逻辑坐标变为设备坐标. 5.设备坐标有3 ...

  8. Android 开发笔记 “Sqlite Cursor 使用”

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  9. 转几篇关于Android webView的网文

    1,控件WebView显示网页 http://www.cnblogs.com/tinyphp/p/3858997.html http://blog.csdn.net/t12x3456/article/ ...

  10. NET Core个人博客

    NET Core重写个人博客站点小结 今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的.重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上.效果如下 ...