windows程序基础

news2024/11/25 2:56:45

一、windows程序基础

1. Windows程序的特点
1.用户界面统一、友好
2.支持多任务:允许用户同时运行多个应用程序(窗口)
3.独立于设备的图形操作
        使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异,提供了设备无关的图形输出能力
4.队列化消息输入,支持队列特征的消息驱动模型
        把从键盘、鼠标等输入设备接收的输入信息放入应用程序的队列中; Windows操作系统管理队列;应用程序需要输入信息时,不读硬件端口,只读消息队列。
5.事件驱动的程序设计
        - Windows程序由事件的发展控制,允许程序的用户用各种合理的顺序来安排程序的流程。
6.资源共享
        -各个应用程序共享系统提供的资源,包括设备上下文、画刷、画笔、字体、对话框、图标、定时器、通信端口。

7.程序和资源分开
        -菜单、对话框、位图等可视对象被单独分离出来加公的,全部资源定义都放在资源文件中(通常以.rc为后缀名)
8.支持应用程序间的数据交换

2. 一个简单的Windows应用程序

#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINS TANCE
hPrevInstance, LPSTR IpCmdLine, int nCmdShow)
{
MessageBox (NULL, "你好,我的Visual C++世界! ", "问候",MB_ OKCANCEL);
return 0 ;
}

运行结果:

3.事件及事件驱动
●Windows系统也叫事件驱动的系统。当用户按下一个键、移动鼠标或单击鼠标按钮时,计算机通知Windows系统已经发生了一一个事件,以及事件的种类、发生的时间、发生的位置(如坐标值)。
●事件通常以下列三种方式产生:
        -通过输入设备,如键盘和鼠标;
        -通过屏幕上可视的对象,如菜单、工具栏按钮、动条和对话框上的控件;
        -来自Windows内部,如当一个后面的窗口显示到窗口前面时。

基于事件驱动的程序模型

 4.消息
        ●当Windows捕获一 条事件后 ,它会编写一条消息,将相关信息放入一个数据结构MSG中,然后将包含此数据结构的消息发给需要消息的程序。。
        ●消息处理是Windows应用程序的核心。

        ●消息是操作系统通知应用程序某件事情已经发生的一种方式。

        ●Windows消息是在Windows.h文件中用宏定义的常数。
        ●消息常数名常以WM_ 开头,格式为WM_XX。

(1)Windows消息来源
Windows应用程序的消息来源于以下四种:
(1)输入消息:键盘和鼠标的输入。此类消息先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。
(2)控制消息:与Windows的控制对象,如列表框、复选框等进行双向通信。这类消息一般不经过应用程序的消息队列,而是直接发送到控制对象。
(3)系统消息:对程序化的事件或系统时钟中断作出的一些反应。
(4)用户消息:程序员自己定义并在应用程序中主动发生的,一般由应用程序的某一部分内部处理。
        VC+ +存在几种系统定义的消息分类,不同的前缀符号经常用于识别不同的消息类,系统定义的消息宏前缀如下:
        BM :按钮控制消息
        CB :组合框控制消息
        DM :默认下压式按钮控制消息
        EM :编辑控制消息
        LB :列表框控制消息
        SBM :滚动条控制消息
        WM :窗口控制消息

(2)Windows消息数据结构
        消息号:由事先定义好的消息名标识
        字参数(wParam) :用于提供消息的附加信息
        长字参数(IParam) :用于提供消息的附加信息

Windows消息的数据结构

typedef struct tagMSG 
{
HWND hwnd; //窗口句柄,为nul则可检索所有驻留在消息队交中的消息
UINT message; //消息值,由Windows h头文件中的宏定义标识
WPARAM wParam; //包含有关消息的附加信息,不同消息其值不同
LPARAM IParam;
DWORD time; 1指定消息送至队列的时间
POINT p:/消息发送时屏幕光标位置,POINT是一个结构体
}MSG;

        注意:字参与长字参是作为消息的附加信息的,它与具体消息号的值有关;Windows中消息用结构体MSG表示;DWORD是32位无符号整型;

        POINT是一个结构体:

typedef struct tagPOINT
{
LONGX;
LONG y; 
}POINT,

二、消息队列和API

1. Windows消息队列
        ●当产生某消息时,该消息进入消息队列,操作系统根据消息提供的信息值决定由哪个应用程序来处理;

        ●应用程序按一定的方式查找应用程序中各个类的消息映射(一组宏,用来确定某个消息及相应的处理程序;的对应关系) ;

        ●找到处理程序后,由处理程序执行相应的操作。

        ●消息队列是一一个系统定义的内存块,用于临时存储消息,或把消息直接发给窗口函数。
        ●每个窗口维护自己的消息队列,并从队列中取出消息,利用窗口函数进行处理。

2. Windows程序常用消息
( 1 )标准Windows消息(前缀为WM_ )
        分为三类:鼠标消息、键盘消息和窗口消息
 (2)控件消息
        控件或其他子窗口向父窗口发送WM_ COMMAND消息

(3 )命令消息
        菜单项、工具栏按钮、加速键等用户界面对象发送的WM_ COMMAND消息。

●焦点消息: WM_ SETFOCUS,WM_ KILLFOCUS
●定时器消息: WM_ TIMER

        ( 1 )标准Windows消息- -鼠标消息

                -WM_ LBUTTONDOWN :单击鼠标左键时产生的消息
                -WM_ LBUTTONUP :放开鼠标左键时产生的消息
                -WM_ RBUTTONDOWN ;单击鼠标右键时产生的消息
                -WM_ RBUTTONUP :放开鼠标右键时产生的消息
                -WM_ LBUTTONDBLCLK :双击鼠标左键时产生的消息

                -WM_ RBUTTONDBLCLK :双击鼠标右键时产生的
                -WM_ MOUSEMOVE :鼠标在窗C中移动时产生的

        ( 1 )标准Windows消息- -键盘消息
        -WM_KEYDOWN :按下一一个非系统键时产生的消息,附加信息参数wParam为按下键的虚拟键码,虚拟键码用以标识按下或释放的键, IParam记录按键的重复次数、扫描码等状态信息;
        - WM_KEYUP :弹起一个非系统键时产生的消息
        - WM_CHAR :按下一个非系统键时产生的消息加信息参数wParam为按下键的ASCII码,IPare的意思同上;
        ( 1 )标准Windows消息- -窗口消息
                - WM_CREATE : CreateWindows函数产生的消息;
                -WM_CLOSE :关闭窗口时产生的消息;
                - WM_DESTROY :消除窗口时由DestroyWindows()发出的消息
                - WM_QUIT :退出应用程序时由PostQuitMessage()发出的消息
                - WM_ PAINT ; Windows系统需重绘时产生的消息。
               - WM_ SIZE
                - WM_MOVE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“新基建”重新定义大数据安全

摘要&#xff1a;数字信息经济发展时代,大数据已逐渐成为最新和最重要的生产要素。国家大力支持推进“新基建”发展战略,由此带来的大数据安全挑战俨然愈发严峻。“新基建”重新定义了大数据安全&#xff0c;面对层出不穷的网络安全事件,需要构建主动安全防御体系。 关键词:新…

前端开发环境搭建,换新电脑前端开发的步骤,node环境配置

一、下载安装nodeJS 1、下载地址官方网址 NodeJs 2、下载完成后&#xff0c;双击“node-v11.5.0-x64.msi”&#xff0c;开始安装Node.js&#xff0c;一路next&#xff0c;注意&#xff1a;安装目录看自己需求&#xff0c;本人安装在D:\nodejs目录下 3、测试 键盘按下【winR…

Kotlin读写分离CopyOnWriteArrayList

Kotlin读写分离CopyOnWriteArrayList 基于读写分离思想Copy-On-Write(COW)设计的线程安全ArrayList变体&#xff0c;读读共享、写写互斥、读写互斥、写读互斥。读时直接读&#xff0c;不用加锁同步&#xff0c;线程安全。写/删/修改数据时复制一个副本&#xff0c;在新的List副…

挣钱和赚钱是两个概念

挣钱和赚钱虽然听起来很相似&#xff0c;但实际上是两个完全不同的概念。 挣钱通常指的是通过劳动或者服务换取报酬&#xff0c;比如说工资、兼职、打零工等等。而赚钱则是指通过投资、创业等方式获得利润或者收益。 挣钱是一种被动的收入方式&#xff0c;需要付出时间和劳动才…

政策因子条件列表类型

type:1&#xff08;多选下拉输入&#xff09; 目前选项是本地写死得&#xff0c;传参拼接了carOwner这些东西&#xff0c;形式是多选输入 type:2 &#xff08;普通指定形式&#xff09; type:3&#xff08;普通区间形式&#xff09; type:4 (指定输入) 指定除外得特殊一种&…

Chrome浏览器安装Axure插件无法打开本地axure文件

Chrome浏览器安装Axure插件无法打开本地axure文件 Chrome浏览器按照axure插件即可打开 1&#xff0c;下载axure插件&#xff0c;由于Chrome国内连不了商店&#xff0c;只能另外下载 https://download.csdn.net/download/u013303534/88204888 2&#xff0c;Chrome安装插件&#…

c++11 标准模板(STL)(std::basic_stringbuf)(二)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…

从零开始学习 Java:简单易懂的入门指南之抽象类接口内部类(十一)

面向对象进阶&#xff08;抽象类&接口&内部类&#xff09; 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接…

排序算法——基数排序(C语言)

基数排序的概念&#xff1a; 什么是基数排序&#xff1f;&#xff1f;&#xff1f;基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O&#xff08;K*N&#xff09;&#xff0c;空间复杂度是O&#xff08;KM&…

【C语言】memcpy()函数

目录 一.memcpy()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.const void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memcpy()函数的具体使用 1.使用memcpy()函数完成拷贝整型数组数据 2.使用memcpy()函数拷贝结构体数据 三.模…

善于用兵的人,军队粮草取自敌人

善于用兵的人&#xff0c;军队粮草取自敌人 【安志强趣讲《孙子兵法》第8讲】 【原文】 善用兵者&#xff0c;役不再籍&#xff0c;粮不三载&#xff1b;取用于国&#xff0c;因粮于敌&#xff0c;故军食可足也。 【注释】 役不再籍&#xff1a;役&#xff0c;兵役&#xff1b;…

横向移动-域控提权

横向移动-域控提权 CVE-2021-42287 由于Active Directory没有对域中计算机和服务器账号进行验证&#xff0c;经过身份验证的攻击者利用该漏洞绕过完全限制&#xff0c;可将域中普通用户权限提升为域管理员权限并执行任意代码。 利用条件 前提条件&#xff1a;一个域内普通账…

js jquery写一个画板 实现撤回、清空、换色的功能

画布的canvas画板的大小就是这个画板图片的大小 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><metaname"viewport&qu…

鸿蒙剥离 AOSP 不兼容 Android 热门问题汇总,不吹不黑不吵

上周发了一篇 《鸿蒙终于不套壳了&#xff1f;纯血 HarmonyOS NEXT 即将到来》的相关资讯&#xff0c;没想到大家「讨&#xff08;fa&#xff09;论&#xff08;xie&#xff09;」的热情很高&#xff0c;莫名蹭了一波流量&#xff0c;虽然流量对我来说也没什么用&#xff0c;但…

HOT82-杨辉三角

leetcode原题链接&#xff1a;杨辉三角 题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例…

python什么版本比较稳定,python哪个版本用得最多

这篇文章主要介绍了哪个版本的python最好用&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 想学习Python的人都会有一个困惑&#xff0c;那就是Python目前有两个版本Python2和…

windows下dll文件的创建详细教程

1、前言 dll文件是啥&#xff0c;就不作过多赘述了。现在直接教大家如何创建与使用dll文件。 本文基于windows系统&#xff0c;使用的编译相关工具为visual studio 2019。 2、创建dll 2.1 创建dll工程 首先打开visual studio&#xff0c;然后选择创建新项目&#xff0c;在搜…

11、Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow Pytorch版本

Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow-GPU版本 一、确定版本关系二、安装过程1.安装显卡驱动2、安装CUDA3、安装cudnn4、安装TensorFlow5、安装pytorch 三、卸载 一、确定版本关系 TensorFlow Pytorch推出cuda和cudnn的版本&#xff0c;cuda版本推出驱动可选版本…

【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux之docker搭…

PyTorch深度学习实战(11)——卷积神经网络

PyTorch深度学习实战&#xff08;11&#xff09;——卷积神经网络 0. 前言1. 全连接网络的缺陷2. 卷积神经网络基本组件2.1 卷积2.2 步幅和填充2.3 池化2.3 卷积神经网络完整流程 3. 卷积和池化相比全连接网络的优势4. 使用 PyTorch 构建卷积神经网络4.1 使用 PyTorch 构建 CNN…