win32 api Windows窗口的创建

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) ;
  }
 }

时间: 2024-09-19 23:58:17

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

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

目录 目录 Active Directory概念 创建第一个AD域控制器 搭建DNS服务器 使用Windows窗口程序创建AD域控制器 AD与LDAP的关系 使用Powershell来创建ADDS域控制器 检查ADDC域控制器是否安装成功 管理工具 创建额外域控制器 使用Windows窗口界面来安装额外域控制器 使用Powershell脚本来安装额外域控制器 Active Directory概念 AD(活动目录):是一种组织资源信息的方法,目录的意义在于我们可以通过标题或者说搜索条件来简单而有效

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

前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本掌握了使用Win32 API创建各种匪夷所思的窗口的基本思路. (以下文字基于本人的个人理解,由于本人技术和经验原因不保证正确性,希望各位不吝指正) 首先我们需要了解一些基础知识. 1.Layered Windows.这是Windows2000开始引入的新概念,重新定义了窗口的Hit Testing

应用-windows窗口创建,debug调试出现的问题,release则不会

问题描述 windows窗口创建,debug调试出现的问题,release则不会 #include #include "tchar.h" #include LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, message, wParam, lParam); /*switch (message) { case WM_DES

windows编程 全屏窗口的创建总结 .

from:http://blog.csdn.net/leolee82/article/details/6992615 windows编程 全屏窗口的创建总结第一种:较简单的方法在ShowWindow(hwnd,SW_SHOWNORMAL);UpdateWindow(hwnd);前加如下代码: [cpp] view plaincopyprint? LONG style = GetWindowLong(hwnd,GWL_STYLE);//获得窗口风格    style = &~WS_CAPTION 

如何在C#中使用Win32 API和其他库

C# 用户经常提出两个问题:"我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?"当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大.他们没有足够的资源为所有 Win32 API 编写托管接口.加以测试并编写文档,因此只能优先处理最重要的部分.许多常用操作都有托管接口,但是还有许多完整的 Win32 部分没有托管接口. 平台

用Win32 API实现串行通信

串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.我们可以利用Windows API 提供的通信函数编写出高可移植性的串行通信程序. 在Win16中,可以利用OpenComm.CloseComm和WriteComm等函数打开.关闭和读写串口.但在Win32中,串口和其他通信设备均被作为文件处理,串口的打开.关闭和读写等操作所用的API函数与操作文件的函数相同.可通过CreateFile函数打开串口,通过CloseFile函数关闭串口,通过CommProp.D

界面划窗口设计-WIN32汇编中窗口设计,新手求帮助

问题描述 WIN32汇编中窗口设计,新手求帮助 .386 .model flat,stdcall option casemap:none include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .data? hInstance dd ? nhWnd dd ? .data SZClassName db "My Windows" SZW

win32 api实现2048游戏示例_C 语言

自学的win32编程,写了一个win32 API版2048,自己摸索着写的,按上下左右箭头开始游戏 复制代码 代码如下: #include <windows.h>#include <stdlib.h>#include <stdio.h>#include <ctime>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//全局操作数组int arr[4][4] = { { 0, 0, 0, 0 }, {

深入浅出VC++串口编程之基于Win32 API

1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与 文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为 CreateFile,其原型为: HANDLE CreateFile ( LPCTSTR lpFileName, //将要打开的串口逻辑名,如COM1 或COM2 DWORD dwAccess, //指定串口访问的类型 ,可以是读取.写入或两者并列 DWORD dwShareMode, //指定共享属性,由于串口不 能共享,该参数