Hallöchen zusammen =)
Ich bin heute morgen im Buch and der Stelle angekommen, an der man die Tastatureingaben nichtmehr mit GetAsyncKeyState(), sondern mit einem LPDIRECTINPUTDEVICE8 abfangen soll.
So mein Problem ist es, dass ich an der Stelle:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
for(int a=0; a < 256; a++)
{
if(aKey[a] & 0x80)
{
sprintf(desc, "%d", a);
}
}
|
Immer 255 für a rauskrieg....
wenn ich a < 55 schreibe (zum Test) steht dann halt 55 da.
Ich nutze den Kram NICHT in einer normalen Dialoganwenung mit CALLBACK-Funktion, sondern in einem "Game" (meinetwegen das Programm aus Kapitel 3 mit der Skybox und dem Wasser).
So ich glaube, dass liegt daran, dass man beim g_pKeyboard->SetCooperativeLevel( als ersten Parameter das Window, für das dieses Device gilt angeben muss.... und man bekommt das Handle nirgends her (ich habs mit tbDirect3D::Instance().GetWindow() probiert und es geht nicht).
In dem Bespielprogrammen zum Theme Input aus dem Buch werden dooferweise immer nur normale Anwendungen behandelt und da kriegt man das HWND handle von der CALLBACK-funktion und kanns weiterreichen (wenns daran liegen sollte).
Ich poste noch eben fix den Code und bedanke mich schonma für die Hilfe!!!!!!
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
tbResult Input::initKeyboard()
{
if(FAILED(this->pDirectInput->CreateDevice(GUID_SysKeyboard, &this->pKeyboard, NULL)))
return TB_ERROR;
if(FAILED(this->pKeyboard->SetDataFormat(&c_dfDIKeyboard)))
return TB_ERROR;
if(FAILED(this->pKeyboard->SetCooperativeLevel(tbDirect3D::Instance().GetWindow(),
DISCL_NONEXCLUSIVE | DISCL_FOREGROUND)))
return TB_ERROR;
return TB_OK;
}
|
|
C-/C++-Quelltext
|
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
|
tbResult Input::updateKeyboardState()
{
BYTE aKey[256]; // Array von Tastenwerten
char desc[256]; // Text für das Dialogfeld
HRESULT r;
// Daten abfragen
r = pKeyboard->GetDeviceState(256, aKey);
if(r == DIERR_INPUTLOST)
{
// Zugriff verloren - erneut versuchen
pKeyboard->Acquire();
}
if(FAILED(r))
{
return TB_ERROR;
}
strcpy(desc, "");
for(int a=0; a < 256; a++)
{
if(aKey[a] & 0x80)
{
sprintf(desc, "%d", a);
}
}
font->Begin();
//HIER STEHT IMMER 255 -.-
font->DrawTextA(tbVector2(5.0f, 50.0f), desc);
font->End();
|