Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygeninput.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactX Diagnosis Application 00003 * LICENSE: LGPL - See COPYING in the top level directory 00004 * FILE: base/applications/dxdiag/input.c 00005 * PURPOSE: ReactX diagnosis input page 00006 * COPYRIGHT: Copyright 2008 Johannes Anderwald 00007 * 00008 */ 00009 00010 #include "precomp.h" 00011 #include <dinput.h> 00012 00013 typedef struct 00014 { 00015 HWND hwndDlg; 00016 IDirectInput8W * pObj; 00017 HWND hDevList; 00018 HWND hPortTree; 00019 INT Count; 00020 }INPUT_DIALOG_CONTEXT, *PINPUT_DIALOG_CONTEXT; 00021 00022 00023 BOOL CALLBACK DirectInputEnumDevCb( 00024 LPCDIDEVICEINSTANCEW lpddi, 00025 LPVOID pvRef 00026 ) 00027 { 00028 HRESULT hResult; 00029 WCHAR szText[100]; 00030 IDirectInputDevice8W * pDev = NULL; 00031 //DIPROPGUIDANDPATH GuidPath; 00032 //DIPROPSTRING TypeName; 00033 DIPROPDWORD VendorID; 00034 DIDEVCAPS DevCaps; 00035 DWORD dwProductID; 00036 DWORD dwManufacturerID; 00037 LVITEMW Item; 00038 LRESULT lResult; 00039 00040 PINPUT_DIALOG_CONTEXT pContext = (PINPUT_DIALOG_CONTEXT)pvRef; 00041 00042 if (!pContext) 00043 return DIENUM_STOP; 00044 00045 ZeroMemory(&Item, sizeof(LVITEMW)); 00046 Item.mask = LVIF_TEXT; 00047 Item.pszText = (LPWSTR)lpddi->tszProductName; 00048 Item.iItem = pContext->Count; 00049 /* insert device item */ 00050 lResult = SendMessageW(pContext->hDevList, LVM_INSERTITEM, 0, (LPARAM)&Item); 00051 if (lResult == -1) 00052 return DIENUM_CONTINUE; 00053 00054 /* is the device attached */ 00055 szText[0] = L'\0'; 00056 hResult = pContext->pObj->lpVtbl->GetDeviceStatus(pContext->pObj, &lpddi->guidInstance); 00057 if (hResult == DI_OK) 00058 LoadStringW(hInst, IDS_DEVICE_STATUS_ATTACHED, szText, sizeof(szText) / sizeof(WCHAR)); 00059 else if (hResult == DI_NOTATTACHED) 00060 LoadStringW(hInst, IDS_DEVICE_STATUS_MISSING, szText, sizeof(szText) / sizeof(WCHAR)); 00061 else 00062 LoadStringW(hInst, IDS_DEVICE_STATUS_UNKNOWN, szText, sizeof(szText) / sizeof(WCHAR)); 00063 00064 if (szText[0]) 00065 { 00066 szText[(sizeof(szText) / sizeof(WCHAR))-1] = L'\0'; 00067 Item.iSubItem = 1; 00068 Item.pszText = szText; 00069 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00070 } 00071 00072 hResult = pContext->pObj->lpVtbl->CreateDevice(pContext->pObj, &lpddi->guidInstance, &pDev, NULL); 00073 00074 if (hResult != DI_OK) 00075 return DIENUM_STOP; 00076 00077 ZeroMemory(&VendorID, sizeof(DIPROPDWORD)); 00078 VendorID.diph.dwSize = sizeof(DIPROPDWORD); 00079 VendorID.diph.dwHeaderSize = sizeof(DIPROPHEADER); 00080 00081 hResult = pDev->lpVtbl->GetProperty(pDev, DIPROP_VIDPID, (LPDIPROPHEADER)&VendorID); 00082 if (hResult == DI_OK) 00083 { 00084 /* set manufacturer id */ 00085 dwManufacturerID = LOWORD(VendorID.dwData); 00086 wsprintfW(szText, L"0x%04X", dwManufacturerID); 00087 Item.iSubItem = 3; 00088 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00089 /* set product id */ 00090 dwProductID = HIWORD(VendorID.dwData); 00091 wsprintfW(szText, L"0x%04X", dwProductID); 00092 Item.iSubItem = 4; 00093 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00094 } 00095 else 00096 { 00097 szText[0] = L'\0'; 00098 LoadStringW(hInst, IDS_NOT_APPLICABLE, szText, sizeof(szText) / sizeof(WCHAR)); 00099 szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; 00100 /* set manufacturer id */ 00101 Item.iSubItem = 3; 00102 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00103 /* set product id */ 00104 Item.iSubItem = 4; 00105 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00106 } 00107 00108 /* check for force feedback support */ 00109 DevCaps.dwSize = sizeof(DIDEVCAPS); // use DIDEVCAPS_DX3 for DX3 support 00110 hResult = pDev->lpVtbl->GetCapabilities(pDev, &DevCaps); 00111 szText[0] = L'\0'; 00112 if (hResult == DI_OK) 00113 { 00114 if (DevCaps.dwFlags & DIDC_FORCEFEEDBACK) 00115 LoadStringW(hInst, IDS_OPTION_YES, szText, sizeof(szText)/sizeof(WCHAR)); 00116 else 00117 LoadStringW(hInst, IDS_NOT_APPLICABLE, szText, sizeof(szText)/sizeof(WCHAR)); 00118 } 00119 else 00120 { 00121 LoadStringW(hInst, IDS_NOT_APPLICABLE, szText, sizeof(szText)/sizeof(WCHAR)); 00122 } 00123 00124 Item.iSubItem = 5; 00125 SendMessageW(pContext->hDevList, LVM_SETITEM, lResult, (LPARAM)&Item); 00126 00127 00128 #if 0 00129 ZeroMemory(&GuidPath, sizeof(DIPROPGUIDANDPATH)); 00130 GuidPath.diph.dwSize = sizeof(DIPROPGUIDANDPATH); 00131 GuidPath.diph.dwHeaderSize = sizeof(DIPROPHEADER); 00132 GuidPath.diph.dwHow = DIPH_DEVICE; 00133 hResult = pDev->lpVtbl->GetProperty(pDev, DIPROP_GUIDANDPATH, (LPDIPROPHEADER)&GuidPath); 00134 00135 ZeroMemory(&TypeName, sizeof(TypeName)); 00136 TypeName.diph.dwSize = sizeof(TypeName); 00137 TypeName.diph.dwHeaderSize = sizeof(DIPROPHEADER); 00138 TypeName.diph.dwHow = DIPH_DEVICE; 00139 hResult = pDev->lpVtbl->GetProperty(pDev, DIPROP_GETPORTDISPLAYNAME, (LPDIPROPHEADER)&TypeName); 00140 00141 00142 #endif 00143 00144 00145 pDev->lpVtbl->Release(pDev); 00146 pContext->Count++; 00147 00148 00149 return DIENUM_CONTINUE; 00150 } 00151 00152 VOID 00153 InitListViewColumns(PINPUT_DIALOG_CONTEXT pContext) 00154 { 00155 WCHAR szText[256]; 00156 LVCOLUMNW lvcolumn; 00157 INT Index; 00158 00159 00160 pContext->hDevList = GetDlgItem(pContext->hwndDlg, IDC_LIST_DEVICE); 00161 00162 ZeroMemory(&lvcolumn, sizeof(LVCOLUMNW)); 00163 lvcolumn.pszText = szText; 00164 lvcolumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH; 00165 lvcolumn.fmt = LVCFMT_LEFT; 00166 lvcolumn.cx = 100; 00167 00168 for(Index = 0; Index < 6; Index++) 00169 { 00170 szText[0] = L'\0'; 00171 LoadStringW(hInst, IDS_DEVICE_NAME + Index, szText, sizeof(szText) / sizeof(WCHAR)); 00172 szText[(sizeof(szText) / sizeof(WCHAR))-1] = L'\0'; 00173 if (SendMessageW(pContext->hDevList, LVM_INSERTCOLUMNW, Index, (LPARAM)&lvcolumn) == -1) 00174 return; 00175 } 00176 } 00177 00178 static 00179 void 00180 InitializeDirectInputDialog(HWND hwndDlg) 00181 { 00182 INPUT_DIALOG_CONTEXT Context; 00183 HRESULT hResult; 00184 IDirectInput8W * pObj; 00185 00186 hResult = DirectInput8Create(hInst, DIRECTINPUT_VERSION, &IID_IDirectInput8W, (LPVOID*)&pObj, NULL); 00187 if (hResult != DI_OK) 00188 return; 00189 00190 ZeroMemory(&Context, sizeof(Context)); 00191 Context.pObj = pObj; 00192 Context.hwndDlg = hwndDlg; 00193 InitListViewColumns(&Context); 00194 pObj->lpVtbl->EnumDevices(pObj, DI8DEVCLASS_ALL, DirectInputEnumDevCb, (PVOID)&Context, DIEDFL_ALLDEVICES); 00195 00196 pObj->lpVtbl->Release(pObj); 00197 } 00198 00199 00200 00201 INT_PTR CALLBACK 00202 InputPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 00203 { 00204 UNREFERENCED_PARAMETER(lParam); 00205 UNREFERENCED_PARAMETER(wParam); 00206 switch (message) { 00207 case WM_INITDIALOG: 00208 { 00209 SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER); 00210 InitializeDirectInputDialog(hDlg); 00211 return TRUE; 00212 } 00213 } 00214 00215 return FALSE; 00216 } Generated on Wed May 23 2012 04:14:57 for ReactOS by
1.7.6.1
|