Windows在表单。控制。对话框基本上形成。Windows类是Windows形式的类型,可处理叙述性说明。

在Windows提前有很多定义Windows类别,但它可以很容易地创建自己的Windows类别。对于每个应用程序,至少你需要创建一个Windows类别。同Windows类为模版,生成窗体,处理消息。

有两种数据结构可用于保存Windows类消息:WNDCLASS和WNDCLASSEX。WNDCLASS、是一种较早的数据结构。已不再使用。如今使用新的扩展版本号WNDCLASSEX。

WNDCLASSEX的结构为:
typedef struct tagWNDCLASSEXW {UINT        cbSize; //结构大小/* Win 3.x */UINT        style; //样式标记WNDPROC     lpfnWndProc;//指向事件处理程序的函数指针int         cbClsExtra;//额外的类信息int         cbWndExtra;//额外的窗体信息HINSTANCE   hInstance;//应用程序实例HICON       hIcon;//主图标HCURSOR     hCursor;//鼠标图像HBRUSH      hbrBackground;//用于绘制窗体的背景刷LPCWSTR     lpszMenuName;//菜单名称LPCWSTR     lpszClassName;//类名/* Win 4.0 */HICON       hIconSm;//小图标句柄
} WNDCLASSEXW

创建一个这种数据结构。并对其每一个字段赋值。
WNDCLASSEX wcex;
第一个字段 cbSzie ,为结构WNDCLASSEX自身的大小。是给其它函数使用的而不是给自己知道的。

设置为 
wcex.cbSize = sizeof(WNDCLASSEX);
样式标记style 。描写叙述窗体的常规属性。

属性的组合依旧使用OR 即 | 来进行组合。

CS_BYTEALIGNCLIENT: 在字节边界上(在x方向上)定位窗体的用户区域的位置
CS_BYTEALIGNWINDOW: 在字节边界上(在x方向上)定位窗体的位置
CS_CLASSDC: 该窗体类的全部窗体实例都共享一个窗体类DC
CS_DBLCLKS: 同意向窗体发送双击鼠标键的消息
CS_GLOBALCLASS: 当调用CreateWindow 或 CreateWindowEx 函数来创建窗体时同意它的hInstance參数和注冊窗体类时传递给RegisterClass 的 hInstance參数不同。假设不指定该风格。则这两个 hInstance 必须同样。
CS_HREDRAW: 当水平长度改变或移动窗体时,重画整个窗体
CS_NOCLOSE: 禁止系统菜单的关闭选项
CS_OWNDC: 给予每一个窗体实例它本身的DC。注意。虽然这样是非常方便。但它必须谨慎使用,由于每一个DC大约要占800个字节的内存。
CS_PARENTDC: 将子窗体的裁剪区域设置到父窗体的DC中去,这样子窗体便能够在父窗体上绘制自身。注意。这是子窗体还是从系统缓存中获取DC,而不是使用父窗体的DC。

使用该风格能够提高系统性能。

CS_SAVEBITS: 以位图形式保存被该窗体遮挡的屏幕部分,这样当给窗体移动以后。系统便能够用该保存的位图恢复屏幕移动的对应部分,从而系统不用向被该窗体遮挡的窗体发送 WM_PAINT 消息。该特性对于菜单类型的窗体比較合适,由于它一般是简短的显示一下之后便消失。设置该特性将添加显示该窗体的时间。由于它通常要先分配保存位图的内存。

CS_VREDRAW: 当垂直长度改变或移动窗体时。重画整个窗体
这里对CS_OWNDC和CS_CLASSDC要讨论一下:

首先。在没有这两个属性时,在调用GetDC或BeginPaint时。windows用默认值创建一个设备描写叙述表。对设备描写叙述表属性所做的一切改变在ReleaseDC或EndPaint使用后都会失效。

假设不想使用默认属性,那么能够使用CS_OWNDC 和 CS_CLASSDC 自定义设备描写叙述表属性。 
使用CS_OWNDC,这个窗体类的每个窗体都被创建了一个设备描写叙述表,且一直存在直到窗体被删除。仅仅须要初始化一次设备描写叙述表(能够在WM_CREATE消息期间完毕)当然能够在须要时改变,以后每次调用GetDC和BeginPaint函数时返回的的设备描写叙述表就是用你刚刚设置的设备描写叙述表了。

CS_OWNDC风格仅仅影响GetDC和BeginPaint获得的设备描写叙述表,不影响其他函数(如GetWindowDC)获得设备描写叙述表。
而使用CS_CLASSDC与CS_OWNDC不同的地方是,窗体类使用此风格时。仅仅创建一个设备描写叙述表为全部的窗体,全部的窗体共享这一个设备描写叙述表(且是相互排斥的)。

然后是參数 lpfnWndProc ,为一个函数指针。指向事件处理程序,SDK中函数一般都为回调函数。回调函数,__stdcall被typedef为 CALLBACK,意思即为回调。回调的基本特征是被调用函数指针作为调用函数的參数,且使用__stdcall ,由被调用函数清除栈。

回调函数的被调用函数仅仅传递一个接口,而调用函数中实现被调用函数。并设置调用方式。

接下来两个字段 cbClsExtra 和 cbWndExtra ,最初设计用来指示Windows在Windows类中保留一些额外空间,以保存执行时信息。可是,如今基本都不使用这两个字段。都设置为0.

下一个字段为hInstance ,这个字段为程序驱动时传递给WinMain()函数的hinstance,即系统启动程序时生成的该进程的实例句柄。

hIcon 为应用程序的图标 句柄。使用函数LoadIcon()载入系统图标。
hCursor。为光标句柄。使用LoadCursor进行载入。
hbrBackground 为又一次绘制或刷新窗体时。Windows至少会使用提前定义的颜色又一次绘制窗体客户区域的背景。即重刷的画刷。

画刷,画笔,。颜色。图形为GDI的组成部分。一般使用函数GetStockObject()获得系统的一些画刷。还有一种写法是直接(HBRUSH)(COLOR_WINDOW+1) 。

接下来字段为ipszMenuName。为一个以NULL结尾的字符串,包括载入到窗体上的菜单资源的名称。

ipszClassName中保存Windows类的名字。系统须要跟踪识别这些类。所以要有名字。一般为以NULL为结尾的字符串。

最后一个为小 图标,显示在win7的任务图标栏。

这完全定义Windows类别。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

创建Windows类别相关推荐

  1. 用Visual C#创建Windows服务程序

    一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...

  2. Visual C#创建Windows服务程序

    转自:http://www.vchome.net/dotnet/dotnetdocs/dotnet38.htm 一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Wind ...

  3. 用.NET创建Windows服务

    用.NET创建Windows服务 译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作 ...

  4. 用C#创建Windows服务(Windows Services)

    转载自 hyslove 最终编辑 hyslove Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是 ...

  5. 创建windows窗口并且获得窗口句柄

    创建windows窗口并且获得窗口句柄 代码 import win32gui from win32con import * import ctypes from ctypes import * def ...

  6. 杂记2:VS2013创建Windows服务实现自动发送邮件

    这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...

  7. C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案

    C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案 参考文章: (1)C#/.NET基于Topshelf创建Windows ...

  8. (转)创建Windows服务(Windows Services)N种方式总结

    转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在 ...

  9. 【C#】C#创建Windows Service服务

    目录结构: contents structure [+] 创建Windows服务 配置 安装Windows服务 在Visual Studio中调试 常见问题 最近写了一个TCP连接的程序,由于这种通信 ...

最新文章

  1. 编程之美:编程判断两个链表是否相交
  2. linux下进制是如何转换?
  3. [工具]-脚本自动化工具:按照linux kernel标准格式化输出文件(format_file)
  4. 学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!附下载链接!...
  5. mysql 页面跳转_Springboot+MyBatis+mysql+jsp页面跳转详细示例
  6. php数组是有序,php判断一个数组是否为有序的方法
  7. 用计算机软件绘制思维导图和手绘思维导图,手绘思维导图与计算机思维导图的对比...
  8. leetcode 117. 填充每个节点的下一个右侧节点指针 II(Populating Next Right Pointers in Each Node II)...
  9. C++基础教程之字符串
  10. 不考虑知识点,考代码段更好
  11. paip.asp VBS开发IDE VBSEDIT总结
  12. php去掉省市区,PHP简单实现正则匹配省市区的方法
  13. AI:人工智能领域具体应用场景案例介绍之以领域划分(CV领域/DS领域/NLP领域/金融领域/爬虫领域)、以项目划分(AI推荐/AI推断/AI法律咨询/AI挖掘)目录来理解技术交互流程
  14. 手写reduce方法
  15. 流程图,NS图,伪代码
  16. 香港黄金配角吴孟达去世,80后程序员以轮播图来悼念达叔,达叔一路走好!
  17. V831——识别指定的人脸
  18. 前端实现模糊查询不区分大小写
  19. 各类无次数限制的免费API接口,再也不怕找不到免费API了
  20. Reactor模式简单实现与理解

热门文章

  1. php zip.so 编译出错,php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法...
  2. 【caffe解读】 caffe从数学公式到代码实现4-认识caffe自带的7大loss
  3. 东南亚跨境电商蓬勃发展,马来西亚市场分析及选品
  4. “AI+”农业向农民致敬-丰收节交易会:谋定工业反哺农业
  5. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理
  6. java/javaee基础面试问题
  7. spring、springMvc、springBoot和springCloud的联系与区别
  8. 加固前奏2-替换application
  9. Selenium2(WebDriver)开发环境搭建(java版)
  10. 中级程序员教程-Cache映像技术