626 lines
20 KiB
C++
626 lines
20 KiB
C++
|
// DIConfigTestDlg.cpp : implementation file
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "DIConfigTest.h"
|
||
|
#include "DIConfigTestDlg.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAboutDlg dialog used for App About
|
||
|
|
||
|
class CAboutDlg : public CDialog
|
||
|
{
|
||
|
public:
|
||
|
CAboutDlg();
|
||
|
|
||
|
// Dialog Data
|
||
|
//{{AFX_DATA(CAboutDlg)
|
||
|
enum { IDD = IDD_ABOUTBOX };
|
||
|
//}}AFX_DATA
|
||
|
|
||
|
// ClassWizard generated virtual function overrides
|
||
|
//{{AFX_VIRTUAL(CAboutDlg)
|
||
|
protected:
|
||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||
|
//}}AFX_VIRTUAL
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
//{{AFX_MSG(CAboutDlg)
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CAboutDlg)
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CAboutDlg)
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
||
|
//{{AFX_MSG_MAP(CAboutDlg)
|
||
|
// No message handlers
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CDIConfigTestDlg dialog
|
||
|
|
||
|
CDIConfigTestDlg::CDIConfigTestDlg(CWnd* pParent /*=NULL*/)
|
||
|
: CDialog(CDIConfigTestDlg::IDD, pParent)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CDIConfigTestDlg)
|
||
|
m_bEditConfiguration = FALSE;
|
||
|
m_bEditLayout = FALSE;
|
||
|
//}}AFX_DATA_INIT
|
||
|
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
|
||
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||
|
}
|
||
|
|
||
|
void CDIConfigTestDlg::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CDIConfigTestDlg)
|
||
|
DDX_Check(pDX, IDC_EDITCFG, m_bEditConfiguration);
|
||
|
DDX_Check(pDX, IDC_EDITLAYOUT, m_bEditLayout);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CDIConfigTestDlg, CDialog)
|
||
|
//{{AFX_MSG_MAP(CDIConfigTestDlg)
|
||
|
ON_WM_SYSCOMMAND()
|
||
|
ON_WM_PAINT()
|
||
|
ON_WM_QUERYDRAGICON()
|
||
|
ON_BN_CLICKED(IDC_VIAFRAME, OnViaFrame)
|
||
|
ON_BN_CLICKED(IDC_VIADI, OnViaDI)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CDIConfigTestDlg message handlers
|
||
|
|
||
|
class sint
|
||
|
{
|
||
|
public:
|
||
|
sint() : blint(0) {boink();}
|
||
|
sint(int i ) : blint(i) {boink();}
|
||
|
~sint() {static volatile int i = 0; i++;}
|
||
|
void boink() {static volatile int i = 0; i++;}
|
||
|
int blint;
|
||
|
};
|
||
|
|
||
|
BOOL CDIConfigTestDlg::OnInitDialog()
|
||
|
{
|
||
|
CDialog::OnInitDialog();
|
||
|
|
||
|
// Add "About..." menu item to system menu.
|
||
|
|
||
|
// IDM_ABOUTBOX must be in the system command range.
|
||
|
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
||
|
ASSERT(IDM_ABOUTBOX < 0xF000);
|
||
|
|
||
|
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
||
|
if (pSysMenu != NULL)
|
||
|
{
|
||
|
CString strAboutMenu;
|
||
|
strAboutMenu.LoadString(IDS_ABOUTBOX);
|
||
|
if (!strAboutMenu.IsEmpty())
|
||
|
{
|
||
|
pSysMenu->AppendMenu(MF_SEPARATOR);
|
||
|
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Set the icon for this dialog. The framework does this automatically
|
||
|
// when the application's main window is not a dialog
|
||
|
SetIcon(m_hIcon, TRUE); // Set big icon
|
||
|
SetIcon(m_hIcon, FALSE); // Set small icon
|
||
|
|
||
|
// TODO: Add extra initialization here
|
||
|
Init();
|
||
|
|
||
|
m_bEditConfiguration = TRUE;
|
||
|
m_bEditLayout = TRUE;
|
||
|
UpdateData(FALSE);
|
||
|
|
||
|
CList<sint, sint> Fraggle, doig;
|
||
|
Fraggle.AddTail(1);
|
||
|
Fraggle.AddTail(10);
|
||
|
Fraggle.AddTail(199);
|
||
|
Fraggle.AddTail(991);
|
||
|
doig.AddTail(&Fraggle);
|
||
|
Fraggle.AddTail(&doig);
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
}
|
||
|
|
||
|
DWORD CDIConfigTestDlg::GetCDFlags()
|
||
|
{
|
||
|
UpdateData();
|
||
|
|
||
|
return m_bEditConfiguration ? DICD_EDIT : DICD_DEFAULT;
|
||
|
}
|
||
|
|
||
|
void CDIConfigTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||
|
{
|
||
|
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
||
|
{
|
||
|
CAboutDlg dlgAbout;
|
||
|
dlgAbout.DoModal();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CDialog::OnSysCommand(nID, lParam);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// If you add a minimize button to your dialog, you will need the code below
|
||
|
// to draw the icon. For MFC applications using the document/view model,
|
||
|
// this is automatically done for you by the framework.
|
||
|
|
||
|
void CDIConfigTestDlg::OnPaint()
|
||
|
{
|
||
|
if (IsIconic())
|
||
|
{
|
||
|
CPaintDC dc(this); // device context for painting
|
||
|
|
||
|
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
|
||
|
|
||
|
// Center icon in client rectangle
|
||
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
||
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
||
|
CRect rect;
|
||
|
GetClientRect(&rect);
|
||
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
||
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
||
|
|
||
|
// Draw the icon
|
||
|
dc.DrawIcon(x, y, m_hIcon);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CDialog::OnPaint();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// The system calls this to obtain the cursor to display while the user drags
|
||
|
// the minimized window.
|
||
|
HCURSOR CDIConfigTestDlg::OnQueryDragIcon()
|
||
|
{
|
||
|
return (HCURSOR) m_hIcon;
|
||
|
}
|
||
|
|
||
|
#define TOW(a) L##a
|
||
|
|
||
|
LPWSTR names[] = {TOW("My Name!")};
|
||
|
|
||
|
/*// {D20376C0-819C-11d3-8FB2-00C04F8EC627}
|
||
|
static const GUID g_AppGuid =
|
||
|
{ 0xd20376c0, 0x819c, 0x11d3, { 0x8f, 0xb2, 0x0, 0xc0, 0x4f, 0x8e, 0xc6, 0x27 } };
|
||
|
*/
|
||
|
static const GUID g_AppGuid =
|
||
|
{ 0x238d8220, 0x7a5d, 0x11d3, { 0x8f, 0xb2, 0x0, 0xc0, 0x4f, 0x8e, 0xc6, 0x27 } };
|
||
|
|
||
|
void CDIConfigTestDlg::Init()
|
||
|
{
|
||
|
#define NUMBER_OF_SEMANTICS 18
|
||
|
|
||
|
//for axes commands: AXIS_LR and AXIS_UD
|
||
|
#define AXIS_MASK 0x80000000l
|
||
|
#define AXIS_LR (AXIS_MASK | 1)
|
||
|
#define AXIS_UD (AXIS_MASK | 2)
|
||
|
|
||
|
|
||
|
// "Keyboard" commands
|
||
|
#define KEY_STOP 0x00000001l
|
||
|
#define KEY_DOWN 0x00000002l
|
||
|
#define KEY_LEFT 0x00000004l
|
||
|
#define KEY_RIGHT 0x00000008l
|
||
|
#define KEY_UP 0x00000010l
|
||
|
#define KEY_FIRE 0x00000020l
|
||
|
#define KEY_THROW 0x00000040l
|
||
|
#define KEY_SHIELD 0x00000080l
|
||
|
#define KEY_DISPLAY 0x00000100l
|
||
|
#define KEY_QUIT 0x00000200l
|
||
|
#define KEY_EDIT 0x00000400l
|
||
|
|
||
|
|
||
|
static DIACTIONW g_rgGameAction[] = {
|
||
|
{AXIS_UD, DIAXIS_FPS_MOVE, 0, TOW("Forward"),},
|
||
|
{AXIS_LR, DIAXIS_FPS_ROTATE, 0, TOW("Rotate"),},
|
||
|
{KEY_FIRE, DIBUTTON_FPS_FIRE, 0, TOW("Fire"),},
|
||
|
{KEY_THROW, DIBUTTON_FPS_WEAPONS, 0, TOW("Change Weapon"),},
|
||
|
{KEY_SHIELD, DIBUTTON_FPS_APPLY, 0, TOW("Shield"),},
|
||
|
{KEY_STOP, DIBUTTON_FPS_SELECT, 0, TOW("Pause"),},
|
||
|
{KEY_THROW, DIBUTTON_FPS_CROUCH, 0, TOW("Hyper space"),},
|
||
|
{KEY_THROW, DIBUTTON_FPS_JUMP, 0, TOW("Launch Probe"),},
|
||
|
{KEY_DISPLAY,DIBUTTON_FPS_DISPLAY, 0, TOW("Display"),},
|
||
|
{KEY_QUIT, DIBUTTON_FPS_MENU, 0, TOW("Quit Game"),},
|
||
|
{KEY_EDIT, DIBUTTON_FPS_DODGE, 0, TOW("Edit Configuration"),},
|
||
|
|
||
|
{KEY_LEFT, DIKEYBOARD_LEFT, 0, TOW("Turn +"),},
|
||
|
{KEY_RIGHT, DIKEYBOARD_RIGHT, 0, TOW("Turn -"),},
|
||
|
{KEY_UP, DIKEYBOARD_UP, 0, TOW("Move Up"),},
|
||
|
{KEY_DOWN, DIKEYBOARD_DOWN, 0, TOW("Move Down"),},
|
||
|
{KEY_STOP, DIKEYBOARD_S, 0, TOW("Stop Game"),},
|
||
|
{KEY_FIRE, DIKEYBOARD_SPACE, 0, TOW("Shoot"),},
|
||
|
{KEY_THROW, DIKEYBOARD_T, 0, TOW("Throw"),},
|
||
|
{KEY_SHIELD, DIKEYBOARD_H, 0, TOW("Shield"),},
|
||
|
{KEY_DISPLAY,DIKEYBOARD_D, 0, TOW("Display"),},
|
||
|
{KEY_QUIT, DIKEYBOARD_Q, 0, TOW("Quit Game"),},
|
||
|
{KEY_EDIT, DIKEYBOARD_E, 0, TOW("Edit Configuration"),},
|
||
|
{AXIS_LR, DIMOUSE_XAXIS, 0, TOW("Turn"), },
|
||
|
{AXIS_UD, DIMOUSE_YAXIS, 0, TOW("Move"), },
|
||
|
{KEY_FIRE, DIMOUSE_BUTTON0, 0, TOW("Fire"), },
|
||
|
{KEY_SHIELD, DIMOUSE_BUTTON1, 0, TOW("Shield"),},
|
||
|
{KEY_THROW, DIMOUSE_BUTTON2, 0, TOW("Change Weapon"),},
|
||
|
// {KEY_THROW, DIMOUSE_BUTTON3, 0, TOW("Hyper Space"),},
|
||
|
// {KEY_THROW, DIMOUSE_BUTTON4, 0, TOW("Launch Probe"),},
|
||
|
// {KEY_THROW, DIMOUSE_WHEEL, 0, TOW("Next Level"),},
|
||
|
};
|
||
|
/* {AXIS_LR, DIAXIS_SPACESIM_LATERAL, 0, TOW("Turn"),},
|
||
|
{AXIS_UD, DIAXIS_SPACESIM_MOVE, 0, TOW("Move"),},
|
||
|
{KEY_FIRE, DIBUTTON_SPACESIM_FIRE, 0, TOW("Shoot"),},
|
||
|
{KEY_STOP, DIBUTTON_SPACESIM_TARGET, 0, TOW("Stop Game"),},
|
||
|
{KEY_THROW, DIBUTTON_SPACESIM_WEAPONS, 0, TOW("Throw"),},
|
||
|
{KEY_SHIELD, DIBUTTON_SPACESIM_GEAR, 0, TOW("Shield"),},
|
||
|
{KEY_DISPLAY,DIBUTTON_SPACESIM_DISPLAY, 0, TOW("Display"),},
|
||
|
{KEY_QUIT, DIBUTTON_SPACESIM_MENU, 0, TOW("Quit Game"),},
|
||
|
|
||
|
{KEY_LEFT, DIPHYSICAL_KEYBOARD | DIK_LEFT, 0, TOW("Turn anti-clockwise"),},
|
||
|
{KEY_RIGHT, DIPHYSICAL_KEYBOARD | DIK_RIGHT, 0, TOW("Turn clockwise"),},
|
||
|
{KEY_UP, DIPHYSICAL_KEYBOARD | DIK_UP, 0, TOW("Move Up"),},
|
||
|
{KEY_DOWN, DIPHYSICAL_KEYBOARD | DIK_DOWN, 0, TOW("Move Down"),},
|
||
|
{KEY_STOP, DIPHYSICAL_KEYBOARD | DIK_S, 0, TOW("Stop Game"),},
|
||
|
{KEY_FIRE, DIPHYSICAL_KEYBOARD | DIK_F, 0, TOW("Shoot"),},
|
||
|
{KEY_THROW, DIPHYSICAL_KEYBOARD | DIK_T, 0, TOW("Throw"),},
|
||
|
{KEY_SHIELD, DIPHYSICAL_KEYBOARD | DIK_H, 0, TOW("Shield"),},
|
||
|
{KEY_DISPLAY,DIPHYSICAL_KEYBOARD | DIK_D, 0, TOW("Display"),},
|
||
|
{KEY_QUIT, DIPHYSICAL_KEYBOARD | DIK_Q, 0, TOW("Quit Game"),}};
|
||
|
*/
|
||
|
|
||
|
ZeroMemory(&m_diActF, sizeof(DIACTIONFORMATW));
|
||
|
|
||
|
m_diActF.dwSize = sizeof(DIACTIONFORMATW);
|
||
|
m_diActF.dwActionSize = sizeof(DIACTIONW);
|
||
|
wcscpy(m_diActF.tszApplicationName, TOW("FF Donuts"));
|
||
|
m_diActF.guidApplication = g_AppGuid;
|
||
|
m_diActF.dwGenre = DIVIRTUAL_FIGHTING_FPS;
|
||
|
m_diActF.dwNumActions = sizeof(g_rgGameAction) / sizeof(DIACTIONW);
|
||
|
m_diActF.dwDataSize = m_diActF.dwNumActions * sizeof(DWORD);
|
||
|
m_diActF.rgoAction = g_rgGameAction;
|
||
|
m_diActF.lAxisMin = -100;
|
||
|
m_diActF.lAxisMax = 100;
|
||
|
m_diActF.dwBufferSize = 16;
|
||
|
}
|
||
|
|
||
|
void GetDIHResultStrings(HRESULT hr, CString *pHR, CString *pMeaning);
|
||
|
|
||
|
void CDIConfigTestDlg::OnViaFrame()
|
||
|
{
|
||
|
// AfxMessageBox(_T("Disabled"));
|
||
|
Prepare();
|
||
|
|
||
|
//load up the dll containing the framework, and run it
|
||
|
|
||
|
IDirectInputActionFramework* pIFrame = NULL;
|
||
|
HRESULT hres = ::CoCreateInstance(CLSID_CDirectInputActionFramework, NULL, CLSCTX_INPROC_SERVER, IID_IDIActionFramework, (LPVOID*)&pIFrame);
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hres = pIFrame->ConfigureDevices(NULL, &m_Params, GetCDFlags(), NULL);
|
||
|
pIFrame->Release();
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
CString str, hr, m;
|
||
|
GetDIHResultStrings(hres, &hr, &m);
|
||
|
str.Format(_T("ConfigureDevices() failed!\n\nhres = %s\n\n%s"), (LPCTSTR)hr, (LPCTSTR)m);
|
||
|
AfxMessageBox(str, MB_ICONERROR);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AfxMessageBox(_T("Couldn't load Dll!"), MB_ICONERROR);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CDIConfigTestDlg::OnViaDI()
|
||
|
{
|
||
|
Prepare();
|
||
|
|
||
|
//set up DInput and call ConfigureDevices
|
||
|
IDirectInput8W* pDInput = NULL;
|
||
|
HRESULT hres = S_OK;
|
||
|
DWORD dwVer = DIRECTINPUT_VERSION;
|
||
|
|
||
|
if (SUCCEEDED(hres = DirectInputCreateEx(AfxGetApp()->m_hInstance, dwVer, IID_IDirectInput8W, (LPVOID *)&pDInput, NULL)))
|
||
|
{
|
||
|
BOOL bChanged = FALSE;
|
||
|
|
||
|
hres = pDInput->ConfigureDevices(NULL, &m_Params, GetCDFlags(), NULL);
|
||
|
pDInput->Release();
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
CString str, hr, m;
|
||
|
GetDIHResultStrings(hres, &hr, &m);
|
||
|
str.Format(_T("ConfigureDevices() failed!\n\nhres = %s\n\n%s"), (LPCTSTR)hr, (LPCTSTR)m);
|
||
|
int ret = AfxMessageBox(str, MB_ICONERROR);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// {FD4ACE13-7044-4204-8B15-095286B12EAD}
|
||
|
static const GUID GUID_DIConfigAppEditLayout =
|
||
|
{ 0xfd4ace13, 0x7044, 0x4204, { 0x8b, 0x15, 0x9, 0x52, 0x86, 0xb1, 0x2e, 0xad } };
|
||
|
|
||
|
void CDIConfigTestDlg::Prepare()
|
||
|
{
|
||
|
UpdateData();
|
||
|
|
||
|
if (m_bEditLayout)
|
||
|
m_diActF.guidApplication = GUID_DIConfigAppEditLayout;
|
||
|
else
|
||
|
m_diActF.guidApplication = g_AppGuid;
|
||
|
|
||
|
DICONFIGUREDEVICESPARAMSW &p = m_Params;
|
||
|
|
||
|
ZeroMemory(&p, sizeof(DICONFIGUREDEVICESPARAMSW));
|
||
|
p.dwSize = sizeof(DICONFIGUREDEVICESPARAMSW);
|
||
|
|
||
|
ZeroMemory(&p.dics, sizeof(DICOLORSET));
|
||
|
p.dics.dwSize = sizeof(DICOLORSET);
|
||
|
|
||
|
/**/
|
||
|
p.dwcUsers = 4;
|
||
|
p.lptszUserNames = TOW("Alpha\0Beta\0Epsilon\0Theta\0\0");
|
||
|
/*/
|
||
|
p.dwcUsers = 1;
|
||
|
p.lptszUserNames = TOW("User 1\0\0");
|
||
|
/**/
|
||
|
p.dwcFormats = 1;
|
||
|
p.lprgFormats = &m_diActF;
|
||
|
p.hwnd = m_hWnd;
|
||
|
//p.dics = ;
|
||
|
p.lpUnkDDSTarget = NULL;
|
||
|
}
|
||
|
|
||
|
void GetDIHResultStrings(HRESULT hr, CString *pHR, CString *pMeaning)
|
||
|
{
|
||
|
LPCTSTR tszhr = NULL, tszMeaning = NULL;
|
||
|
|
||
|
switch (hr)
|
||
|
{
|
||
|
case DI_BUFFEROVERFLOW:
|
||
|
tszhr = _T("DI_BUFFEROVERFLOW");
|
||
|
tszMeaning = _T("The device buffer overflowed and some input was lost. This value is equal to the S_FALSE standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DI_DOWNLOADSKIPPED:
|
||
|
tszhr = _T("DI_DOWNLOADSKIPPED");
|
||
|
tszMeaning = _T("The parameters of the effect were successfully updated, but the effect could not be downloaded because the associated device was not acquired in exclusive mode.");
|
||
|
break;
|
||
|
|
||
|
case DI_EFFECTRESTARTED:
|
||
|
tszhr = _T("DI_EFFECTRESTARTED");
|
||
|
tszMeaning = _T("The effect was stopped, the parameters were updated, and the effect was restarted.");
|
||
|
break;
|
||
|
|
||
|
/* case DI_NOEFFECT:
|
||
|
tszhr = _T("DI_NOEFFECT");
|
||
|
tszMeaning = _T("The operation had no effect. This value is equal to the S_FALSE standard COM return value.");
|
||
|
break;*/
|
||
|
|
||
|
/* case DI_NOTATTACHED:
|
||
|
tszhr = _T("DI_NOTATTACHED");
|
||
|
tszMeaning = _T("The device exists but is not currently attached. This value is equal to the S_FALSE standard COM return value.");
|
||
|
break;*/
|
||
|
|
||
|
case DI_OK:
|
||
|
tszhr = _T("DI_OK");
|
||
|
tszMeaning = _T("The operation completed successfully. This value is equal to the S_OK standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DI_POLLEDDEVICE:
|
||
|
tszhr = _T("DI_POLLEDDEVICE");
|
||
|
tszMeaning = _T("The device is a polled device. As a result, device buffering will not collect any data and event notifications will not be signaled until the IDirectInputDevice2::Poll method is called.");
|
||
|
break;
|
||
|
|
||
|
/* case DI_PROPNOEFFECT:
|
||
|
tszhr = _T("DI_PROPNOEFFECT");
|
||
|
tszMeaning = _T("The change in device properties had no effect. This value is equal to the S_FALSE standard COM return value.");
|
||
|
break;*/
|
||
|
|
||
|
case DI_TRUNCATED:
|
||
|
tszhr = _T("DI_TRUNCATED");
|
||
|
tszMeaning = _T("The parameters of the effect were successfully updated, but some of them were beyond the capabilities of the device and were truncated to the nearest supported value.");
|
||
|
break;
|
||
|
|
||
|
case DI_TRUNCATEDANDRESTARTED:
|
||
|
tszhr = _T("DI_TRUNCATEDANDRESTARTED");
|
||
|
tszMeaning = _T("Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_ACQUIRED:
|
||
|
tszhr = _T("DIERR_ACQUIRED");
|
||
|
tszMeaning = _T("The operation cannot be performed while the device is acquired.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_ALREADYINITIALIZED:
|
||
|
tszhr = _T("DIERR_ALREADYINITIALIZED");
|
||
|
tszMeaning = _T("This object is already initialized ");
|
||
|
break;
|
||
|
|
||
|
case DIERR_BADDRIVERVER:
|
||
|
tszhr = _T("DIERR_BADDRIVERVER");
|
||
|
tszMeaning = _T("The object could not be created due to an incompatible driver version or mismatched or incomplete driver components.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_BETADIRECTINPUTVERSION:
|
||
|
tszhr = _T("DIERR_BETADIRECTINPUTVERSION");
|
||
|
tszMeaning = _T("The application was written for an unsupported prerelease version of DirectInput.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_DEVICEFULL:
|
||
|
tszhr = _T("DIERR_DEVICEFULL");
|
||
|
tszMeaning = _T("The device is full.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_DEVICENOTREG:
|
||
|
tszhr = _T("DIERR_DEVICENOTREG");
|
||
|
tszMeaning = _T("The device or device instance is not registered with DirectInput. This value is equal to the REGDB_E_CLASSNOTREG standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_EFFECTPLAYING:
|
||
|
tszhr = _T("DIERR_EFFECTPLAYING");
|
||
|
tszMeaning = _T("The parameters were updated in memory but were not downloaded to the device because the device does not support updating an effect while it is still playing.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_HASEFFECTS:
|
||
|
tszhr = _T("DIERR_HASEFFECTS");
|
||
|
tszMeaning = _T("The device cannot be reinitialized because there are still effects attached to it.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_GENERIC :
|
||
|
tszhr = _T("DIERR_GENERIC");
|
||
|
tszMeaning = _T("An undetermined error occurred inside the DirectInput subsystem. This value is equal to the E_FAIL standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_HANDLEEXISTS :
|
||
|
tszhr = _T("DIERR_HANDLEEXISTS");
|
||
|
tszMeaning = _T("The device already has an event notification associated with it. This value is equal to the E_ACCESSDENIED standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_INCOMPLETEEFFECT:
|
||
|
tszhr = _T("DIERR_INCOMPLETEEFFECT");
|
||
|
tszMeaning = _T("The effect could not be downloaded because essential information is missing. For example, no axes have been associated with the effect, or no type-specific information has been supplied.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_INPUTLOST :
|
||
|
tszhr = _T("DIERR_INPUTLOST");
|
||
|
tszMeaning = _T("Access to the input device has been lost. It must be reacquired.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_INVALIDPARAM :
|
||
|
tszhr = _T("DIERR_INVALIDPARAM");
|
||
|
tszMeaning = _T("An invalid parameter was passed to the returning function, or the object was not in a state that permitted the function to be called. This value is equal to the E_INVALIDARG standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_MOREDATA:
|
||
|
tszhr = _T("DIERR_MOREDATA");
|
||
|
tszMeaning = _T("Not all the requested information fitted into the buffer.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOAGGREGATION :
|
||
|
tszhr = _T("DIERR_NOAGGREGATION");
|
||
|
tszMeaning = _T("This object does not support aggregation.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOINTERFACE :
|
||
|
tszhr = _T("DIERR_NOINTERFACE");
|
||
|
tszMeaning = _T("The specified interface is not supported by the object. This value is equal to the E_NOINTERFACE standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTACQUIRED :
|
||
|
tszhr = _T("DIERR_NOTACQUIRED");
|
||
|
tszMeaning = _T("The operation cannot be performed unless the device is acquired.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTBUFFERED:
|
||
|
tszhr = _T("DIERR_NOTBUFFERED");
|
||
|
tszMeaning = _T("The device is not buffered. Set the DIPROP_BUFFERSIZE property to enable buffering.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTDOWNLOADED:
|
||
|
tszhr = _T("DIERR_NOTDOWNLOADED");
|
||
|
tszMeaning = _T("The effect is not downloaded.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTEXCLUSIVEACQUIRED :
|
||
|
tszhr = _T("DIERR_NOTEXCLUSIVEACQUIRED");
|
||
|
tszMeaning = _T("The operation cannot be performed unless the device is acquired in DISCL_EXCLUSIVE mode.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTFOUND :
|
||
|
tszhr = _T("DIERR_NOTFOUND");
|
||
|
tszMeaning = _T("The requested object does not exist.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_NOTINITIALIZED :
|
||
|
tszhr = _T("DIERR_NOTINITIALIZED");
|
||
|
tszMeaning = _T("This object has not been initialized.");
|
||
|
break;
|
||
|
|
||
|
/* case DIERR_OBJECTNOTFOUND :
|
||
|
tszhr = _T("DIERR_OBJECTNOTFOUND");
|
||
|
tszMeaning = _T("The requested object does not exist.");
|
||
|
break;*/
|
||
|
|
||
|
case DIERR_OLDDIRECTINPUTVERSION :
|
||
|
tszhr = _T("DIERR_OLDDIRECTINPUTVERSION");
|
||
|
tszMeaning = _T("The application requires a newer version of DirectInput.");
|
||
|
break;
|
||
|
|
||
|
/* case DIERR_OTHERAPPHASPRIO :
|
||
|
tszhr = _T("DIERR_OTHERAPPHASPRIO");
|
||
|
tszMeaning = _T("Another application has a higher priority level, preventing this call from succeeding. This value is equal to the E_ACCESSDENIED standard COM return value. This error can be returned when an application has only foreground access to a device but is attempting to acquire the device while in the background.");
|
||
|
break;*/
|
||
|
|
||
|
case DIERR_OUTOFMEMORY :
|
||
|
tszhr = _T("DIERR_OUTOFMEMORY");
|
||
|
tszMeaning = _T("The DirectInput subsystem couldn't allocate sufficient memory to complete the call. This value is equal to the E_OUTOFMEMORY standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
/* case DIERR_READONLY :
|
||
|
tszhr = _T("DIERR_READONLY");
|
||
|
tszMeaning = _T("The specified property cannot be changed. This value is equal to the E_ACCESSDENIED standard COM return value.");
|
||
|
break;*/
|
||
|
|
||
|
case DIERR_REPORTFULL :
|
||
|
tszhr = _T("DIERR_REPORTFULL");
|
||
|
tszMeaning = _T("More information was requested to be sent than can be sent to the device.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_UNPLUGGED:
|
||
|
tszhr = _T("DIERR_UNPLUGGED");
|
||
|
tszMeaning = _T("The operation could not be completed because the device is not plugged in.");
|
||
|
break;
|
||
|
|
||
|
case DIERR_UNSUPPORTED :
|
||
|
tszhr = _T("DIERR_UNSUPPORTED");
|
||
|
tszMeaning = _T("The function called is not supported at this time. This value is equal to the E_NOTIMPL standard COM return value.");
|
||
|
break;
|
||
|
|
||
|
case E_PENDING :
|
||
|
tszhr = _T("E_PENDING");
|
||
|
tszMeaning = _T("Data is not yet available.");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
if (pMeaning != NULL)
|
||
|
*pMeaning = _T("Unknown.");
|
||
|
if (pHR != NULL)
|
||
|
pHR->Format(_T("(Unknown = %08X (%d))"), hr, hr);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (pMeaning != NULL)
|
||
|
*pMeaning = tszMeaning;
|
||
|
if (pHR != NULL)
|
||
|
*pHR = tszhr;
|
||
|
}
|
||
|
|