zoukankan      html  css  js  c++  java
  • Win32创建窗口的过程

    转自:http://blog.csdn.net/gotosola/article/details/7421326

     

    创建窗口

    注册窗口类(模板)

    建立窗口

     
    接下来的步骤是在已经注册的窗口类的基础上建立窗口,使用“类”的原因是定义窗口的“共性”,建立窗口时肯定还要指定窗口的很多“个性化”的参数。
    和注册窗口类时用一个结构传递所有参数不同,建立窗口时所有的属性都是用单个参数的方式传递的,建立窗口的函数是CreateWindowEx。
     
    它是Win16中CreateWindow函数的扩展,主要表现在多了一个dwExStyle(扩展风格)参数。
    原因是Win32比Win16中多了很多种窗口风格,原来的一个风格参数已经不够用了。
     
    CreateWindowEx函数的使用方法是:
    invoke CreateWindowEx, dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam
     
    咋一看,这个函数的参数多达12个(不知道大家怎么想,说实话,小甲鱼第一次自学这本书的时候看到这个想死的心有了)。
    但其实认真看一下,它们却很好理解!
     

    CreateWindowEx各个参数

     

    lpClassName(第二个参数)

    建立窗口使用的类名字符串指针,在FirstWindow中该参数指向”MyClass”字符串,表示用”MyClass” 类建立窗口,这正是我们自己注册的类。
    这样一来,这个窗口就有”MyClass”类的所注册的所有属性,并且消息将被发到”MyClass”类中指定的窗口过程中去。
     

    lpWindowName(第三个参数)

    指向表示窗口名称的字符串。
    该名称会显示在标题栏上。
     

    hMenu(第十个参数)

    窗口上要出现的菜单的句柄。
    在注册窗口类的时候也定义了一个菜单,那是窗口的默认菜单,意思是如果这里没有定义菜单(用参数NULL)而注册窗口类时定义了菜单,则使用窗口类中定义的菜单;如果这里指定了菜单句柄,则不管窗口类中有没有定义都将使用这里定义的菜单。两个地方都没有定义菜单句柄,则窗口上没有菜单。
     

    lpParam(最后一个参数)

    一般情况下用不到这个字段
     

    hInstance(第十一个参数)

    模块句柄,和注册窗口类时一样,指定了窗口所属的程序模块。
     

    hWndParent(第九个参数)

    窗口所属的父窗口,这里的“父子”关系只是从属关系,主要用来在父窗口销毁时一同将其“子”窗口销毁,并不会把窗口位置限制在父窗口的客户区范围内。
     

    x,y(第五、六个参数)

    指定窗口左上角位置,单位是像素(px)。默认时可指定为 CW_USEDEFAULT,这样Windows会自动为窗口指定最合适的位置,当建立子窗口时,位置是以父窗口的左上角为基准的,否则,以屏幕左上角为基准。
     

    nWidth,nHeight(第七、八个参数)

    窗口的宽度和高度,也就是窗口的大小,同样是以像素为单位的。默认时可指定为 CW_USEDEFAULT
     

    dwStyle(第四个参数)

    窗口的两个参数 dwStyle 和 dwExStyle 决定了窗口的外形和行为,dwStyle 是从 Win16 开始就有的属性,我们用一个表列出了常见的 dwStyle 定义,它们是一些以WS(Windows Style的缩写)为开头的预定义值。
     

    窗口风格的预定义值

     
    预定义值16进制值含   义
     WS_OVERLAPPED  00000000h  普通的重叠式窗口
     WS_POPUP  80000000h  弹出式窗口(没有标题栏)
     WS_CHILD  40000000h  子窗口
     WS_MINIMIZE  20000000h  初始状态是最小化的
     WS_VISIBLE  10000000h  初始状态是可见的
     WS_DISABLED  08000000h  初始状态是被禁止的
     WS_MAXIMIZE  01000000h  初始状态是最大化的
     WS_BORDER  00800000h  单线条边框
     WS_DLGFRAME  00400000h  对话框类型的边框
     WS_VSCROLL   00200000h  带垂直滚动条
     WS_HSCROLL  00100000h  带水平滚动条
     WS_SYSMENU  00080000h  带系统菜单(即带标题栏左上角的图标)
     WS_THICKFRAME  00040000h  可以拖动调整大小的边框
     WS_MINIMIZEBOX  00020000h  有最小化按钮
     WS_MAXIMIZEBOX  00010000h  有最大化按钮
     
    为了容易理解,Windows也为一些定义取了一些别名,同时,由于窗口的风格往往是几种风格的组合,所以Windows也预定义了一些组合值:
     
    预定义值等 效 值

     WS_CHILDWINDOW

     WS_CHILD

     WS_TILED

     WS_OVERLAPPED

     WS_ICONIC

     WS_MINIMIZE

     WS_SIZEBOX

     WS_THICKFRAME

     WS_OVERLAPPEDWINDOW

     WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or  WS_THICKFRAME or WS_MINIMIZEBOX or  WS_MAXIMIZEBOX

     WS_TILEDWINDOW

     WS_OVERLAPPEDWINDOW

     WS_POPUPWINDOW

     WS_POPUP or WS_BORDER or WS_SYSMENU
     

    dwExStyle(第一个参数)

    dwExStyle 是Win32中扩展的,它们是一些以WS_EX_开头的预定义值,主要定义了一些特殊的风格,下表给出了一些最常用的特殊风格。
     

    窗口扩展风格的预定义值

    预定义值十六进制含 义
     WS_EX_TOPMOST  00000008h  总在顶层的窗口
     WS_EX_ACCEPTFILES  00000010h  允许窗口进行鼠标拖放操作
     WS_EX_TOOLWINDOW  00000080h  工具窗口(很窄的标题栏)
     WS_EX_WINDOWEDGE  00000100h  立体感的边框
     WS_EX_CLIENTEDGE  00000200h  客户区立体边框
     WS_EX_OVERLAPPEDWINDOW    WS_EX_WINDOWEDGE or  WS_EX_CLIENTEDGE
     WS_EX_PALETTEWINDOW    WS_EX_WINDOWEDGE or  WS_EX_TOOLWINDOW or WS_EX_TOPMOST
  • 相关阅读:
    springMVC和Struts2的区别
    Java并发教程(Oracle官方资料)
    Java并发教程(Oracle官方资料)
    Perl 按地区统计访问次数
    Perl 多个正则匹配
    Perl 判断字符串为空
    Java中的大小写字母相互转换(不利用Java自带的方法)
    如何利用JavaScript遍历JSON数组
    javax.servlet.JspTagException:Illegal use of -style tag without as its di
    PERL get网页
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/2869646.html
Copyright © 2011-2022 走看看