Windows SDK笔记(一):Windows程序基本结构

Kinect for Windows SDK v2.0 开发笔记 ()环境 嗯,它来了,Windows for Windows v2。 7 阅读详情

 

 

一、概述

Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。
程序中只要按一定的格式填写系统留给客户的那一小部分。
所需要完成的有:
窗口类的定义、窗口的建立、消息函数的书写、消息循环。


二、消息处理函数

Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。没个窗口都有一个消息处理函数。
在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。

客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。
通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case ...
     	...
     case ...
     	...

     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
三、窗口的建立

客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。
1.注册窗口类
建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:菜单、图标等等。
这个属性指定步骤是通过指定"窗口类"来完成的。
对于自己建立的窗口,这个"窗口类"需要自己制定,也即自己填充一个WNDCLASS结构,然后向系统注册。
对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。
2.建立窗口
建立窗口时,注册的"窗口类"名称作为参数传入。
这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。

四、消息循环

系统会将针对这个程序的消息依次放到程序的“消息队列”中,由程序自己依次取出消息,在分发到对应的窗口中去。
因此,建立窗口后,将进入一个循环。
在循环中,取出消息、派发消息,循环往复,直到取得的消息是退出消息。
循环退出后,程序即结束。
#include "stdafx.h"
#include <windows.h>

//一、消息处理函数
//参数:窗口句柄,消息,消息参数,消息参数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	//处理感兴趣的消息
	switch (message)
	{
	case WM_DESTROY:
		//当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
		PostQuitMessage (0) ;
		return 0 ;
	}
	//其他消息交给由系统提供的缺省处理函数
	return ::DefWindowProc (hwnd, message, wParam, lParam) ;
}

//二、应用程序主函数
//参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
	//1.注册窗口类
	static TCHAR szAppName[] = TEXT ("HelloWin") ;		//窗口类名称
	//定制"窗口类"结构
	WNDCLASS     wndclass ;
	wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
	wndclass.lpfnWndProc   = WndProc ;				//关联消息处理函数  
	wndclass.cbClsExtra    = 0 ;
	wndclass.cbWndExtra    = 0 ;
	wndclass.hInstance     = hInstance ;			//实例句柄
	wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;	//图标
	wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;		//光标
	wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);	//画刷
	wndclass.lpszMenuName  = NULL ;
	wndclass.lpszClassName = szAppName;				//类名称
	//注册
	if (!RegisterClass (&wndclass))
	{
		MessageBox (NULL, TEXT ("RegisterClass Fail!"), 
			szAppName, MB_ICONERROR) ;
		return 0 ;
	}
	
	//建立窗口
	HWND hwnd ;
	hwnd = CreateWindow (szAppName,		//窗口类名称
		TEXT ("The Hello Program"),		//窗口标题 
		WS_OVERLAPPEDWINDOW,		//窗口风格
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,			//实例句柄
		NULL);
	
	ShowWindow (hwnd, iCmdShow) ;
	UpdateWindow (hwnd) ;
	
	//消息循环
	MSG          msg ;
	while (GetMessage (&msg, NULL, 0, 0))	//从消息队列中取消息 
	{
		TranslateMessage (&msg) ;		//转换消息
		DispatchMessage (&msg) ;		//派发消息
	}
	return msg.wParam ;
}
Windows 窗口程序结构详解 文章目录引言些基础知识的介绍二、Windows程序结构三、第个窗口程序的流程四、代码实现五、运行平台 引言 众所周知,我们只要使用Windows的操作系统,必然离不开Windows的界面程序,无论是用什么语言(c 、c++、汇编、或是易语言),什么编译器,只要是带图形界面的PE文件,运行时必然带有Windows子系统,也就是说,遵循Windows界面程序结构。 那么,我们如果掌握了这... 阅读详情

相关推荐

SDK课(Windows SDK编程入门)

SDK (Software Development Kit) 软件开发工具包 Windows应用接口程序接口(API)(应用程序<--------->操作系统<--------->输出输入设备) A:API(Application Programming Interface,应用编程接口) B:内核对象(用户模式和内核模式权限级别) 内核:M0到M3 用户:M0和M3(最...

weixin_42465002的博客 8947

Windows+CE+6.0开发者指南(最新第四版) 源码及SDK.rar

Windows CE6.0开发者参考》包含“Windows编程基础”、“Windows CE编程”、“高级Windows CE”三部分内容,帮助你全面了解Windows CE操作系统。同时包含大量Windows CE示例程序,所有的例子都是直接用API编写的,教会你如何编写Windows CE程序Windows CE API的知识可以使我们更高效地使用MFC。 《Windows CE6.0开发者参考》是为所有在Windows CE下开发应用程序的人编写的,能为他们提供有价值的信息,使他们更加轻而易举地完成自己的任务。

Kinect for Windows SDK v2.0 开发笔记 (十八) Fusion 基本2D显示

使用SDK2.0, 显示Kinect基本Fusion图像, 进行场景即时重建

dustpg的专栏 1万+

win32 sdk 连接数据库,控件使用实例

win32 sdk 连接数据库,控件使用实例,连接Access,绝对可以运行

Windows程式的最基本的架構

from http://www.wretch.cc/blog/awaysu/22955929  [Awaysu] Windows程式的最基本的架構 很寫程式的人都不太清楚Windows程式的架構,你可以用Visual Studio 2005來開個Project,從裡面的code你就可以知道Windows程式的最基本的架構,包含WinMain : 是程式主要架

happyzeus的专栏 291

手把手教学:如何设计 SDK

既然我们已经从零到完成了 App 的开发工作,那这次不妨来试试编写属于我们的第SDK 吧!

finogeeks的博客 4707

游戏SDK(三)架构设计之代码实现1

游戏SDK架构设计代码实现

MarinaTsang的博客 1365

Windows SDK笔记():Windows程序基本结构

Windows SDK笔记():Windows程序基本结构 2011年05月30日   客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。   LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)   {   switch (...

vba150qf 128

Platform SDKWindows SDK简介

Platform SDKWindows SDK简介 由于经常游离于WINDOWS版本之间,复习下内容和些历史渊源 转载自 https://www.cnblogs.com/kekec/p/3912148.html(可可西-Platform SDKWindows SDK简介) Platform SDKWindows SDK是由微软公司出品的个软件开发包,向在微软的Windows操作...

苏围墙的博客 5879

Windows程序基本结构-Windows SDK笔记

Windows SDK笔记()Windows程序基本结构 、概述 Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。 程序中只要按定的格式填写系统留给客户的那小部分。 所需要完成的有: 窗口类的定义、窗口的建立、消息函数的书写、消息循环。 二、消息处理函数 Windows程序是事件驱动的,对于个窗口,它的大部分例行维护是

Wait的专栏 1627

Windows 11安装Windows SDK详细教程

Windows 11安装Windows SDK详细教程

世界那么大,我想去看看~【随心更新,看世界去了😄】 1万+

ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序前言操作方法总结 前言 在以往,我都是在linux上安装了xilinx vivado,然后执行以下语句 source /opt/Xilinx/Vivado/2018.2/settings64.sh export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 然后就可以用交叉编译工具ar.

gzy0506的博客 9340

从零开始:用Win32 SDK构建MFC风格的Windows程序

控件的使用与自定义是提高用户交互体验的关键步骤。本节将讲解如何创建和使用常用控件,以及如何自定义控件。在某些情况下,标准控件无法满足特定的用户界面需求,这时需要自定义控件。自定义控件需要处理消息,并根据消息绘制和行为。下面的代码展示了如何实现个简单的自定义控件:// 自定义控件的消息处理函数// 在这里添加绘制代码break;// 其他消息处理...default:return 0;// 创建自定义控件"CustomControlClass", // 自定义控件的类名。

weixin_29155599的博客 1092

: Windows SDK笔记

原文: http://www.cppblog.com/Lee7/archive/2008/11/07/66226.html Windows SDK笔记()Windows程序基本结构 、概述Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。 程序中只要按定的格式填写系统留给客户的那小部分。 所需要完成的有: 窗口类的定义、窗口的建立...

akkcy26820的专栏 189

MFC 第1章:用 VS2019 编写 WIndows SDK 程序

用 VS2019 编写 Windows SDK 程序的流程

2401_82825368的博客 882

使用Delphi,SDK编写Windows简单程序

        接触Delphi也已经有好长时间了,使用Delphi进行程序开发非常方便、快速,Delphi本身就提供了大量的组件(网上还有更的组件)进行程序开发,这大大减轻了程序员的工作量,但是越方便越说明Delphi本身在背后为我们做的工作就越,也许很人没有考虑过这些,还在充分的享受着它带给我们的快捷与方便。我也是个C的爱好者,学习和使用C也有好长段时间了,学了C/C++以后,要进

乱弹琴 1779
上一篇: 一个程序员的成长的六个阶段
下一篇: Windows SDK笔记(五):非模式对话框
flashsj
博客等级 码龄25年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值