fork download
  1. //// ここから呼んでる ///////////////////////////////////////////////////////////////
  2. DialogBox(hInst, (LPCTSTR)IDD_CONTROLS, hWnd, (DLGPROC)Controls);
  3. //// ダイアログの処理全部 ///////////////////////////////////////////////////////////////
  4. LRESULT CALLBACK Controls(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  5. {
  6. static HBITMAP hbm = 0;
  7. static int curDevice = 0;
  8. static HWND tabs = NULL;
  9. switch (message)
  10. {
  11. case WM_INITDIALOG:
  12. W32Util::CenterWindow(hDlg);
  13. {
  14. // TODO: connect to keyboard device instead
  15. {
  16.  
  17. HBITMAP hResBM = LoadImageFromResource(hInst, MAKEINTRESOURCE(IDB_IMAGE_PSP), "IMAGE");
  18. HDC hDC = GetDC(hDlg);
  19. RECT clientRect;
  20. GetClientRect(hDlg, &clientRect);
  21. //TabCtrl_AdjustRect(, TRUE, &clientRect);
  22. HBITMAP hMemBM = CreateCompatibleBitmap(hDC, clientRect.right, clientRect.bottom);
  23. HDC hResDC = CreateCompatibleDC(hDC);
  24. HDC hMemDC = CreateCompatibleDC(hDC);
  25. SelectObject(hResDC, hResBM);
  26. SelectObject(hMemDC, hMemBM);
  27.  
  28. BITMAP bm;
  29. GetObject(hResBM, sizeof(BITMAP), &bm);
  30. SetStretchBltMode(hMemDC, HALFTONE);
  31. StretchBlt(hMemDC, clientRect.left, clientRect.top, (clientRect.right - clientRect.left),
  32. (clientRect.bottom - clientRect.top), hResDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
  33. if (hbm)
  34. DeleteObject(hbm);
  35. hbm = hMemBM;
  36.  
  37. DeleteDC(hMemDC);
  38. DeleteDC(hResDC);
  39. ReleaseDC(hDlg, hDC);
  40. DeleteObject(hResBM);
  41. }
  42.  
  43. int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1);
  44. for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) {
  45. HWND hEdit = GetDlgItem(hDlg, IDC_EDIT_KEY_TURBO + i);
  46. if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT)
  47. control_map[i] = key_pad_map[i * 2];
  48. else
  49. control_map[i] = analog_ctrl_map[(i - key_pad_size) * 2];
  50. SetWindowTextA(hEdit, getVirtualKeyName(control_map[i]));
  51. }
  52. ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "None");
  53. ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "XInput");
  54. ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "DirectInput");
  55. if ((g_Config.iForceInputDevice < 0) || (g_Config.iForceInputDevice > 1))
  56. {
  57. ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), 0);
  58. }
  59. else
  60. {
  61. ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), (g_Config.iForceInputDevice + 1));
  62. }
  63. tabs = GetDlgItem(hDlg, IDC_CONTROLTAB);
  64. TCITEM tcItem;
  65. ZeroMemory(&tcItem, sizeof(tcItem));
  66. tcItem.mask = TCIF_TEXT;
  67. tcItem.dwState = 0;
  68. tcItem.pszText = "Keyboard";
  69. tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
  70. tcItem.iImage = 0;
  71. TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
  72. tcItem.pszText = "DirectInput";
  73. tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
  74. TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
  75. tcItem.pszText = "XInput";
  76. tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1;
  77. TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);
  78.  
  79.  
  80. DWORD dwThreadID = GetWindowThreadProcessId(hDlg, NULL);
  81. pKeydownHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc, NULL, dwThreadID);
  82. }
  83. return TRUE;
  84. case WM_NOTIFY:
  85. {
  86. switch (((NMHDR *)lParam)->code) {
  87. case TCN_SELCHANGE:
  88. //InvalidateRect(hDlg, NULL, TRUE);
  89. curDevice = TabCtrl_GetCurSel(tabs);
  90. break;
  91. case TCN_SELCHANGING:
  92. curDevice = TabCtrl_GetCurSel(tabs);
  93. break;
  94. default:
  95. break;
  96. }
  97. break;
  98. }
  99. case WM_PAINT:
  100. {
  101.  
  102. PAINTSTRUCT pst;
  103. HDC hdc = BeginPaint(hDlg, &pst);
  104.  
  105. BITMAP bm;
  106. GetObject(hbm, sizeof(BITMAP), &bm);
  107. //RECT rect;
  108. //GetClientRect(hDlg, &rect);
  109. RECT rect = {0, 0, bm.bmWidth, bm.bmHeight};
  110. //TabCtrl_AdjustRect(hDlg, TRUE, &rect);
  111. BitBlt(hbm, hdc, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, 0, 0);
  112. //BitBlt(hbm, hdc, 0, 0, bm.bmWidth, bm.bmHeight, 0 , 0);
  113. EndPaint(hDlg, &pst);
  114.  
  115. return TRUE;
  116. }
  117. case WM_CTLCOLORSTATIC:
  118. {
  119. HDC hdc=(HDC)wParam;
  120. SetBkMode(hdc, TRANSPARENT);
  121. return (LRESULT)GetStockObject(NULL_BRUSH);
  122. }
  123. case WM_CTLCOLOREDIT:
  124. {
  125. if ((HWND)lParam == GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE))
  126. return FALSE;
  127. HDC hdc = (HDC)wParam;
  128. SetBkMode(hdc, TRANSPARENT);
  129. SetTextColor(hdc, RGB(255, 0, 0));
  130. HWND hEdit = (HWND)lParam;
  131. RECT rc = getRedrawRect(hEdit);
  132. RECT clientrc;
  133. GetClientRect(hEdit, &clientrc);
  134. BitBlt(hbm, hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, rc.left, rc.top);
  135. char str[11];
  136. GetWindowTextA(hEdit, str, 10);
  137. DrawTextA(hdc, str, (int)strlen(str), &clientrc, DT_CENTER|DT_SINGLELINE);
  138. return (LRESULT)GetStockObject(NULL_BRUSH);
  139. }
  140. case WM_COMMAND:
  141. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  142. {
  143. if (LOWORD(wParam) == IDOK) {
  144. g_Config.iForceInputDevice = (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE)) - 1);
  145. int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1);
  146. for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) {
  147. if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT)
  148. key_pad_map[i * 2] = control_map[i];
  149. else
  150. analog_ctrl_map[(i - key_pad_size) * 2] = control_map[i];
  151. }
  152. saveControlsToFile();
  153. }
  154. UnhookWindowsHookEx(pKeydownHook);
  155. EndDialog(hDlg, LOWORD(wParam));
  156. curDevice = 0;
  157. tabs = NULL;
  158. if (hbm) {
  159. DeleteObject(hbm);
  160. hbm = 0;
  161. }
  162. return TRUE;
  163. }
  164. break;
  165. }
  166. return FALSE;
  167. }
  168. ///////////////////////////////////////////////////////////////////
  169. // *.rc
  170. IDD_CONTROLS DIALOGEX 0, 0, 495, 239
  171. STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
  172. CAPTION "Controls"
  173. FONT 9, "MS Shell Dlg", 0, 0, 0x1
  174. BEGIN
  175. DEFPUSHBUTTON "OK",IDOK,188,217,50,14
  176. PUSHBUTTON "Cancel",IDCANCEL,242,217,50,14
  177. LTEXT "Turbo Mode:",IDC_STATIC,386,220,42,8
  178. EDITTEXT IDC_EDIT_KEYUP,56,79,34,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  179. EDITTEXT IDC_EDIT_KEYLEFT,34,100,34,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  180. EDITTEXT IDC_EDIT_KEYRIGHT,78,100,34,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  181. EDITTEXT IDC_EDIT_KEYDOWN,56,123,34,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  182. EDITTEXT IDC_EDIT_KEY_TRIANGLE,406,73,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  183. EDITTEXT IDC_EDIT_KEY_RECTANGLE,380,100,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  184. EDITTEXT IDC_EDIT_KEY_CIRCLE,433,100,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  185. EDITTEXT IDC_EDIT_KEY_CROSS,406,126,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  186. EDITTEXT IDC_EDIT_KEY_LEFT_THUMB,55,24,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  187. EDITTEXT IDC_EDIT_KEY_RIGHT_THUMB,406,24,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  188. EDITTEXT IDC_EDIT_KEY_SELECT,326,192,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  189. EDITTEXT IDC_EDIT_KEY_START,356,192,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  190. EDITTEXT IDC_EDIT_KEY_ANALOG_UP,57,145,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  191. EDITTEXT IDC_EDIT_KEY_ANALOG_LEFT,40,159,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  192. EDITTEXT IDC_EDIT_KEY_ANALOG_RIGHT,75,159,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  193. EDITTEXT IDC_EDIT_KEY_ANALOG_DOWN,57,173,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  194. EDITTEXT IDC_EDIT_KEY_TURBO,430,220,33,14,ES_CENTER | ES_AUTOHSCROLL | NOT WS_BORDER
  195. LTEXT "Force device:",IDC_STATIC,14,220,45,11
  196. COMBOBOX IDC_FORCE_INPUT_DEVICE,62,218,84,140,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
  197. CONTROL "",IDC_CONTROLTAB,"SysTabControl32", TCS_FORCEICONLEFT | TCS_FIXEDWIDTH,0,0,495,239,WS_EX_TRANSPARENT
  198. END
  199. //////////////////////////////////////////////////////////////////////
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:10: error: expected constructor, destructor, or type conversion before ‘(’ token
prog.cpp:4:2: error: ‘LRESULT’ does not name a type
prog.cpp:170:1: error: ‘IDD_CONTROLS’ does not name a type
stdout
Standard output is empty