sic
作用为在应用程序中播放音频内容的DirectMusic ,在DirectX 7及后续版本中被移除。DirectMusic提供了与底层音频与硬件沟通的渠道,在众多的DirectX相关教程中叱咤风云多年。
现今,在游戏和多媒体应用相关的音频操作中,我们使用XAudio2(底层)或XACT3(高层)来替代服役了多年的,颇具疲态的DirectMusic
5. DirectSoun
DirectSound是DirectX中另一款被废置的底层音频API,现今被XAudio2取代。
三、第一个DirectX Demo
学习DirectX的最好方式就是勤动手,从头开始一步一步创建简单的demo应用程序。在接下来连续的几篇文章中,我们将一起通过一步步简单的操作,创建我们的第一个DirectX应用程序。随着学习的深入,我们将对D3D从开始设置到结束过程有一个坚实的认识。
Ⅰ.工程的创建
首先我们需要创建一个工程。
创建一个空白的Win32 窗口新工程请执行以下步骤:
1. 打开Visual Studio 2010,从菜单中依次选择 【文件】->【新建】->【工程】
(【File】 > 【New】 > 【Project】),这时会弹出一个新建工程的对话框,如下图 2
图2
弹出如下窗口:
2. 我们以“BlankWindowDemo”作为工程名,然后在工程模板列表中选择“EmptyProject”,完成后,点击OK按钮,如图4
3.点击“完成”按钮。
一个新的空工程就创建完毕了。下一步就是在工程中添加模板代码了。
Ⅱ.代码的书写
完成上面的步骤,Visual Studio 2010已经为我们创建好一个空的工程了,下一步就是加入源代码来初始化主程序的窗口了。我们以添加一个空白的Cpp文件到工程中开始,这个文件将称为我们的main源程序文件,我们将它命名为main.cpp。创建main.cpp文件的步骤如下:
⑴ 在Visual Studio的资源管理器中右击源文件文件夹,然后在弹出的对话框中选择【Add New Item】,如图5
⑵ 在弹出的对话框中选择C++源文件类型,命名为main.cpp。如图6
⑶点击“OK”完成。
在工程中创建好main.cpp源文件后,我们便可以在其中添加完成Win32空白窗口工作的源代码。一旦我们加入了主程序入口点的代码,我们就可以初始化D3D 11然后利用D3D渲染窗口画布。
代码讲解之一:主函数入口点
main.cpp需要注意的第一个要点是包含必要的Win32头文件和入口点函数。我们应该知道,Win32应用程序的入口点是WinMain函数。目前为止,我们只需要在源文件顶部包括Windows.h头文件即可。在代码段1中可以看到空的WinMain函数和main.cpp的开始部分。
代码段1:Blank Win32 Window Demo书写步骤之一:wWinMain 函数框架
[cpp]
#include
int WINAPI wWinMain( HINSTANCEhInstance , HINSTANCE prevInstance,
LPWSTRcmdLine , int cmdShow )
{
return0;
}
#include
int WINAPI wWinMain( HINSTANCEhInstance , HINSTANCE prevInstance,
LPWSTRcmdLine , int cmdShow )
{
return0;
}
在上面的代码中我们可以看到用wWinMain替换了一般情况下会采用的WinMain。两者的区别是wWinMain用来处理Unicode类型的变量,特别是它的第三个参数cmdLine,而WinMain会执行Unicode和ANSI之间的转换。而这样的转换可能导致缺少一个Unicode字符串中的字符。所以运用wWinMain能让我们正确的处理被传递给应用程序的Unicode类型的参数。
(w)WinMain函数有四个参数。这些参数被定义为如下:
▲HINSTANCE hInstance.应用程序的当前句柄实例
▲HINSTANCEprevInstance. 应用程序的之前句柄实例。MSDN文档中表明这个参数恒为NULL。由于此参数恒为NULL,如果我们需要找到一个判断之前应用程序的实例是否运行的方法,文档中建议我们可以利用CreateMutex函数创建一个唯一命名的互斥变量(mutex)。若该互斥变量被创建了,CreateMutex函数将返回ERROR_ALREADY_EXISTS。
▲LPSTR cmdLine (orLPWSTR in Unicode). 应用程序不包括程序名的命令行指令。
这使得我们可以将命令行指令传递给应用程序,比如在命令提示行中利用命令行字符串提供的快捷操作。
▲int cmdShow. 一个窗口如何被显示的特殊的ID,可取很多已有完善的代码支持的ID。具体取值见下表:
ID值名称
描述
SW_HIDE
隐藏此窗口,激活其他窗口
SW_SHOW
以当前的尺寸和位置激活和显示该窗口
SW_SHOWNA
以当前的状态显示该窗口,并保持激活状态
SW_SHOWNOACTIVATE
用最近的尺寸和大小显示一个窗口,并保持激活状态
SW_SHOWNORMAL
激活和显示一个窗口,如果这个窗口是最小化或者最大化,系统将它重置为原始尺寸和位置(与SW_RESORE相同)
在窗口创建过程中显示窗口的时候,需要使用show ID命令,后面中我们会具体讲解。
代码讲解之二:窗口的初始化
如果没有进行窗口创建过程的话,即使应用程序运行了,也不会在屏幕上显示出来。所以下一步我们的任务是创建Win32窗口。首先,我们注册窗口类,然后创建窗口本身。如代码段2中所述。应用程序必须在系统中注册它的窗口。
代码段2:Blank Win32 Window Demo书写步骤之二:窗口的注册和创建
[cpp]
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCEprevInstance,
LPWSTR cmdLine, int cmdShow )
{
UNREFERENCED_PARAMETER( prevInstance );
UNREFERENCED_PARAMETER( cmdLine );
WNDCLASSEX wndClass = { 0 };
wndClass.cbSize = sizeof( WNDCLASSEX ) ;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
wndClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = "DIRECTX11BookWindowClass";