x88000
差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| x88000 [2021/01/13 06:41] – 作成 araki | x88000 [2025/06/03 01:23] (現在) – [カーソルキーの機能を変える(Windows版)] araki | ||
|---|---|---|---|
| 行 27: | 行 27: | ||
| * コンパイルエラー('' | * コンパイルエラー('' | ||
| * ライブラリ'' | * ライブラリ'' | ||
| + | * DirectInput8 のインスタンスが作成されるようにする。('' | ||
| + | |||
| + | <code cpp> | ||
| + | #if 0 | ||
| + | typedef HRESULT WINAPI DirectInputCreateProc( | ||
| + | HINSTANCE, DWORD, IDirectInput**, | ||
| + | DirectInputCreateProc* pprocDirectInputCreate = (DirectInputCreateProc*) | ||
| + | GetProcAddress(, | ||
| + | if (pprocDirectInputCreate == NULL) { | ||
| + | return false; | ||
| + | } | ||
| + | HRESULT hResult; | ||
| + | // Direct Input | ||
| + | hResult = pprocDirectInputCreate( | ||
| + | (HINSTANCE)GetModuleHandle(NULL), | ||
| + | DIRECTINPUT_VERSION, | ||
| + | #else | ||
| + | typedef HRESULT WINAPI DirectInput8CreateProc(HINSTANCE, | ||
| + | DirectInput8CreateProc *pprocDirectInput8Create = (DirectInput8CreateProc*) | ||
| + | GetProcAddress(m_hlibDInput, | ||
| + | if (pprocDirectInput8Create == NULL) | ||
| + | { | ||
| + | return false; | ||
| + | } | ||
| + | HRESULT hResult = pprocDirectInput8Create((HINSTANCE)GetModuleHandleW(NULL), | ||
| + | #endif | ||
| + | if (hResult != DI_OK) { | ||
| + | return false; | ||
| + | } | ||
| + | </ | ||
| + | ('' | ||
| 以上を修正するとバイナリを得ることができる。 | 以上を修正するとバイナリを得ることができる。 | ||
| 行 38: | 行 69: | ||
| なので、キー入力処理に手を入れて、カーソルキーの処理を変更する。 | なので、キー入力処理に手を入れて、カーソルキーの処理を変更する。 | ||
| なお、ゲームによって、2, | なお、ゲームによって、2, | ||
| + | |||
| + | {{:: | ||
| === リソース(メニュー)の作成 === | === リソース(メニュー)の作成 === | ||
| + | |||
| + | リソースエディターで、メニューを追加する。 | ||
| + | '' | ||
| + | {{:: | ||
| + | |||
| + | それぞれのIDシンボルは以下のようにする。 | ||
| + | |||
| + | * IDM_CURSORKEYS_CURSOR | ||
| + | * IDM_CURSORKEYS_2468 | ||
| + | * IDM_CURSORKEYS_1235 | ||
| + | |||
| === 処理タイプフラグの追加 === | === 処理タイプフラグの追加 === | ||
| 行 46: | 行 90: | ||
| '' | '' | ||
| - | < | + | < |
| 91: // keyboard state table | 91: // keyboard state table | ||
| 92: static uint8_t m_abtKeyboardState[256]; | 92: static uint8_t m_abtKeyboardState[256]; | ||
| 行 56: | 行 100: | ||
| '' | '' | ||
| - | < | + | < |
| 118:// keyboard state table | 118:// keyboard state table | ||
| 119: | 119: | ||
| 行 68: | 行 112: | ||
| === メニュー処理の実装 === | === メニュー処理の実装 === | ||
| + | |||
| + | '' | ||
| + | <code cpp> | ||
| + | case IDM_VERSION: | ||
| + | OnHelpMenuCommand(LOWORD(wParam)); | ||
| + | break; | ||
| + | #if 1 | ||
| + | case IDM_CURSORKEYS_CURSOR: | ||
| + | m_cursorMode = 0; | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | break; | ||
| + | case IDM_CURSORKEYS_2468: | ||
| + | m_cursorMode = 1; | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | break; | ||
| + | case IDM_CURSORKEYS_1235: | ||
| + | m_cursorMode = 2; | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | CheckMenuItem(GetMenu(hwnd), | ||
| + | break; | ||
| + | #endif | ||
| + | } | ||
| + | break; | ||
| + | </ | ||
| + | 本来は、ラジオボタンにするべきだろうが、今時のメニューはどうするべきなのかちゃんとわかってないので、汚い処理になっている。 | ||
| === キー処理の変更 === | === キー処理の変更 === | ||
| + | '' | ||
| + | <code cpp> | ||
| + | } else { | ||
| + | bShift = IsKeyPressed(VK_SHIFT); | ||
| + | } | ||
| + | #if 0 | ||
| + | bool bUpArrow = IsKeyPressed(VK_UP), | ||
| + | bRightArrow = IsKeyPressed(VK_RIGHT); | ||
| + | if (X88k().PC88().Z80Main().GetBasicMode() == | ||
| + | CPC88Z80Main:: | ||
| + | { | ||
| + | if (IsKeyPressed(VK_DOWN)) { | ||
| + | bShift = bUpArrow = true; | ||
| + | } | ||
| + | if (IsKeyPressed(VK_LEFT)) { | ||
| + | bShift = bRightArrow = true; | ||
| + | } | ||
| + | } | ||
| + | #else | ||
| + | bool bUpArrow = false, bRightArrow = false; | ||
| + | if (m_cursorMode == 0||IsKeyPressed(VK_CONTROL)) | ||
| + | { | ||
| + | bUpArrow = IsKeyPressed(VK_UP); | ||
| + | bRightArrow = IsKeyPressed(VK_RIGHT); | ||
| + | if (X88k().PC88().Z80Main().GetBasicMode() == | ||
| + | CPC88Z80Main:: | ||
| + | { | ||
| + | if (IsKeyPressed(VK_DOWN)) { | ||
| + | bShift = bUpArrow = true; | ||
| + | } | ||
| + | if (IsKeyPressed(VK_LEFT)) { | ||
| + | bShift = bRightArrow = true; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | if (IsKeyPressed(VK_DOWN) || IsKeyPressed(VK_LEFT) || IsKeyPressed(VK_RIGHT) || IsKeyPressed(VK_UP)) | ||
| + | { | ||
| + | if (m_cursorMode == 1) | ||
| + | { | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x01, | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | } | ||
| + | return; | ||
| + | } | ||
| + | } | ||
| + | #endif | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | ... | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | bShift = IsKeyPressed(DIK_LSHIFT, | ||
| + | } | ||
| + | #if 0 | ||
| + | bool bUpArrow = IsKeyPressed(DIK_UP), | ||
| + | bRightArrow = IsKeyPressed(DIK_RIGHT); | ||
| + | if (X88k().PC88().Z80Main().GetBasicMode() == | ||
| + | CPC88Z80Main:: | ||
| + | { | ||
| + | if (IsKeyPressed(DIK_DOWN)) { | ||
| + | bShift = bUpArrow = true; | ||
| + | } | ||
| + | if (IsKeyPressed(DIK_LEFT)) { | ||
| + | bShift = bRightArrow = true; | ||
| + | } | ||
| + | } | ||
| + | #else | ||
| + | bool bUpArrow = false, bRightArrow = false; | ||
| + | if (m_cursorMode == 0||IsKeyPressed(DIK_LCONTROL, | ||
| + | { | ||
| + | bUpArrow = IsKeyPressed(DIK_UP); | ||
| + | bRightArrow = IsKeyPressed(DIK_RIGHT); | ||
| + | if (X88k().PC88().Z80Main().GetBasicMode() == | ||
| + | CPC88Z80Main:: | ||
| + | { | ||
| + | if (IsKeyPressed(DIK_DOWN)) { | ||
| + | bShift = bUpArrow = true; | ||
| + | } | ||
| + | if (IsKeyPressed(DIK_LEFT)) { | ||
| + | bShift = bRightArrow = true; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | if (IsKeyPressed(DIK_DOWN) || IsKeyPressed(DIK_LEFT) || IsKeyPressed(DIK_RIGHT) || IsKeyPressed(DIK_UP)) | ||
| + | { | ||
| + | if (m_cursorMode == 1) | ||
| + | { | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x01, | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | X88k().SetKeyMatrics(0x00, | ||
| + | } | ||
| + | return; | ||
| + | } | ||
| + | } | ||
| + | #endif | ||
| + | X88k().SetKeyMatric(0x00, | ||
| + | </ | ||
| + | ''# | ||
| + | PC-8001などは、カーソルキーが縮退((上下と左右がそれぞれ一つのキーにまとめられ、シフトキーの有無で向きを変えていた。))しているので、その処理をしている。 | ||
| + | ここで、'' | ||
x88000.1610520084.txt.gz · 最終更新: by araki
