Bonjour,
j'ai quelques difficultées avec l'api directinput. J'ai tenté de modifier l'exemple généré en visual C par le wizard direct 3D pour qu'il affiche une boite de dialogue quand on tape sur F4. Mais quand je tape sur F4 ce n'est pas une boite de dialogue, mais une infinitée (ou presque ) qui s'ouvre.

Je m'y suis pris ainsi :
1) j'ai rajouté INPUT_TEST_MATH dans les énumérations d'entrées possibles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
enum INPUT_SEMANTICS
{
    (...)
    INPUT_PLAY_SOUND,       
	INPUT_TEST_MATH,
};
2) j'ai mappé cette action à la touche F4
DIACTION g_rgGameAction[] =
{
(...)
{ INPUT_TEST_MATH, DIKEYBOARD_F4, 0, TEXT("Mathematical tests"), },
};

3) j'ai rajouté dans la structure UserInput une entrée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
struct UserInput
{
         (...)
	BOOL bDoTestMath;  // RAJOUTE 
};
4) j'ai rajouté dans la fonction "void CMyD3DApplication::UpdateInput( UserInput* pUserInput ) " une ligne pour prendre en compte INPUT_TEST_MATH. J'ai racourci le code que je vous montre pour que ce soit plus lisible. Vous pouvez y voir que j'ai mis un case pour que quand INPUT_TEST_MATH soit lu en entrée je mette bDoTestMath à TRUE. Avant chaque processing je le remet aussi à FALSE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
void CMyD3DApplication::UpdateInput( UserInput* pUserInput )
{
    if( NULL == m_pInputDeviceManager )
        return;
 
    // Get access to the list of semantically-mapped input devices
    CInputDeviceManager::DeviceInfo* pDeviceInfos;
    DWORD dwNumDevices;
    m_pInputDeviceManager->GetDevices( &pDeviceInfos, &dwNumDevices );
 
    // Loop through all devices and check game input
    for( DWORD i=0; i<dwNumDevices; i++ )
    {
        DIDEVICEOBJECTDATA rgdod[10];
	(...)
	pUserInput->bDoTestMath=FALSE;
 
        // Get the sematics codes for the game menu
        for( DWORD j=0; j<dwItems; j++ )
        {
		(...)
            switch( rgdod[j].uAppData )
            {
                // TODO: Handle semantics for the game 
 
                // Handle relative axis data
                case INPUT_ROTATE_AXIS_LR: (...)
		(...)
		case INPUT_TEST_MATH: if( bButtonState ) pUserInput->bDoTestMath = TRUE; break;					
            }
        }
    }
	(...)
}
5) finalement tout à la fin de la fonction FrameMove() j'ai rajouté le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
	if (m_UserInput.bDoTestMath)
	{
		HWND hDlg;
		hDlg=CreateDialog(g_hInst,(LPCTSTR)IDD_DIALOG1,NULL,NULL);
		ShowWindow(hDlg,SW_SHOW);	
 
	}
quelqu'un à une idée ?