您的位置:首页 > 编程语言

【Windows编程】笔记-添加音效与窗口创建

2015-12-05 09:31 519 查看
<strong><span style="color: rgb(51, 102, 255);"><span style="font-size:32px;">
</span></span></strong>
<span style="font-size:14px;">                                                                                            ——学习《windows游戏编程从零开始》(毛星云)笔记</span>
<strong><span style="color: rgb(51, 102, 255);"><span style="font-size:32px;">一.添加音效(PlaySound函数)</span></span></strong>
<span style="font-size:18px;">#include<Windows.h>
#include "stdafx.h"
#pragma comment(lib,"winmm.lib")     //链接PlaySound函数所需的winmm.lib库文件

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

PlaySound(L"msg.wav", NULL, SND_FILENAME | SND_ASYNC);  //播放音效
MessageBox(NULL, L"你好,DSF!", L"消息窗口", 0);       //显示一个消息窗口
return 0;</span>
<span style="font-size:18px;">}</span>
<img src="https://img-blog.csdn.net/20151205093051048?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="500" alt="" />
<span style="font-size:32px;color:#3366ff;"><strong>二.窗口创建</strong></span>
<span style="font-size:18px;color:#009900;"><strong>(1)窗口类的设计</strong></span>
<pre name="code" class="cpp">#include<Windows.h>
#include "stdafx.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //声名消息处理函数(处理windows和接收windows消息)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

/*设计一个完整的窗口类*/
WNDCLASSEX wndClass = { 0 }; //用WNDCLASSEX定义一个窗口类,即用winClass实例化了WNDCLASSEX,用于之后窗口的各项初始化。
wndClass.cbSize = sizeof(WNDCLASSEX); //设置结构体的字节数大小
wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口样式
wndClass.lpfnWndProc = WndProc;  //设置指向窗口过程函数的指针
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;  //指定包含窗口过程的程序的实例句柄
wndClass.hIcon = (HICON)::LoadImage(NULL, _T("icon.ico"), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);//从全局的::LoadImage函数从本地加载自定义ico图标
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字
wndClass.lpszClassName = _T("ForTheDreamOfGameDevelop"); //用一个以空终止的字符串,指定窗口类的名字
……
}
<span style="font-size:18px;color:#009900;"><strong>(2)窗口类的注册</strong></span>
我们在设计完窗口类(WNDCLASSEX)后,需要调用RegisterClassEx函数对其进行注册,注册成功后,才可以创建该类型的窗口
<span style="white-space:pre">	</span>ATOM WINAPI RegisterClassEx(
<span style="white-space:pre">		</span>_In_const WNDCLASSEX *lpwcx
<span style="white-space:pre">	</span>);
(3)窗口的正式创建
用CreateWindow函数创建。
要注意的是,在窗口创建之前先定义一个窗口句柄变量,来接收创建窗口之后返回的句柄值。
喜闻乐见的创建窗口函数
<pre name="code" class="html">HWND hWnd = CreateWindow(_T("ForTheDreamOfGameDevelop"),
L"你好明天!",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800,600,NULL
4000
, NULL, hInstance, NULL);
(3)窗口的显示与更新
①改变窗口位置与大小(MoveWindows函数)
②显示窗口(ShowWindows函数)
③更新窗口(UpdateWindows函数)
<span style="font-size:32px;color:#339999;"><strong>三.消息循环体系</strong></span>
<span style="font-size:18px;color:#009900;"><strong>(1)以GetMessage为核心的消息循环体系</strong></span>
MSG msg = {0};  //定义并初始化消息
while (GetMessage(&msg,NULL,0,0)) //不断从消息队列中取出消息
{
TranslateMessage(&msg); //将虚拟键消息转换为字符消息
DispatchMessage(&msg); //分发一个消息给窗口程序
}
<span style="font-size:18px;color:#009900;"><strong>(2)以PeekMessage为核心的消息循环体系(更常用)</strong></span>
<span style="white-space:pre">	</span>MSG msg = { 0 };  //定义并初始化msg<span style="white-space:pre">	</span>while (msg.message != WM_QUIT) //使用while循环,如果消息不是WM_QUIT消息,就继续循环<span style="white-space:pre">	</span>{<span style="white-space:pre">		</span>if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) //查看应用程序消息队列,有消息时将队列中的消息派发出去,没有消息时依然继续往下执行<span style="white-space:pre">		</span>{<span style="white-space:pre">			</span>TranslateMessage(&msg); //将虚拟键消息转换为字符消息<span style="white-space:pre">			</span>DispatchMessage(&msg); //分发一个消息给窗口程序<span style="white-space:pre">		</span>}<span style="white-space:pre">		</span>else<span style="white-space:pre">		</span>{<span style="white-space:pre">			</span>Direct3D_Update(hwnd);  //调用更新函数,进行画面的更新<span style="white-space:pre">			</span>Direct3D_Render(hwnd);  //调用渲染函数,进行画面的渲染<span style="white-space:pre">		</span>}<span style="white-space:pre">	</span>}
PeekMesssage函数无论应用程序消息队列是否有消息,PeekMessage函数都立即返回,程序得以继续执行后面的语句,而GetMessage函数只有在消息队列中有消息时才返回队列中无消息就一直等。四. 窗口过程函数——Windows程序的“中枢神经”主要用于处理发送给窗口的消息。窗口过程函数比较特殊,它的名字在实际编写程序中可以随便取,不一定非要叫windowProc,但是函数的定义形式必须和声明格式一致。系统通过窗口过程函数的地址(指针)来调用窗口过程函数,而不是通过函数的名字来调用。
</pre><br /><br /><pre>
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: