windows 编程基础
Windows编程概述
- windows 是一个具有可视化图形用户界面的多任务操作系统,它为用户提供了风格统一的窗口、菜单、工具栏等界面元素所构成的多任务环境。
- 可以把windows 看成一个软件,对其进行编程就是去调用其接口去实现功能。
- 一个软件有两个部分,一个是逻辑,一个是绘制。
- “窗口”是windows程序实现的基础,大多数windows程序都是以窗口的方式运行的。
- windows程序设计是一种事件驱动方式的程序设计模式,主要是基于消息机制。
当用户完成对应用程序(窗口)的某种操作时就会调用操作系统的某种支持,操作系统会将用户的操作包装成消息,并发送到到一个应用程序可以访问的消息队列 中,最后应用程序从消息队列中取走消息,并进行相应。
一、windows 操作系统的特点
-
直观、高效、统一的面向对象的图形用户界面,易学易用。
-
丰富的设备无关的图形操作
-
多任务多进程,各个应用程序共享系统提供的资源,
所有资源的使用步骤:
- 向Windows系统请示资源。
- 使用该资源。
- 释放在该资源给Windows以供别的程序使用。
二、Windows程序模块
- 控制台应用程序
- 窗口应用程序**(win32的主要学习)**
- 动态库
- 静态库
入口函数是winmain
int WINAPI WinMain(HINSTANCE hlnstance, //应用程序实例句柄
HINSTANCE hPrevlnstance,//父应用程序实例句柄(没什么用)
LPSTR lpCmdLine, //命令行参数
int nShowCmd //窗口显示方式
)
三、win32的数据类型
#include <windows.h>
int WinMain(HINSTANCE HInstance,HINSTANCE hPrecinstace,
LPSTR lpCmdLine,int nSHowCmd)
{
MessageBox(0,0,0,0);
return 0;
}
-
LPSTR 就是char
-
win32的数据类型,转定义就可以看到他是对c c++的数据类型的封装。在C/C++的基础上做出类型的重定义。
-
**windoes数据类型全是大写。**的作用:1. 去区别C/C++语言。2.顾名思义。 3.封装信息。
特性:
大写H开头,在win32里面叫句柄
句柄是什么:
句柄是为了准确地访问到对象。
数值上,是一个32位无符号整型值(32位系统下);逻辑上,相当于指针的指针;形象理解上,是Windows中各个对象的一个唯一的、固定不变的ID;作用上,Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。
P,LP开头,在win32里面表示指针。
windoes数据类型全是大写。
四、消息盒子
MessageBox(
nullptr, //窗口句柄,这个消息是基于哪个窗口弹出的。
"abc", //消息盒子文本
"123", //消息盒子标题
MB_YESNOCANCEL|MB_ICONWARNING); //消息盒子的类型
函数的使用:
- 函数的作用
- 函数的名字
- 函数的参数
- 函数的返回值
五、字符集
-
在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用那个编码代表,要取决于使用那个字符集(charset)。
-
字符编码:ascii、GB_2312等。
-
Win32经常使用:多字符集 —— 一个字母一个字节,一个汉字两个字节。
宽字符集 —— 不论汉字字母,都是两个字节。
字符集的选择
-
自行设定
用固定的类型去表现字符或字符串,char(多字节字符集)或wchar_t(宽字符字符集)。
-
统一
使用字符的通配符"_T"。#include <tchar.h>
_t("<字符>");
-
win32函数中如果在后缀有大写的A或W,那么A对应多字节,W对应宽字符节。通常情况下也会有一个没有后缀为A或W的同名函数,根据字符集不同的设定来通配
相应的字符串处理函数也有通配符
_tcslen(<字符变量名>)长度
_tcscpy(<字符变量名>)复制
六、音乐播放
1、mav格式
#include <windows.h>
#pragma comment(lib,("Winmm.lib"))
playsound(_T("<歌名.mav>"),//文件名路径,一般用相对路径
nullptr, //应用程序实例句柄
SND_LOOP|SND_FILENAME|SND_ASYNC
);
//SND_LOOP 循环|SND_FILENAME指定文件|SND_ASYNC异步
2、mp3格式
mciSendString(_T("open<歌名.mp3> aliac abc") //命令字符串,open打开*.mp3文件,alias取了一个叫abc的外号。
nullptr, //接受信息的缓冲区,null表示不接受信息
0, //第二个参数的内存的大小(缓冲区大小)。
nullptr); //回调函数的窗口句柄。
mciSendString(_T("play abc"),0,0,0);//播放音乐