【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">
相关文章推荐
- C语言求出给出数据的素数的和以及素数的个数
- NSLog和@“字符串”
- Eclipse 修改maven 仓储Repository位置
- 我的第一个MATLAB程序
- JAVA设计模式之单例设计模式
- GitHub上整理的一些工具,求补充——转的,先mark了
- JAVA中的转义字符
- 【JAVA】集合交并补
- 制作一个简单的包含有过滤器的登录程序
- java流分析一个基础程序
- 开发笔记 - PHP返回的数据问题
- MATLAB and Octave Functions for Computer Vision
- 数组代码
- 阶乘代码
- AutoCAD.Net/C#.Net QQ群:193522571 System.Drawing.Color和AutoDesk.AutoCAD.Colors.Color互转
- 输出菱形代码
- 用Java注册用户并保存在数据库中
- 九九乘法表代码
- 【java】java内存模型 (1)--基础
- Java中如何将String转成Date