zoukankan      html  css  js  c++  java
  • 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()函数加载图标。如果hIconNULL,系统将提供默认图标
    hCursor
        
    鼠标指针的句柄。改成员必须为一个指针资源的句柄。可以使用LoadCursor()去加载光标。如果hCursorNULL,应用程序必须在指针移入应用程序窗口时显式设置指针类型。
    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时,系统自动删除背景画刷。应用程序不应删除这些画刷。
        
    hbrBackgroundNULL时,应用程序必须在绘制客户区域时绘制它自己的背景。为了确定背景是否一定要绘制,应用程序或者可以处理 WM_ERASEBKGND消息,或者测试PAINTSTRUCTfErase成员。PAINTSTRUCT是由BeginPaint函数填充的。

    lpszMenuName
        
    指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuNameNULL,那么该窗口类的窗口将没有默认菜单。
    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) ;
      }
     }
  • 相关阅读:
    leetcode 14. 最长公共前缀
    leetcode13. 罗马数字转整数
    leetcode 21.合并两个有序链表
    leetcode14-最长公共前缀
    leetcode13-罗马数字转整数
    leetcode11- 盛最多水的容器
    leetcode9-回文数
    leetcode7- 整数反转
    leetcode 1-两数之和
    文件的上传
  • 原文地址:https://www.cnblogs.com/lidabo/p/3440889.html
Copyright © 2011-2022 走看看