• MFC 窗体注册 WNDCLASS


    //初始化
    //初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分
    {
      HWND hwnd;
      MSG Msg;
      WNDCLASS wndclass;
      char lpszClassName[]="窗口";//窗口类名
      char lpszTitle[]="徐新坡"; //窗口标题名
      //窗口类定义
      //窗口类定义了窗口的形式与功能 窗口类定义通过给窗口类数据结构WNDCLASS赋值完成
      //该数据结构中包含窗口类的各种属性
      wndclass.style =0; // 窗口类型为缺省类型
      wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
      wndclass.cbClsExtra=0; //窗口类无扩展
      wndclass.cbWndExtra=0; //窗口实例无扩展
      wndclass.hInstance=hInstance; //当前实例句柄
      wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标
      wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); // 窗口采用箭头光标
      wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色
      wndclass.lpszMenuName=NULL; //窗口无菜单
      wndclass.lpszClassName=lpszClassName; //窗口类名为“窗口”
      //////////////// 以下是窗口类的注册 Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类// 窗口类必须先注册 后使用
      if(!RegisterClass(&wndclass)) //如果注册失败 发出警告
      {MessageBeep(0); return FALSE;}
      ///////////////创建窗口 创建一个窗口的实例由函数CreateWindow()实现
      hwnd=CreateWindow( lpszClassName, //窗口类名
      lpszTitle, //窗口标题名
      WS_OVERLAPPEDWINDOW, //窗口的风格
      CW_USEDEFAULT,
      CW_USEDEFAULT, //窗口左上角坐标值为缺省值
      CW_USEDEFAULT, CW_USEDEFAULT, //窗口的高和宽为缺省值
      NULL, //此窗口无父窗口
      NULL, //此窗口无子菜单
      hInstance, //创建此窗口的应用程序的当前句柄
      NULL //不使用该值
    );
    /////////////显示窗口
    ShowWindow(hwnd,nCmdShow);
    //绘制用户区
    UpdateWindow(hwnd);

    参数介绍:

    style:指定类风格。这些风格可通过按位或操作组合起来。风格如下:
    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: 当垂直长度改变或移动窗口时,重画整个窗口
    lpfnWndProc: 指向窗口过程
    cbClsExtra: 指定紧随在 WNDCLASS 数据结构后分配的字节数。系统将其初始化为零。
    cbWndExtra: 指定紧随在窗口实例之后分配的字节数,系统将其初始化为零。如果应用程序正在用WNDCLASS结构注册一个在RC
    资源描述文件中用CLASS指令创建的对话框时,它必须设置这个字段为 DLGWINDOWEXTRA。
    hInstance: 标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。
    hIcon: 标识了该窗口类的图标。hIcon字段必须是一个图标的句柄;若hIcon字段为NULL,那么系统将提供一个默认的图标。
    hCursor: 标识该窗口类的光标,hCursor必须是一个光标资源的句柄。若hCursor字段为NULL,则无论何时鼠标移到应用程序窗口时,应用程序必须显式设置光标形状。
    hbrBackground: 标识了该窗口类的背景画刷。hbrBackground字段必须是用于绘制背景的物理刷子的句柄,或者是一个颜色的值。如果给出一个颜色的值,它必须是下面列出的标准系统颜色之一(系统将对所选颜色加1)。如果给出了颜色值,它必须是转换成下列的HBRUSH类型之一的颜色:
    COLOR_ACTIVEBORDER
    COLOR_ACTIVECAPTION
    COLOR_APPWORKSPACE
    COLOR_BACKGROUND
    COLOR_BTNFACE
    COLOR_BTHSHADOW
    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
    当hbrBackground字段为NULL时,每当需要绘制其用户区域时,应用程序必须自己来绘制其背景。应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写的 PAINTSTRUCT 结构的fErase 字段来确定背景什么时候需要着色。
    lpszMenuName :指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。
    lpszClassName :指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个字符串,它描述了窗口类名。这个类名可以是由RegisterClass或RegisterClassEx注册的名字,或者是任何预定义的控件类名。
     
    例子:
    BOOL RegisterWindowClass()
    {
        WNDCLASS wndcls;
        HINSTANCE hInst = AfxGetInstanceHandle();
    
        if (!(::GetClassInfo(hInst, BITMAPVIEWER_CLASSNAME, &wndcls)))
        {
            // otherwise we need to register a new class
            wndcls.style            = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
            wndcls.lpfnWndProc      = ::DefWindowProc;
            wndcls.cbClsExtra       = wndcls.cbWndExtra = 0;
            wndcls.hInstance        = hInst;
            wndcls.hIcon            = NULL;
            wndcls.hCursor          = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
            wndcls.hbrBackground    = (HBRUSH) (COLOR_3DFACE + 1);
            wndcls.lpszMenuName     = NULL;
            wndcls.lpszClassName    = BITMAPVIEWER_CLASSNAME;
    
            if (!AfxRegisterClass(&wndcls))
            {
                AfxThrowResourceException();
                return FALSE;
            }
        }
    
        return TRUE;
    }

    参考:http://baike.baidu.com/link?url=hWqI-6tgbyQOZPWGf5JGihYBUPnSWs3DbQffoIPrUK_AxzK4x-q9s6uj2E4lZmL9Rj13tc_pCb-3djg9VlkHSa

    参考:http://www.cnblogs.com/Clingingboy/archive/2011/08/31/2161461.html

  • 相关阅读:
    什么是软件测试架构师?
    Spring常用注解
    Ant 风格路径表达式
    <url-pattern>写成/和/*的区别
    Spring+SpringMVC+Hibernate
    Spring+SpringMVC+MyBatis框架整合
    Spring各个jar包的介绍
    单点登录原理与简单实现(转载)
    博客网站系统
    POM.xml配置文件详解
  • 原文地址:https://www.cnblogs.com/mqxs/p/3482242.html
Copyright © 2020-2023  润新知