📄 robot2.cpp
字号:
#define INITGUID
#include "Robot2.h"
#include "Utility.h"
#include "resource.h"
#include <mmsystem.h>
// Sound identifiers
int g_aiSoundIds[] =
{
WAV_BLADDLE,
WAV_COW,
WAV_GAMESHOW,
WAV_GARGLE,
WAV_LAUGH,
WAV_OHNO,
WAV_OOOO,
WAV_OUCH,
WAV_TAXI
};
// Constant that tracks the number of longer sounds
static const ULONG g_ulNumOtherSounds =
sizeof(g_aiSoundIds) / sizeof(int);
IMPLEMENT_DYNCREATE(ComNoisyRobot, CCmdTarget)
IMPLEMENT_OLECREATE(ComNoisyRobot, "NoisyRobot",
0xf8d4bfd6, 0x4277, 0x11d0, 0x8b, 0xe2, 0xad, 0x32, 0xe5, 0x41, 0xaf, 0xc);
BEGIN_INTERFACE_MAP(ComNoisyRobot, CCmdTarget)
INTERFACE_PART(ComNoisyRobot, IID_INoise, NoiseInner)
INTERFACE_AGGREGATE(ComNoisyRobot, m_pAggrIUnknown)
END_INTERFACE_MAP()
//
// Constructor and destructor
//
ComNoisyRobot::ComNoisyRobot()
: m_pAggrIUnknown(NULL)
{
VerboseMsg("In ComNoisyRobot constructor.\n");
// Seed the random number generator
SeedRandomGenerator();
// Allow other components to aggregate us if they need to
EnableAggregation();
AfxOleLockApp();
}
ComNoisyRobot::~ComNoisyRobot()
{
VerboseMsg("In ComNoisyRobot destructor.\n");
// Release our aggregate
if (m_pAggrIUnknown) {
m_pAggrIUnknown->Release();
m_pAggrIUnknown = NULL;
}
AfxOleUnlockApp();
}
//
// Virtual functions overriden from CCmdTarget
//
BOOL ComNoisyRobot::OnCreateAggregates()
{
HRESULT hResult;
// Create a new Robot object to aggregate with
VerboseMsg("Creating new Robot aggregate.\n");
hResult = CoCreateInstance(CLSID_Robot,
GetControllingUnknown(),
CLSCTX_INPROC_SERVER,
IID_IUnknown,
(PPVOID) &m_pAggrIUnknown);
if (FAILED(hResult)) {
ReportError("Could not create a new Robot aggregate.", hResult);
return FALSE;
}
return TRUE;
}
//
// Nested Robot IUnknown members
//
STDMETHODIMP_(ULONG)
ComNoisyRobot::XNoiseInner::AddRef()
{
METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
return pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG)
ComNoisyRobot::XNoiseInner::Release()
{
METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
return pThis->ExternalRelease();
}
STDMETHODIMP
ComNoisyRobot::XNoiseInner::QueryInterface(REFIID riid, PPVOID ppv)
{
METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
return pThis->ExternalQueryInterface(&riid, ppv);
}
//
// INoise interface members for nested Noise class
//
STDMETHODIMP
ComNoisyRobot::XNoiseInner::MakeNoise()
{
METHOD_PROLOGUE(ComNoisyRobot, NoiseInner)
VerboseMsg("In XNoiseInner::MakeNoise\n");
PlaySound(MAKEINTRESOURCE(g_aiSoundIds[rand() % g_ulNumOtherSounds]),
AfxGetResourceHandle(),
SND_RESOURCE | SND_ASYNC);
return NOERROR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -