主要内容:详细介绍WinMain函数的初始化过程以及消息循环

  1.窗口类定义

    通过给窗口类数据结构WNDCLASS赋值完成,

    该数据结构中包含窗口类的各种属性

    <1>LoadIcon
      作用:在应用程序中加载一个窗口图标
      原型:HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName)
      //第一个参数为图标资源所在的模块句柄,
      //指向用户所加载图标的那个窗口
      //若为NULL则使用系统预定义图标
      //第二个参数为图标资源名或系统预定义图标标识名

    <2>LoadCursor
      作用:在应用程序中加载一个窗口光标
      原型:HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName)
      //第一个参数为光标资源所在的模块句柄,
      //NULL则使用系统预定义光标
      //第二个参数表示使用的是什么类型的光标

    <3>调用GetStockObject函数获取系统提供的背景刷
      原型:HBRUSH GetStockObject(int nBrush)

  2.注册窗口类
    <1>Win系统本身提供部分预定义的窗口,
      程序员也可以自定义窗口类,
      窗口类必须先注册后使用

    <2>窗口类的注册由函数RegisterClass()实现

    <3>RegisterClass(&wndclass); //wndclass为窗口类结构

    <4>RegisterClass返回布尔值,注册成功返回true

  3.创建窗口实例
    <1>创建窗口实例由函数CreateWindow()实现

    <2>函数原型:
      HWND CreateWindow(
        LPCTSTR lpszClassName, //窗口类名
        DWORD dwStyle, //创建窗口的样式
        int x, y, //窗口左上角坐标
        int nWidth, nHeight, //窗口的宽度和高度
        HWND hwndParent, //该窗口的父窗口句柄
        HINSTANCE hInstance, //创建窗口的应用程序当前句柄
        LPVOID lpParent //指向一个传递窗口的参数值的指针
      )

      窗口样式: 以WS_开头,如WS_OVERLAPPEDWINDOW

  4.显示窗口
    <1>窗口类的显示由 ShowWindow和UpdateWindow函数实现

    <2>窗口显示形式标识 ShowWindow(hwnd, nCmdShow)

    <3>应用程序调用ShowWindow函数在屏幕上显示窗口

        SW_HIDE          隐藏窗口
        SW_SHOWNORMAL       显示并激活窗口
        SW_SHOWMINIMIZE      显示并最小化窗口
        SW_SHOWMAXMIZE       显示并最大化窗口
        SW_SHOWNOACTIVE      显示但不激活窗口
        SW_RESTORE         恢复窗口的原来位置及尺寸

    <4>显示窗口后,
      应用程序调用UpdateWindow更新并绘制用户区,
      并发出WM_PAINT消息
      UpdateWindow(hwnd)

  5.消息循环

    <1>消息循环过程

      (Windows)产生消息
      ---> (消息队列)WinMain函数
      ---> 将消息传递给窗口函数的相应过程处理(WndProc)

    <2>消息循环常见格式:

      MSG Msg;
      ...
      while(GetMessage(&Msg, NULL, 0, 0)){
        TranslateMessage(&Msg); //将消息的虚拟键转化为字符信息
        DispatchMessage(&Msg); //将消息传送到制定窗口函数
      }

      GetMessage原型:
      该函数从消息队列中读取一条消息,并将消息放在MSG结构体中
      GetMessage(
        lpMSG, //指向MSG结构体的指针
        hwnd, //从哪一个窗口获取消息
        nMsgFilteMin, //用于消息过滤的最小消息号值
        nMsgFilteMax //用于消息过滤的最大消息号值
      )
      //后两个参数用于通过消息号来过滤消息

WinMain初始化详细过程以及消息循环的更多相关文章

  1. win32编程中消息循环和WndProc()窗口过程函数

    原文地址:https://blog.csdn.net/zxxSsdsd/article/details/45504383 在win32程序的消息循环函数中  while (GetMessage (&a ...

  2. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  3. QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)

    使用QT也有一段时间了,有的时候需要跟踪代码到QT的源码中去查找问题.在这里我将记录一下我跟踪QT源码学习到的一些知识. 我的开发环境是VC6.0+QT4.3.3.QT已经不为VC6.0提供addin ...

  4. Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219

    Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个 ...

  5. [转]Handler MessageQueue Looper消息循环原理分析

    Handler MessageQueue Looper消息循环原理分析   Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...

  6. (转) MFC的入口点与消息循环,消息映射

    博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的<深入浅出MFC >. 来自:http://blog.csdn.net/sryan/article/de ...

  7. Android应用程序线程消息循环模型分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...

  8. Dubbo中消费者初始化的过程解析

    首先还是Spring碰到dubbo的标签之后,会使用parseCustomElement解析dubbo标签,使用的解析器是dubbo的DubboBeanDefinitionParser,解析完成之后返 ...

  9. 详谈Windows消息循环机制

    一直对windows消息循环不太清楚,今天做个详细的总结,有说错的地方,请务必指出. 用VS2017新建一个win32 Application的默认代码如下: 程序入口                ...

随机推荐

  1. Spring与Hibernate整合,实现Hibernate事务管理

    1.所需的jar包 连接池/数据库驱动包 Hibernate相关jar Spring 核心包(5个) Spring aop 包(4个) spring-orm-3.2.5.RELEASE.jar     ...

  2. C语言与MATLAB接口 编程与实例 李传军编着

    罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...

  3. 在Hadoop集群中添加机器和删除机器

    本文转自:http://www.cnblogs.com/gpcuster/archive/2011/04/12/2013411.html 无论是在Hadoop集群中添加机器和删除机器,都无需停机,整个 ...

  4. SharePoint开发 - 自定义导航菜单(三)附其他代码

    博客地址 http://blog.csdn.net/foxdave 接上篇点击打开链接 LeftNavGroupTemplate.cs internal class LeftNavGroupTempl ...

  5. adaboost算法

    三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...

  6. UIkit框架之UItextfield

    1.继承链:UIcontrol:UIview:UIresponder:NSObject 2.成为第一响应者:[text becomeFirstResponder];  //让该文本成为第一响应者 3. ...

  7. android死机问题

    一般在平时工作中,基本上很多代码可以在eclipse+ndk进行调试,但如果需要用到具体的硬件设备,如媒体播放设备无法模拟的情况下,只能上硬件(盒子或手机)上进行调试.此时唯一的调试手段就是logca ...

  8. BZOJ 1584 打扫卫生

    好题! 本来想用一般的方法瞎搞个线段树什么的...发现不行... 然后翻题解. 注意到最优答案不会超过n,所以维护b[]数组,b[j]表示b[j]+1.....i有j个不同的数. 复杂度n√n. #i ...

  9. NGUI悬浮菜单思路实践

    使用NGUI制作悬浮菜单.在UIAnchor锚点下的Offset建立背景和按钮菜单.同过InputMouseXY的位置判断.是否应该弹出和收回.OffSet在此处是作为TweenGameObject的 ...

  10. HDU 4160

    http://acm.hdu.edu.cn/showproblem.php?pid=4160 大娃娃可以套在小娃娃外面(各边严格小),问最后最少得到几个娃娃 题目中的娃娃可以看做点,嵌套关系可以看做有 ...