消息循环,注册窗口,创建窗口【图解】
本文是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
消息循环,注册窗口,创建窗口【图解】相关推荐
- 【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )
文章目录 一.导入头文件 二.桌面程序入口函数 三.注册窗口 四.创建窗口 五.显示窗口 六.完整代码示例 七.相关资源 基于 [OpenGL]一.Visual Studio 2019 创建 Wind ...
- GetMessage以及消息循环说明
GetMessage以及消息循环说明 在创建窗口.显示窗口.更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应.要从消息队列中取出消息,我们需要调用GetMessage()函 ...
- 2.创建适合游戏的窗口和消息循环
2.创建适合游戏的窗口和消息循环 本章前言: 创建游戏窗口和处理消息循环是很重要的事情,我尝试过几种不同的窗口处理方式,这次打算使用WS_POPUP样式的窗口(无边框).上一次的框架代码把创建窗口和消 ...
- 通过Windows API 创建窗口的过程理解windows消息机制
一个基于windows API 的基于窗体.消息循环.事件驱动的 Windows C语言风格的Windows 程序. 创建一个Win32应用程序的步骤: 1.定义 WinMain 函数: 2.设计窗口 ...
- Windows消息循环理解及窗体创建步骤
首先理解一句话:"Windows"向应用程序发送了一条消息.这里是指Windows调用了该程序内部的一个函数. 当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了.此 ...
- 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
本系列博文几乎没有难啃的"专业术语",尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一.(由于本人也是由于项目需要,所以才来查阅相关资料,文中出现的错误欢迎指出,共同进 ...
- 用java创建窗口程序,创建窗口的应用程序
创建窗口的应用程序 通过前面的基础知识的学习,已经对ctypes库的基本功能学会了使用,为了加强这种知识训练,以及运用刚学习的知识的快乐,我们来创建一个稍稍复杂一点的应用程序.这个应用程序是所有后面应 ...
- Windows下游戏制作(1)---win32窗口创建(2)
写出一个窗口 之前我们简单的认识了一下win32主函数,下面我们来讨论一下如何用这个主函数作为起点来写出一个win32窗口程 序. int WINAPI WinMain( HINSTANCEhIn ...
- 模态对话框的消息循环原理及分析笔记
简述: APP消息循环和模态对话框中局部消息循环的关系 根据上图可以看出,在APP的消息循环再派发ONOK消息后,调用ModalDlg的响应函数,pWnd->OnOk();在该消息中, 会 进入 ...
- 模态对话框和非模态对话框的消息循环分析
1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...
最新文章
- 如何优雅的使用 phpStorm 开发工具
- 面了一把Java P6 岗,一个问题就干趴下了!
- 搜推广遇上用户画像:Lookalike相似人群拓展算法
- Hadoop编译打包记录
- Excel合并单元格基础注意事项(VSTO 2005)
- 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)
- 审计文件服务器的5个核心要素
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(1)
- excel html id,excel.html
- 【车间调度】基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 071期】
- oracle ebs工单入库,ORACLE-EBS_库存功能点操作模块.doc
- HotPDF Delphi PDF1.7,上传和编辑所有类型的PDF文件
- Netty权威指南(三)Netty入门应用
- wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
- html统计在线人数代码,网站在线人数以及历史访问人数的统计代码
- 学习Nisy作者c语言教程笔记1
- 拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙
- 项目1:基于Java API文档制作的搜索引擎
- hive 计算个人的累计金额占比
- egg-shell-decorators 给你的蛋蛋加个壳