ユーザ用ツール

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
x88000 [2021/01/13 07:23] – [カーソルキーの機能を変える(Windows版)] arakix88000 [2025/06/03 01:23] (現在) – [カーソルキーの機能を変える(Windows版)] araki
行 27: 行 27:
   * コンパイルエラー(''LPDWORD''に変換できない)を起こす''uint32_t''宣言の変数をすべて''DWORD''宣言に変更する。   * コンパイルエラー(''LPDWORD''に変換できない)を起こす''uint32_t''宣言の変数をすべて''DWORD''宣言に変更する。
   * ライブラリ''dinput.lib''および''dinput.dll''はそれぞれ''dinput8.lib''および''dinput8.dll''に置き換える。   * ライブラリ''dinput.lib''および''dinput.dll''はそれぞれ''dinput8.lib''および''dinput8.dll''に置き換える。
 +  * DirectInput8 のインスタンスが作成されるようにする。(''X88irectX.cpp''内376行目付近から -- 下記)
 +
 +<code cpp>
 +#if 0
 +    typedef HRESULT WINAPI DirectInputCreateProc(
 +        HINSTANCE, DWORD, IDirectInput**, IUnknown*);
 +    DirectInputCreateProc* pprocDirectInputCreate = (DirectInputCreateProc*)
 +        GetProcAddress(,_hlibDInput, "DirectInputCreateA");
 +    if (pprocDirectInputCreate == NULL) {
 +        return false;
 +    }
 +    HRESULT hResult;
 +    // Direct Input
 +    hResult = pprocDirectInputCreate(
 +        (HINSTANCE)GetModuleHandle(NULL),
 +        DIRECTINPUT_VERSION, &m_pDI, NULL);
 +#else
 +    typedef HRESULT WINAPI DirectInput8CreateProc(HINSTANCE,DWORD,REFIID,LPVOID*,LPUNKNOWN);
 +    DirectInput8CreateProc *pprocDirectInput8Create = (DirectInput8CreateProc*)
 +        GetProcAddress(m_hlibDInput, "DirectInput8Create");
 +    if (pprocDirectInput8Create == NULL)
 +    {
 +        return false;
 +    }
 +    HRESULT hResult = pprocDirectInput8Create((HINSTANCE)GetModuleHandleW(NULL), DIRECTINPUT8_VERSION, IID_IDrectInput8W, (LPVOID*)&m_pDI, NULL);
 +#endif
 +    if (hResult != DI_OK) {
 +        return false;
 +    }
 +</code>
 +(''StdHeader.h'' 160行目付近の ''#define DIRECTINPUT_VERSION 0x0300'' の下に、''#define DIRECTINPUT8_VERSION 0x0800''を追加しておく。)
  
 以上を修正するとバイナリを得ることができる。 以上を修正するとバイナリを得ることができる。
行 38: 行 69:
 なので、キー入力処理に手を入れて、カーソルキーの処理を変更する。 なので、キー入力処理に手を入れて、カーソルキーの処理を変更する。
 なお、ゲームによって、2,4,6,8または1,2,3,5で上下左右の割り当てになっているので、メニューから切り替えられるようにしておく。 なお、ゲームによって、2,4,6,8または1,2,3,5で上下左右の割り当てになっているので、メニューから切り替えられるようにしておく。
 +
 +{{::x88000:x88cursorkey.png?600|カーソルキーの割り付け変更}}
  
 === リソース(メニュー)の作成 === === リソース(メニュー)の作成 ===
行 57: 行 90:
 ''X88Frame.h''の93行目からフラグの宣言を追加。 ''X88Frame.h''の93行目からフラグの宣言を追加。
  
-<code>+<code cpp>
 91:    // keyboard state table 91:    // keyboard state table
 92:    static uint8_t m_abtKeyboardState[256]; 92:    static uint8_t m_abtKeyboardState[256];
行 67: 行 100:
  
 ''X88Frame.cpp''の122行目からフラグのインスタンスを定義する。 ''X88Frame.cpp''の122行目からフラグのインスタンスを定義する。
-<code>+<code cpp>
 118:// keyboard state table 118:// keyboard state table
 119: 119:
行 81: 行 114:
  
 ''X88Frame.cpp''内''CX88Frame::WndProc()''処理内に追加(汚い) ''X88Frame.cpp''内''CX88Frame::WndProc()''処理内に追加(汚い)
-<code>+<code cpp>
  case IDM_VERSION:  case IDM_VERSION:
  OnHelpMenuCommand(LOWORD(wParam));  OnHelpMenuCommand(LOWORD(wParam));
行 113: 行 146:
  
 ''X8Frame.cpp''内'' CX88Frame::UpdateAllKeyMatrics()''処理内に以下の変更。 ''X8Frame.cpp''内'' CX88Frame::UpdateAllKeyMatrics()''処理内に以下の変更。
-<code> +<code cpp
- } else { + } else { 
- bShift = IsKeyPressed(VK_SHIFT); + bShift = IsKeyPressed(VK_SHIFT); 
- }+ }
 #if 0 #if 0
- bool bUpArrow = IsKeyPressed(VK_UP), + bool bUpArrow = IsKeyPressed(VK_UP), 
- bRightArrow = IsKeyPressed(VK_RIGHT);+ bRightArrow = IsKeyPressed(VK_RIGHT); 
 + if (X88k().PC88().Z80Main().GetBasicMode() == 
 + CPC88Z80Main::BASICMODE_N80V1) 
 +
 + 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() ==  if (X88k().PC88().Z80Main().GetBasicMode() ==
- CPC88Z80Main::BASICMODE_N80V1)+ CPC88Z80Main::BASICMODE_N80V1)
  {  {
  if (IsKeyPressed(VK_DOWN)) {  if (IsKeyPressed(VK_DOWN)) {
行 130: 行 179:
  }  }
  }  }
-#else +
- bool bUpArrow = false, bRightArrow = false; + else 
- if (m_cursorMode == 0||IsKeyPressed(VK_CONTROL))+ { 
 + if (IsKeyPressed(VK_DOWN) || IsKeyPressed(VK_LEFT) || IsKeyPressed(VK_RIGHT) || IsKeyPressed(VK_UP))
  {  {
- bUpArrow = IsKeyPressed(VK_UP); + if (m_cursorMode == 1)
- bRightArrow = IsKeyPressed(VK_RIGHT); +
- if (X88k().PC88().Z80Main().GetBasicMode() == +
- CPC88Z80Main::BASICMODE_N80V1)+
  {  {
- if (IsKeyPressed(VK_DOWN)) + X88k().SetKeyMatrics(0x00, 2, IsKeyPressed(VK_DOWN)); 
- bShift = bUpArrow = true+ X88k().SetKeyMatrics(0x00, 4, IsKeyPressed(VK_LEFT)); 
- + X88k().SetKeyMatrics(0x00, 6, IsKeyPressed(VK_RIGHT))
- if (IsKeyPressed(VK_LEFT)) { + X88k().SetKeyMatrics(0x01, 0, IsKeyPressed(VK_UP));
- bShift = bRightArrow = true+
- }+
  }  }
 + else
 + {
 + X88k().SetKeyMatrics(0x00, 2, IsKeyPressed(VK_DOWN));
 + X88k().SetKeyMatrics(0x00, 1, IsKeyPressed(VK_LEFT));
 + X88k().SetKeyMatrics(0x00, 3, IsKeyPressed(VK_RIGHT));
 + X88k().SetKeyMatrics(0x00, 5, IsKeyPressed(VK_UP));
 + }
 + return;
  }  }
- else+
 +#endif 
 + X88k().SetKeyMatrics(0x00, 0, IsKeyPressed(VK_NUMPAD0)); 
 + X88k().SetKeyMatrics(0x00, 1, IsKeyPressed(VK_NUMPAD1)); 
 +... 
 +        } 
 +        else 
 +        { 
 +            bShift = IsKeyPressed(DIK_LSHIFT, DIK_RSHIFT); 
 +        } 
 +#if 0 
 +        bool bUpArrow = IsKeyPressed(DIK_UP), 
 +            bRightArrow = IsKeyPressed(DIK_RIGHT); 
 +        if (X88k().PC88().Z80Main().GetBasicMode() == 
 +                CPC88Z80Main::BASICMODE_N80V1) 
 +        { 
 +            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, DIK_RCONTROL)) 
 +
 + bUpArrow = IsKeyPressed(DIK_UP); 
 + bRightArrow = IsKeyPressed(DIK_RIGHT); 
 + if (X88k().PC88().Z80Main().GetBasicMode() == 
 + CPC88Z80Main::BASICMODE_N80V1)
  {  {
- if (IsKeyPressed(VK_DOWN) || IsKeyPressed(VK_LEFT) || IsKeyPressed(VK_RIGHT) || IsKeyPressed(VK_UP))+ 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, 2, IsKeyPressed(DIK_DOWN)); 
 + X88k().SetKeyMatrics(0x00, 4, IsKeyPressed(DIK_LEFT)); 
 + X88k().SetKeyMatrics(0x00, 6, IsKeyPressed(DIK_RIGHT)); 
 + X88k().SetKeyMatrics(0x01, 0, IsKeyPressed(DIK_UP))
 +
 + else
  {  {
- if (m_cursorMode == 1) + X88k().SetKeyMatrics(0x00, 2, IsKeyPressed(DIK_DOWN)); 
-+ X88k().SetKeyMatrics(0x00, 1, IsKeyPressed(DIK_LEFT)); 
- X88k().SetKeyMatrics(0x00, 2, IsKeyPressed(VK_DOWN)); + X88k().SetKeyMatrics(0x00, 3, IsKeyPressed(DIK_RIGHT)); 
- X88k().SetKeyMatrics(0x00, 4, IsKeyPressed(VK_LEFT)); + X88k().SetKeyMatrics(0x00, 5, IsKeyPressed(DIK_UP));
- X88k().SetKeyMatrics(0x00, 6, IsKeyPressed(VK_RIGHT)); +
- X88k().SetKeyMatrics(0x01, 0, IsKeyPressed(VK_UP)); +
- +
- else +
-+
- X88k().SetKeyMatrics(0x00, 2, IsKeyPressed(VK_DOWN)); +
- X88k().SetKeyMatrics(0x00, 1, IsKeyPressed(VK_LEFT)); +
- X88k().SetKeyMatrics(0x00, 3, IsKeyPressed(VK_RIGHT)); +
- X88k().SetKeyMatrics(0x00, 5, IsKeyPressed(VK_UP))+
-+
- return;+
  }  }
 + return;
  }  }
 + }
 #endif #endif
- X88k().SetKeyMatrics(0x00, 0, IsKeyPressed(VK_NUMPAD0)); +        X88k().SetKeyMatric(0x00, 0, IsKeyPressed(DIK_NUMPAD0));
- X88k().SetKeyMatrics(0x00, 1, IsKeyPressed(VK_NUMPAD1));+
 </code> </code>
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information