Hallo,
ich möchte für meine CWnd-Klasse Messages registrieren.
Das mache ich so:
Header-Datei:
CPP-Datei
Im eigentlichen Programm habe ich dann einen Key-Listener Thread:
Als Ergebnis sollte bei einem Tastendruck die Funktion OnKeyDown ausgeführt werden.
Sieht jemand, warum das nicht passiert?!
Vielen Dank schonmal für evtl. Tipps!
Kox
ich möchte für meine CWnd-Klasse Messages registrieren.
Das mache ich so:
Header-Datei:
Code:
class MyCWnd : public CWnd
{
public:
MyCWnd();
virtual ~MyCWnd();
protected:
afx_msg void OnKeyDown (UINT nChar, UINT nRepCnt,UINT nFlags);
DECLARE_MESSAGE_MAP()
};
CPP-Datei
Code:
void MyCWnd::OnKeyDown (UINT nChar, UINT nRepCnt,UINT nFlags)
{
unsigned long *volume_pointer;
unsigned long volume;
unsigned long new_volume;
char wavName[] = "\\windows\\Default.wav";
CString csName = CString (wavName);
volume_pointer = &volume;
waveOutGetVolume(HWAVEOUT WAVE_MAPPER, volume_pointer);
switch (nChar){
case 38: {
if (volume+0x2000 > 0xFFFF) new_volume = 0xFFFF;
else new_volume = volume+0x2000;
waveOutSetVolume(HWAVEOUT WAVE_MAPPER,new_volume);
PlaySound(csName, NULL, SND_SYNC | SND_FILENAME);
break;
}
case 40: {
if (volume < 0x2000) new_volume = 0x0000;
else new_volume = volume-0x2000;
waveOutSetVolume(HWAVEOUT WAVE_MAPPER,new_volume);
PlaySound(csName, NULL, SND_SYNC | SND_FILENAME);
break;
}
}
}
BEGIN_MESSAGE_MAP(MyCWnd,CWnd)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
Code:
static UINT KeyListener(LPVOID Pparam) {
ThreadRun = true;
HWND hwnd = (HWND) Pparam;
CSTUtil su;
for (int i=0xc1; i<=0xcf; i++) {
su.RegisterHotKey(hwnd, i, i);
}
cwnd.Attach(hwnd);
cwnd.SendMessage(WM_KEYDOWN,0,0);
while (ThreadRun) {
Sleep(0);
}
delete cwnd;
return 0;
}
Als Ergebnis sollte bei einem Tastendruck die Funktion OnKeyDown ausgeführt werden.
Sieht jemand, warum das nicht passiert?!
Vielen Dank schonmal für evtl. Tipps!
Kox