win32应用程序的第一章
1最简单的win32窗口的创建
这里呢我把win32窗口的创建作为第一个知识分享给大家,也算我对他的一个巩固了。嘿嘿
这里我要说明的是创建这个窗口有两种方法(当然是对于萌新来说),第一就是我们学过的用函数来实现(定义,声明,调用),第二种就是直接在主函数里按顺序一一列出来,我这里就采用第一种吧,正好也对目前大家函数的学习一个实例吧。
第一节就是把详细的代码(超全注释)分享给大家,加上创建的步骤。
#include<Windows.h> //必备的一个头文件
#include<mmsystem.h> //多媒体头文件,播放音乐用的
#pragma comment (lib,"winmm.lib") //播放的库文件
#define windowWidth 800 //定义这个窗口的宽
#define windowHeight 600 //高
TCHAR szWindowClass[100] = TEXT("我的第一个多功能窗口"); //定义一个TCHAR型数组存放字符
ATOM MyRegisterClass(HINSTANCE hInstance); //窗口设计的函数声明
BOOL initInstance(HINSTANCE, int); //初始化函数的声明 也就是窗口的创建
LRESULT CALLBACK Wndproc(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam); //窗口过程处理函数 声明前置
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreIntance, LPSTR szCmdLine, int nCmdShow) //WIN32窗口入口函数
{
MSG msg; //定义一个消息
if (!MyRegisterClass(hInstance)) //如果失败
{
MessageBox(NULL, TEXT("创建失败"), szWindowClass, MB_ICONERROR); //就显示一个"创建失败"的对话框
return 0; //退出程序
}
initInstance(hInstance, nCmdShow); //调用
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); //翻译
DispatchMessage(&msg); //派送
}
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX ww; //这是一个窗口的类 具体的可以百度一下
ww.cbClsExtra = 0; //0
ww.cbSize = sizeof(WNDCLASSEX); //取大小
ww.cbWndExtra = 0; //附加信息 都设置0
ww.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //背景画刷 我设成灰的吧
ww.hInstance = hInstance; //当前实例句柄
ww.style = CS_HREDRAW | CS_VREDRAW; //窗口格式水平,垂直拉动
ww.lpszClassName = szWindowClass; //窗口类名
ww.hCursor = LoadCursor(NULL, IDC_ARROW); //光标
ww.hIcon = NULL; //图标
ww.lpszMenuName = NULL; //菜单名
ww.lpfnWndProc = Wndproc; //消息处理函数
ww.hIconSm = NULL; //小图标
// 登记窗口T
return RegisterClassEx(&ww);
}
BOOL initInstance(HINSTANCE hInstance, int nCmdShow) //窗口的创建
{
HWND hwnd;
//窗口的创建 窗口类名 标题名 显示方式 默认的起始位置 宽 高 照写 句柄
hwnd = CreateWindow(szWindowClass, TEXT("我的第一个多功能窗口"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, windowWidth, windowHeight, NULL, NULL, hInstance, NULL);
// 显示, 更新窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 播放 音乐
mciSendString(L"open ./res/mhtc.mp3 alias music", 0, 0, 0); //alias意思是取一个小名
mciSendString(L"play music repeat", 0, 0, 0); //repeat是循环播放
return TRUE;
}
LRESULT CALLBACK Wndproc(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam) //窗口过程处理函数 声明前置
{
switch (message) //对信息进行判断
{
case WM_DESTROY: //窗口摧毁
PostQuitMessage(0); //发送退出
break;
}
return DefWindowProc(hWnd, message, wparam, lparam);
}
终于打完了 这就是一个WIN32窗口的最基础模型,不论2D游戏还有3D游戏或者其他什么windows应用,都是基于这个小小的WIN32窗口,我在这里完全注释了每行都标明了。我是用函数来实现的这个窗口,起始分为7大步骤记忆我给罗列出来:
1.设计窗口
2.注册窗口
3.创建窗口
4.显示窗口
5.更新窗口
6.消息循环
7.消息处理函数
嗯就这七个步骤!!!!!
我在这里说明一下那个winmain入口函数其实它就等同于我们平时刷题时的int main 主函数,暂时可以理解为在win32窗口里换个名字。
我在里面添加了一段音乐就不枯燥了哈哈。
下面我把运行的截图给大家展示一下:
好啦,其实室友背景音乐的,哈哈,这里大家就听不到了,你们可以自己在网上下载一个mp3格式的音乐,在这里
mciSendString(L"open ./res/mhtc.mp3 alias music", 0, 0, 0);进行修改,好吧我先把这个函数给大家稍微讲解一下,播放多媒体文件的一个函数,它支持的文件格式MPEG,AVI,WAV,MP3,MID, 接下来对它的参数第一个 L"open ./res/mhtc.mp3 alias music",意思是打开项目里的res文件里的mhtc歌曲,我把歌名改为mhtc啦()就是梦回唐朝,格式是mp3, alias意思是给这个歌名取个别名 叫 music,后面的三个零建议目前照抄。
给大家看一下项目目录吧:(res是我们自己创建的文件夹用来存放项目需要的资源)
接下来看下resli里是啥
嘿嘿看到了吧就是这个歌曲,我觉得蛮好听的!!
大家肯定对这个win32窗口还存在了很多疑问,不要问我怎么知道的(因为我当初也是),首先依葫芦画瓢,自己创建一个win32窗口一步一步模仿写出来,一句一句的解读它的意义,不会的地方百度呀,()如果觉得百度有些地方讲的不过通俗易懂,可以私信我,我觉得用最逗逼却印象深刻的方法让你理解透彻。
当然有人会这样想,我现在还没学到这些,看这个有啥用呢?好吧我以亲身经历告诉你,学习它有助于你对前面基础知识更好的理解,并且能融合在一起运用,就能初步地实现一个知识框架体系。举个例子,上海比作一个项目,通往上海的道路有很多,每一个道路的每一个岔路口都是一个小的知识,而这个win32窗口就是所有道路中随便一条能通往上海的,就沿着这条路,(当然不是最优路法),但们通过这条路,就能知道其他的路和这条路方向都是一样的大概的路程也差不多。总体上有一个了解。这样对于我们今后的学习能产生一个深远的知识框架。当然这个肯定要私自下功夫,但是不下功夫又何谈收获呢。所以加油吧萌新们。
好了,这节就到这里,希望大家可以多练习,当然我写的这个代码肯定不是最优的,但是万变不离其宗,我们掌握的是思路。多敲代码吧。下节见。(学习中)