x88000
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
x88000 [2021/01/13 06:41] – 作成 araki | x88000 [2021/01/14 00:37] (現在) – [カーソルキーの機能を変える(Windows版)] araki | ||
---|---|---|---|
行 27: | 行 27: | ||
* コンパイルエラー('' | * コンパイルエラー('' | ||
* ライブラリ'' | * ライブラリ'' | ||
+ | * DirectInput8 のインスタンスが作成されるようにする。('' | ||
+ | |||
+ | < | ||
+ | #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 | ||
+ | |||
=== 処理タイプフラグの追加 === | === 処理タイプフラグの追加 === | ||
行 68: | 行 112: | ||
=== メニュー処理の実装 === | === メニュー処理の実装 === | ||
+ | |||
+ | '' | ||
+ | < | ||
+ | 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; | ||
+ | </ | ||
+ | 本来は、ラジオボタンにするべきだろうが、今時のメニューはどうするべきなのかちゃんとわかってないので、汚い処理になっている。 | ||
=== キー処理の変更 === | === キー処理の変更 === | ||
+ | '' | ||
+ | < | ||
+ | } 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 · 最終更新: 2021/01/13 06:41 by araki