win32窗口创建之通俗易懂版

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窗口就是所有道路中随便一条能通往上海的,就沿着这条路,(当然不是最优路法),但们通过这条路,就能知道其他的路和这条路方向都是一样的大概的路程也差不多。总体上有一个了解。这样对于我们今后的学习能产生一个深远的知识框架。当然这个肯定要私自下功夫,但是不下功夫又何谈收获呢。所以加油吧萌新们。
好了,这节就到这里,希望大家可以多练习,当然我写的这个代码肯定不是最优的,但是万变不离其宗,我们掌握的是思路。多敲代码吧。下节见。(学习中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值