DxLibのライブラリを改造してもアップデートのたびに作り直す必要があって面倒なので
XInput.hをプログラム側(WinMain)で使わなくていいように、XInput処理はDLLを作ってそっちで
処理させるのがいいのではないでしょうか。
MyXInput.h (DLL)
-----------------------------------------------------------------
#pragma once
#ifdef MYXINPUT_EXPORTS
#define MYXINPUT_API __declspec(dllexport)
#else
#define MYXINPUT_API __declspec(dllimport)
#endif
namespace MyXInput {
class myXInput {
public:
MYXINPUT_API BOOL GetStatus(int nPadNum, LPBYTE pData);
};
}
MyXInput.cpp (DLL)
-----------------------------------------------------------------
#include "stdafx.h"
#include "MyXInput.h"
#include "XInput.h"
#pragma comment (lib, "Xinput.lib")
typedef struct DXLIB_tagXINPUT_STATE
{
unsigned char Buttons[16];
unsigned char LeftTrigger;
unsigned char RightTrigger;
short ThumbLX;
short ThumbLY;
short ThumbRX;
short ThumbRY;
} DXLIB_XINPUT_STATE;
namespace MyXInput {
BOOL myXInput::GetStatus(int nPadNum, LPBYTE pData)
{
DXLIB_XINPUT_STATE *p = (DXLIB_XINPUT_STATE *)pData;
ZeroMemory(p, sizeof(DXLIB_XINPUT_STATE));
XINPUT_STATE state;
DWORD dwResult;
ZeroMemory(&state, sizeof(XINPUT_STATE));
dwResult = XInputGetState(nPadNum, &state);
if (dwResult == ERROR_SUCCESS)
{
// Aボタンの判定のみ
p->Buttons[0] = (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) ? 1 : 0;
return TRUE;
}
return FALSE;
}
}
Main.cpp パッド0のAボタンを押したかどうかだけの判定
-----------------------------------------------------------------
#include "DxLib.h"
#include "フォルダ/MyXInput.h"
#pragma comment (lib, "フォルダ/MyXInput.lib")
using namespace MyXInput;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
SetAlwaysRunFlag(TRUE);
myXInput *xi = new myXInput();
DxLib::XINPUT_STATE state;
while (ProcessMessage() != -1) {
ClearDrawScreen();
xi->GetStatus(0, (LPBYTE)&state);
DrawFormatString(0, 0, GetColor(255, 255, 255), TEXT("Btn0=%d"), state.Buttons[0]);
ScreenFlip();
}
delete(xi);
DxLib_End();
return 0;
}
※dllmain.cppなどは省略しています。