本文是Win32编程基础

尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键 DirectX编程也是建立在这个基础之上的,所以,在你可以熟练的进行简单的Win32编程之后DirectX编程也就触手可得。

1.1 简单的WIN32程序

在以前的C语言编程中,一个最简单的程序可以只有两行。

void main(void)

{ printf "Hello World!"; }

而要实现同样功能的Windows程序却最少也要写几十行,这并不是说明Windows应用程序效率低下,难于掌握,只是说明程序在Windows环境下有更丰富的内涵。

Windows程序的效率其实不低,在所有的Windows应用程序中,都有一个程序初始化的过程,这得用上几十条语句,这段初始化的代码对于任何Windows应用程序而言,都是大同小异的。下面以一个实现最简单功能的程序EasyWin为例,说明Windows程序的基本框架。

//*******************************************************************

// 工程:easywin

// 文件:easywin.cpp

// 内容:一个基本的Win32程序

//*******************************************************************

#include <windows.h>

#include <windowsx.h>

//函数声明

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam,

LPARAM lParam );

//*******************************************************************

//函数:WinMain()

//功能:Win32应用程序入口函数。创建主窗口,处理消息循环

//*******************************************************************

int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄

HINSTANCE hPrevInstance, //前一个实例句柄

LPSTR lpCmdLine, //命令行字符

int nCmdShow) //窗口显示方式

{

MSG msg;

//创建主窗口

if ( !InitWindow( hInstance, nCmdShow ) )

return FALSE;

//进入消息循环:

//从该应用程序的消息队列中检取消息,送到消息处理过程,

//当检取到WM_QUIT消息时,退出消息循环。

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

//程序结束

return msg.wParam;

}

//******************************************************************

//函数:InitWindow()

//功能:创建窗口。

//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )

{

HWND hwnd; //窗口句柄

WNDCLASS wc; //窗口类结构

//填充窗口类结构

wc.style = CS_VREDRAW | CS_HREDRAW;

wc.lpfnWndProc = (WNDPROC)WinProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );

wc.hCursor = LoadCursor( NULL, IDC_ARROW );

wc.hbrBackground = GetStockObject(WHITE_BRUSH);

wc.lpszMenuName = NULL;

wc.lpszClassName = "EasyWin";

RegisterClass( &wc );          //注册窗口类

hwnd = CreateWindow(        //创建主窗口

"EasyWin", //窗口类名称

"一个基本的Win32程序", //窗口标题

WS_OVERLAPPEDWINDOW,

转载于:https://www.cnblogs.com/hnfxs/p/3834908.html

消息循环,注册窗口,创建窗口【图解】相关推荐

  1. 【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

    文章目录 一.导入头文件 二.桌面程序入口函数 三.注册窗口 四.创建窗口 五.显示窗口 六.完整代码示例 七.相关资源 基于 [OpenGL]一.Visual Studio 2019 创建 Wind ...

  2. GetMessage以及消息循环说明

    GetMessage以及消息循环说明 在创建窗口.显示窗口.更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应.要从消息队列中取出消息,我们需要调用GetMessage()函 ...

  3. 2.创建适合游戏的窗口和消息循环

    2.创建适合游戏的窗口和消息循环 本章前言: 创建游戏窗口和处理消息循环是很重要的事情,我尝试过几种不同的窗口处理方式,这次打算使用WS_POPUP样式的窗口(无边框).上一次的框架代码把创建窗口和消 ...

  4. 通过Windows API 创建窗口的过程理解windows消息机制

    一个基于windows API 的基于窗体.消息循环.事件驱动的 Windows C语言风格的Windows 程序. 创建一个Win32应用程序的步骤: 1.定义 WinMain 函数: 2.设计窗口 ...

  5. Windows消息循环理解及窗体创建步骤

    首先理解一句话:"Windows"向应用程序发送了一条消息.这里是指Windows调用了该程序内部的一个函数. 当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了.此 ...

  6. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    本系列博文几乎没有难啃的"专业术语",尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一.(由于本人也是由于项目需要,所以才来查阅相关资料,文中出现的错误欢迎指出,共同进 ...

  7. 用java创建窗口程序,创建窗口的应用程序

    创建窗口的应用程序 通过前面的基础知识的学习,已经对ctypes库的基本功能学会了使用,为了加强这种知识训练,以及运用刚学习的知识的快乐,我们来创建一个稍稍复杂一点的应用程序.这个应用程序是所有后面应 ...

  8. Windows下游戏制作(1)---win32窗口创建(2)

    写出一个窗口 之前我们简单的认识了一下win32主函数,下面我们来讨论一下如何用这个主函数作为起点来写出一个win32窗口程 序. int WINAPI WinMain(   HINSTANCEhIn ...

  9. 模态对话框的消息循环原理及分析笔记

    简述: APP消息循环和模态对话框中局部消息循环的关系 根据上图可以看出,在APP的消息循环再派发ONOK消息后,调用ModalDlg的响应函数,pWnd->OnOk();在该消息中, 会 进入 ...

  10. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

最新文章

  1. 如何优雅的使用 phpStorm 开发工具
  2. 面了一把Java P6 岗,一个问题就干趴下了!
  3. 搜推广遇上用户画像:Lookalike相似人群拓展算法
  4. Hadoop编译打包记录
  5. Excel合并单元格基础注意事项(VSTO 2005)
  6. 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)
  7. 审计文件服务器的5个核心要素
  8. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(1)
  9. excel html id,excel.html
  10. 【车间调度】基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 071期】
  11. oracle ebs工单入库,ORACLE-EBS_库存功能点操作模块.doc
  12. HotPDF Delphi PDF1.7,上传和编辑所有类型的PDF文件
  13. Netty权威指南(三)Netty入门应用
  14. wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
  15. html统计在线人数代码,网站在线人数以及历史访问人数的统计代码
  16. 学习Nisy作者c语言教程笔记1
  17. 拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙
  18. 项目1:基于Java API文档制作的搜索引擎
  19. hive 计算个人的累计金额占比
  20. egg-shell-decorators 给你的蛋蛋加个壳

热门文章

  1. 银行业务队列简单模拟Java程序设计_PTA 数据结构 银行业务队列简单模拟
  2. Spark将数据写入Mysql
  3. Mysql控制流语句
  4. Android6.0动态权限
  5. Bitmap如何高效加载图片
  6. 倾斜摄影和近景摄影技术
  7. 使用java反射写一个通用的jdbc查询
  8. 香港设计师带来仿生机器人,其身体 70% 构造均由3D打印完成
  9. 为什么前端H5工程师工资那么高?
  10. 关于nova-manage service list检测服务状态原理