接昨天:
虽然将FOREGROUND改为BACKGROUND解决了问题,但这实际上是治标不治本,FOREGROUND总得解决,经过半天的努力,终于找到问题所在,其实是一个很低级的错误。
ShowWindow( g_hwnd, SW_SHOWDEFAULT );
UpdateWindow( g_hwnd );
显示窗口一定要放在初始化DirectInputDevice之前。否则做Acquire的时候会得到一个E_ACCESSDENIED.
还有一点很关键,在FOREGROUND模式下,一旦窗口失去焦点将会被自动的Unacquire,所以在处理WM_ACTIVATE消息的代码中重新做Acquire.否则窗口一旦失去焦点再重新获得焦点以后就无法相应键盘的输入.