码迷,mamicode.com
首页 > Windows程序 > 详细

Windows核心编程05-窗口类的注册

时间:2016-06-17 19:37:27      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

窗口类

  窗口类包含了窗口的各种参数信息的数据结构。每个窗口都具有窗口类,基于窗口类创建窗口。每个窗口类都具有一个名称,使用前必须注册到系统。

窗口类的分类

  -系统窗口类

  系统已经定义好的窗口类,所有应用程序都可以直接使用

  -应用程序全局窗口类

  由用户自己定义,当前应用程序的所有模块都可以使用 容易产生冗余

  -应用程序局部窗口类

  由用户自己定义,当前应用程序中本模块可以使用 建议使用这个,局部窗口类可以代替全局窗口类

系统窗口类的注册

  不需要注册,直接使用窗口类即可。系统已经定义好相应名称,例如

    按纽-BUTTON

    编辑框-EDIT

  Windows下只要有形状的东西都是窗口 大到全屏界面小到按纽编辑框等。。。  

应用程序窗口类的注册

  RegisterClass/RegisterClassEx

  ATOM RegisterClass(

  CONST WNDCLASS *lpWndClass //窗口类的类型

  ); 注册成功后,返回一个数字标识。

  ATOM RegisterClassEx(

  CONST WNDCLASSEX *lpwcx//窗口类的类型

  )

  typedef struct {
      UINT cbSize; //结构体大小
      UINT style;//窗口类的风格
      WNDPROC lpfnWndProc; //窗口处理函数
      int cbClsExtra;//窗口类的附加数据buffer的大小
      int cbWndExtra;//窗口的附加数据buffer的大小
      HINSTANCE hInstance; //当前模块的实例句柄
      HICON hIcon;//窗口图标句柄
      HCURSOR hCursor;//鼠标的句柄
      HBRUSH hbrBackground;//绘制窗口背景的画刷句柄
      LPCTSTR lpszMenuName;//窗口菜单的资源ID字符串
      LPCTSTR lpszClassName;//窗口类的名称
      HICON hIconSm;//窗口的小图标句柄
  } WNDCLASSEX, *PWNDCLASSEX

   应用程序全局窗口类的注册,需要在窗口类的风格中增加CS_GLOBALCLASS 例如WNDCLASSEXwce{0};

  wce.style = ...|CS_GLOBALCLASS;

  应用程序局部窗口类

    在注册窗口类时,不要添加CS_GLOBALCLASS风格

   Style所有成员

    CS_GLOBALCLASS 应用程序全局窗口类

    CS_BYTEALIGNCLIENT 窗口客户区水平位置8倍数对齐

    CS_BYTEALIGNWINDOW 窗口的水平位置8倍对齐

    CS_HREDRAW 当窗口水平变化时,窗口重新绘制

    CS_VREDRAW 当窗口垂直变化时,窗口重新绘制

    CS_CLASSDC 该类型的窗口,都是有同一个绘图(DC)设备

    CS_PARENTDC 该类型的窗口,每个窗口都是用自己的绘图(DC)设备

    CS_SAVEBITS 允许窗口保存成图(位图),提高窗口的绘图效率,但是耗费内存资源

    CS_DBLCLKS 允许窗口接收鼠标双击消息

    CS_NOCLOSE 窗口没有关闭按钮

窗口类的创建  

  CreateWindow

HWND CreateWindow(          LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam
);

 

  1 系统根据传入的窗口类名称,在应用程序局部窗口类中查找,如果找到执行2,如果未找到执行3

  2 比较局部窗口类与创建窗口时传入的HINSTANCE变量。如果发现相等,创建和注册窗口类中同一个模块,创建窗口返回。如果不相等,继续执行3。/*局部窗口类只能自己的进程使用,HINSTANCE相同则为同一进程创建,此步骤对比窗口类和HINSANCE*/

  3 在应用程序全局窗口类,如果找到,执行4,如果未找到执行5

  4 使用找到的窗口类的信息,创建窗口返回

  5 在系统窗口类中查找,如果找到创建窗口返回,否则创建窗口失败

  CreateWindowEx

    CreateWindowEx是CreateWindow的升级版

HWND CreateWindowEx(          DWORD dwExStyle,
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle, //窗口的扩展风格,比CreateWindow多的参数
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam
);

Windows核心编程05-窗口类的注册

标签:

原文地址:http://www.cnblogs.com/visions/p/5582687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!