317 lines
6.5 KiB
C++
317 lines
6.5 KiB
C++
// dfuitestdlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafxdfuitest.h"
|
|
#include "dfuitest.h"
|
|
#include "dfuitestdlg.h"
|
|
|
|
#include "ourguids.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDFUITestDlg dialog
|
|
|
|
CDFUITestDlg::CDFUITestDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDFUITestDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDFUITestDlg)
|
|
m_nNumFormats = -1;
|
|
m_nVia = -1;
|
|
m_nDisplay = -1;
|
|
m_bLayout = FALSE;
|
|
m_strNames = _T("");
|
|
m_nMode = -1;
|
|
m_nColorSet = -1;
|
|
//}}AFX_DATA_INIT
|
|
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|
}
|
|
|
|
void CDFUITestDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDFUITestDlg)
|
|
DDX_Radio(pDX, IDC_1, m_nNumFormats);
|
|
DDX_Radio(pDX, IDC_DI, m_nVia);
|
|
DDX_Radio(pDX, IDC_GDI, m_nDisplay);
|
|
DDX_Check(pDX, IDC_LAYOUT, m_bLayout);
|
|
DDX_Text(pDX, IDC_NAMES, m_strNames);
|
|
DDX_Radio(pDX, IDC_EDIT, m_nMode);
|
|
DDX_Radio(pDX, IDC_DEFAULTCS, m_nColorSet);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CDFUITestDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CDFUITestDlg)
|
|
ON_WM_PAINT()
|
|
ON_WM_QUERYDRAGICON()
|
|
ON_BN_CLICKED(IDC_RUN, OnRun)
|
|
ON_BN_CLICKED(IDC_USER, OnUser)
|
|
ON_BN_CLICKED(IDC_TEST, OnTest)
|
|
ON_BN_CLICKED(IDC_NULL, OnNull)
|
|
ON_BN_CLICKED(IDC_CUSTOMIZE, OnCustomize)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDFUITestDlg message handlers
|
|
|
|
BOOL CDFUITestDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// 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
|
|
|
|
OnUser();
|
|
|
|
m_nVia = 0;
|
|
m_nMode = 0;
|
|
m_nDisplay = 0;
|
|
m_nNumFormats = 0;
|
|
m_nColorSet = 0;
|
|
m_bLayout = TRUE;
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
}
|
|
|
|
// 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 CDFUITestDlg::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 CDFUITestDlg::OnQueryDragIcon()
|
|
{
|
|
return (HCURSOR) m_hIcon;
|
|
}
|
|
|
|
LPCTSTR GetHResultMsg(HRESULT);
|
|
|
|
TUI_VIA CDFUITestDlg::GetVia()
|
|
{
|
|
switch (m_nVia)
|
|
{
|
|
default:
|
|
case 0: return TUI_VIA_DI;
|
|
case 1: return TUI_VIA_CCI;
|
|
}
|
|
}
|
|
|
|
TUI_DISPLAY CDFUITestDlg::GetDisplay()
|
|
{
|
|
switch (m_nDisplay)
|
|
{
|
|
default:
|
|
case 0: return TUI_DISPLAY_GDI;
|
|
case 1: return TUI_DISPLAY_DDRAW;
|
|
case 2: return TUI_DISPLAY_D3D;
|
|
}
|
|
}
|
|
|
|
TUI_CONFIGTYPE CDFUITestDlg::GetMode()
|
|
{
|
|
switch (m_nMode)
|
|
{
|
|
default:
|
|
case 0: return TUI_CONFIGTYPE_EDIT;
|
|
case 1: return TUI_CONFIGTYPE_VIEW;
|
|
}
|
|
}
|
|
|
|
LPCWSTR CDFUITestDlg::GetUserNames()
|
|
{
|
|
if (m_strNames.IsEmpty())
|
|
return NULL;
|
|
|
|
CString tstr = m_strNames + _T(",,");
|
|
LPWSTR wstr = AllocLPWSTR((LPCTSTR)tstr);
|
|
if (wstr == NULL)
|
|
return NULL;
|
|
|
|
int l = wcslen(wstr);
|
|
for (int i = 0; i < l; i++)
|
|
if (wstr[i] == L',')
|
|
wstr[i] = 0;
|
|
|
|
return wstr;
|
|
}
|
|
|
|
void CDFUITestDlg::OnRun()
|
|
{
|
|
if (!UpdateData())
|
|
return;
|
|
|
|
TESTCONFIGUIPARAMS p;
|
|
BOOL bTCUIMsg = FALSE;
|
|
HRESULT hres = S_OK;
|
|
LPCTSTR title = _T("CoInitialize Result");
|
|
if (SUCCEEDED(hres = CoInitialize(NULL)))
|
|
{
|
|
title = _T("CoCreateInstance Result");
|
|
IDirectInputConfigUITest* pITest = NULL;
|
|
hres = ::CoCreateInstance(CLSID_CDirectInputConfigUITest, NULL, CLSCTX_INPROC_SERVER, IID_IDirectInputConfigUITest, (LPVOID*)&pITest);
|
|
if (SUCCEEDED(hres))
|
|
{
|
|
title = _T("TestConfigUI Result");
|
|
p.dwSize = sizeof(TESTCONFIGUIPARAMS);
|
|
p.eVia = GetVia();
|
|
p.eDisplay = GetDisplay();
|
|
p.eConfigType = GetMode();
|
|
p.nNumAcFors = m_nNumFormats + 1;
|
|
p.nColorScheme = m_nColorSet;
|
|
p.lpwszUserNames = GetUserNames();
|
|
p.bEditLayout = m_bLayout;
|
|
CopyStr(p.wszErrorText, "", MAX_PATH);
|
|
|
|
hres = pITest->TestConfigUI(&p);
|
|
|
|
if (p.lpwszUserNames != NULL)
|
|
free((LPVOID)p.lpwszUserNames);
|
|
p.lpwszUserNames = NULL;
|
|
|
|
bTCUIMsg = TRUE;
|
|
|
|
pITest->Release();
|
|
}
|
|
|
|
CoUninitialize();
|
|
}
|
|
|
|
LPCTSTR msg = _T("Uknown Error.");
|
|
|
|
switch (hres)
|
|
{
|
|
case S_OK: msg = _T("Success."); break;
|
|
case REGDB_E_CLASSNOTREG: msg = _T("REGDB_E_CLASSNOTREG!"); break;
|
|
case CLASS_E_NOAGGREGATION: msg = _T("CLASS_E_NOAGGREGATION"); break;
|
|
default:
|
|
msg = GetHResultMsg(hres);
|
|
break;
|
|
}
|
|
|
|
if (FAILED(hres))
|
|
{
|
|
if (bTCUIMsg)
|
|
{
|
|
TCHAR tmsg[2048];
|
|
LPTSTR tstr = AllocLPTSTR(p.wszErrorText);
|
|
_stprintf(tmsg, _T("TestConfigUI() failed.\n\ntszErrorText =\n\t\"%s\"\n\n\nHRESULT...\n\n%s"), tstr, msg);
|
|
free(tstr);
|
|
MessageBox(tmsg, title, MB_OK);
|
|
}
|
|
else
|
|
MessageBox(msg, title, MB_OK);
|
|
}
|
|
}
|
|
|
|
LPCTSTR GetHResultMsg(HRESULT hr)
|
|
{
|
|
static TCHAR str[2048];
|
|
LPCTSTR tszhr = NULL, tszMeaning = NULL;
|
|
|
|
switch (hr)
|
|
{
|
|
case E_PENDING:
|
|
tszhr = _T("E_PENDING");
|
|
tszMeaning = _T("Data is not yet available.");
|
|
break;
|
|
|
|
case E_FAIL:
|
|
tszhr = _T("E_FAIL");
|
|
tszMeaning = _T("General failure.");
|
|
break;
|
|
|
|
case E_INVALIDARG:
|
|
tszhr = _T("E_INVALIDARG");
|
|
tszMeaning = _T("Invalid argument.");
|
|
break;
|
|
|
|
case E_NOTIMPL:
|
|
tszhr = _T("E_NOTIMPL");
|
|
tszMeaning = _T("Not implemented.");
|
|
break;
|
|
|
|
default:
|
|
_stprintf(str, _T("Unknown HRESULT (%08X)."), hr);
|
|
return str;
|
|
}
|
|
|
|
_stprintf(str, _T("(%08X)\n%s:\n\n%s"), hr, tszhr, tszMeaning);
|
|
return str;
|
|
}
|
|
|
|
void CDFUITestDlg::OnUser()
|
|
{
|
|
UpdateData();
|
|
|
|
TCHAR tszUser[MAX_PATH + 1];
|
|
tszUser[MAX_PATH] = 0;
|
|
DWORD len = MAX_PATH;
|
|
if (GetUserName(tszUser, &len))
|
|
m_strNames = tszUser;
|
|
else
|
|
m_strNames = _T("UserName1");
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CDFUITestDlg::OnTest()
|
|
{
|
|
UpdateData();
|
|
|
|
m_strNames = _T("Alpha,Beta,Epsilon,Theta");
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CDFUITestDlg::OnNull()
|
|
{
|
|
UpdateData();
|
|
|
|
m_strNames.Empty();
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CDFUITestDlg::OnCustomize()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
}
|