PCのプログラムからはジョイパッドのアナログモードのON/OFF状態を取得する手段が無いので、
残念ながら回避することは無理だと思います
恐らくアナログモードOFF時には右スティックの入力がボタンに割り当てられているのではないかと思います
( 因みに、ジョイパッドは色々なメーカーから販売されているので、メーカーによって仕様が違います
例えば私の手元にあるジョイパッドでは、アナログモードがOFFの場合は右スティックを操作しても
GetJoypadInputState( DX_INPUT_PAD1 ) の戻り値は 0 です )
こちらのプログラムを実行すると、DirectInput から得られるジョイパッドの入力情報を丸ごと画面に
表示できますので、アナログモードOFF時の右スティックの入力が何処に割り当てられているのか
確認してみてください
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
DINPUT_JOYSTATE input ;
int i ;
int Color ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 入力状態を取得
GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ;
// 画面に構造体の中身を描画
Color = GetColor( 255,255,255 ) ;
DrawFormatString( 0, 0, Color, "X:%d Y:%d Z:%d",
input.X, input.Y, input.Z ) ;
DrawFormatString( 0, 16, Color, "Rx:%d Ry:%d Rz:%d",
input.Rx, input.Ry, input.Rz ) ;
DrawFormatString( 0, 32, Color, "Slider 0:%d 1:%d",
input.Slider[ 0 ], input.Slider[ 1 ] ) ;
DrawFormatString( 0, 48, Color, "POV 0:%d 1:%d 2:%d 3:%d",
input.POV[ 0 ], input.POV[ 1 ],
input.POV[ 2 ], input.POV[ 3 ] ) ;
DrawString( 0, 64, "Button", Color ) ;
for( i = 0 ; i < 32 ; i ++ )
{
DrawFormatString( 64 + i % 8 * 64, 64 + i / 8 * 16, Color,
"%2d:%d", i, input.Buttons[ i ] ) ;
}
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0;
}