ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

input.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.