zoukankan      html  css  js  c++  java
  • api(一) 创建窗口 (转)

    所有的Windows SDK编程都有一个类似的框架,本文就说说这个框架,Windows程序设计的框架分为“三部曲”:

    一、注册窗口类

    注册窗口类的API函数是RegisterClass或者RegisterClassEx,这两个函数参数区别不大,具体看MSDN,这里以RegisterClass为例。函数原型如下:

    参数WNDCLASS定义如下:

    结构成员说明如下:

    style:指示类窗口类的风格,比如指定水平、垂直重画;是否显示关闭窗口等。

    lpfnWndProc:窗口过程函数指针,这个是最重要的参数,该参数指定消息执行的处理函数入口。

    cbClsExtra:类扩展数据大小,一般不用。

    cbWndExtra:窗口扩展数据大小,一般不用。

    hInstance:应用程序实例,这个参数会从WinMain函数传过来。

    hIcon:应用程序的图标句柄。

    hCursor:应用程序的光标句柄。

    hbrBackground:窗口的背景画刷。Windows预定义了一些纯色画刷,如COLOR_GRAYTEXT、COLOR_BACKGROUND、COLOR_ACTIVECAPTION等等。

    lpszMenuName:菜单名,该名以资源的方式存在。

    lpszClassName:窗口类的名字,这个必须指定且不能重复,否则会失败,除非你需要重复的,否则尽量避免。

    二、创建主窗口并显示

    参数如下:

    lpClassName:类名,就是WNDCLASS结构中的 lpszClassName。

    lpWindowName:本窗口的名字,一个字符串。

    dwStyle:窗口风格,比如是否有边框、标题框、子窗口、水平垂直滚动条、弹出、重叠性等,具体看MSDN,很多特殊效果都是用这个风格指定的,比如类似迅雷的悬浮窗等。

    x,y, nWidth, nHeight:指定窗口相对于父窗口的位置和宽高。

    hWndParent:指定父窗口句柄,如果该窗口没有父窗口,则为NULL,比如应用程序主窗口。

    hMenu:菜单句柄。

    hInstance:应用程序实例句柄,跟WNDCLASS中的hInstance一样。

    lpParam:指向一个CREATESTRUCT结构的参数。

    显示并刷新窗口的API函数如下,参数都有对应的窗口句柄:

    ShowWindow(hWnd, iCmdShow);

    UpdateWindow(hWnd);

    三、进入消息循环

    这个过程基本是一个固定的格式:

    该过程从系统消息队列里面获取一个消息,然后翻译虚拟按键成字符消息,并派送到窗口消息队列中,等待消息处理函数处理。如果获取到的消息为WM_QUIT,则返回0,于是就退出循环。

    通过上面的三部曲,我们就创建了windows程序设计的框架,几乎任何的windows程序都可以在这个框架基础上衍生出来。下面我们给出完整的框架代码:

    在消息处理函数中,根据消息类型执行不同的处理,比如WM_CREATE可以处理一些创建的工作;WM_PAINT可以处理画图,显示文本;WM_DESTROY处理在窗口被销毁时的事件;当然还有很多其他的消息事件,根据情况我们做出相应的处理。

    【Windows编程】系列第一篇: Windows SDK编程基本框架

    该框架程序运行起来就是一个空空的窗口,没有任何其他内容。虽然整个框架简单,但是对于windows程序设计来说非常重要。如果你想学习windows编程,就需要把每一个部分都真正理解,这样就算基本入门windows编程了,剩下的就是如何根据需求丰富这个框架使之成为一个“有用”的程序。

    下一篇我们将讲解如何在windows SDK创建各种常用的控件,请继续关注。

    转载请注明原文出处:http://www.coderonline.net/?p=565

  • 相关阅读:
    常用命令
    添加云存储服务
    安装Prometheus-Opeartor
    Prometheus-operator架构详解
    Helm使用详解
    莫队乱搞--BZOJ2038: [2009国家集训队]小Z的袜子(hose)
    BZOJ1443: [JSOI2009]游戏Game
    BZOJ2006: [NOI2010]超级钢琴
    BZOJ4408: [Fjoi 2016]神秘数
    hdu6110:路径交
  • 原文地址:https://www.cnblogs.com/yangjig/p/6028506.html
Copyright © 2011-2022 走看看