ユーザ用ツール

サイト用ツール


x88000

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
x88000 [2021/01/13 16:01] – [カーソルキーの機能を変える(Windows版)] arakix88000 [2021/01/14 09:37] (現在) – [カーソルキーの機能を変える(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>
 +#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|カーソルキーの割り付け変更}}
  
 === リソース(メニュー)の作成 === === リソース(メニュー)の作成 ===
 +
 +リソースエディターで、メニューを追加する。
 +''IDR_MAINMENU''(日本語)および''IDR_MAINMENU_E''(英語)の二つがあるので、両方に追加する。
 +{{::x88000:x88menu.png?600|X88000カーソルキーメニュー}}
 +
 +それぞれのIDシンボルは以下のようにする。
 +
 +  * IDM_CURSORKEYS_CURSOR
 +  * IDM_CURSORKEYS_2468
 +  * IDM_CURSORKEYS_1235
 +
 === 処理タイプフラグの追加 === === 処理タイプフラグの追加 ===
  
行 103: 行 147:
 ''X8Frame.cpp''内'' CX88Frame::UpdateAllKeyMatrics()''処理内に以下の変更。 ''X8Frame.cpp''内'' CX88Frame::UpdateAllKeyMatrics()''処理内に以下の変更。
 <code> <code>
- } 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)) {
行 119: 行 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>
  
x88000.1610521298.txt.gz · 最終更新: 2021/01/13 16:01 by araki