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) ;
}
}
win32 api Windows窗口的创建的更多相关文章
- Windows窗口的创建
Windows窗口创建的基本代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); i ...
- Win32+API学习笔记:创建基本的窗口控件
创建一个标签 CreateWindowEx(0, "static", "姓名:", ...
- Windows运行机理——创建窗口
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...
- Direct3D 12 创建windows窗口
之前列出了计算机图形学的计划,现在开始这一阶段的学习,首先是Windows窗口的创建. 创建windows窗口 环境: 1. Visual Studio 2015 新建项目 创建工程项目完成,确定为窗 ...
- Python调用win32 API绘制正弦波
Python调用win32 API新建窗口与直接创建窗口的流程相同 流程:注册窗口→创建窗口→显示窗口→更新窗口→消息循环 代码: # -*- coding: utf-8 -*- import win ...
- Windows 08 R2_创建AD DS域服务(图文详解)
目录 目录 Active Directory概念 创建第一个AD域控制器 搭建DNS服务器 使用Windows窗口程序创建AD域控制器 AD与LDAP的关系 使用Powershell来创建ADDS域控 ...
- 使用Win32 API创建不规则形状&带透明色的窗口
前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...
- WIN32 API ------ 最简单的Windows窗口封装类
1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C+ ...
- win32手动创建windows窗口的,小记
摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...
随机推荐
- flexbox 伸缩布局盒
Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计. Flexbox 由 伸缩容器 和 伸缩项目 组成.通过设置元素的 display 属性为 ...
- No.1小白的HTML+CSS心得篇
一个web前端的小白,听前辈说写好笔记很关键,so 特此用博客来开始记录自己的旅程——Web之路 最近几天看的HTML 1.纠正一个认知错误 “HTML是一种编程语言” ————(错) HTML ( ...
- c# 遍历文件夹及其所有文件
利用VS创建一个winform应用程序,遍历指定文件夹(photos)内的所有文件夹及其文件.具体程序如下: namespace 遍历文件夹及其所有文件 { public partial class ...
- MSSQL:修改tempdb设置增加DW性能
Temp DB 在DW中变得非常重要,因为要进行大量的运算,如果内存不够数据就会放在Temp DB中 1. 把Temp DB移动到高性能的磁盘上. 2. 增加tempdb 的大小 3. 把Auto S ...
- final, finally, finalize 的区别
1.final 用于声明属性, 方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.内部类要访问局部变量, 局部变量必须定义成 final 类型, 例如, 一段代码…… 2.finally ...
- Immediate Decodability
Description An encoding of a set of symbols is said to be immediately decodable if no code for one s ...
- JZOI
orz..kpm大神做的JZOI卡.很好看 目前是全球限量十张哈哈哈 (正面) (背面) 原图:
- C++对象模型4--有重写的单继承
有重写的单继承 派生类中重写了基类的print()函数. //Derived_Overwrite.h #pragma once #include "base.h" class De ...
- 5.6.3.7 localeCompare() 方法
与操作字符串有关的最后一个方法是localeCompare(),这个方法比较两个字符串,并返回下列值中的一个: 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多数情况下是-1,具体的值 ...
- 【Kill】两条Linux命令彻底杀死Oracle
今天编写的两条极具杀伤力的命令,它可以瞬间将Oracle杀死在无形之中.后面我将给出简单注释并展示一下它的威力.$ ps -ef |grep $ORACLE_SID|grep -v grep|awk ...