将InputManger.cpp中,第226行,CreateInput函数进行修改:
原函数:
void InputManager::createInput(size_t _handle)
{
mHwnd = (HWND)_handle;
if (!msOldWindowProc)
{
msOldWindowProc = GetWindowLong(mHwnd, GWL_WNDPROC);
SetWindowLong(mHwnd, GWL_WNDPROC, (long)windowProc);
}
// устанавливаем поддержку дропа файлов
LONG_PTR style = GetWindowLongPtr(mHwnd, GWL_EXSTYLE);
SetWindowLongPtr(mHwnd, GWL_EXSTYLE, style | WS_EX_ACCEPTFILES);
MyGUI::Gui::getInstance().eventFrameStart += MyGUI::newDelegate(this, &InputManager::frameEvent);
}
修改后:
void InputManager::createInput(size_t _handle)
{
mHwnd = (HWND)_handle;
// подсовываем нашу функцию калбеков
if (!msOldWindowProc)
{
msOldWindowProc = GetWindowLongPtr(mHwnd, GWLP_WNDPROC);
SetWindowLongPtr(mHwnd, GWLP_WNDPROC, (LONG_PTR)windowProc);
}
// устанавливаем поддержку дропа файлов
LONG_PTR style = GetWindowLongPtr(mHwnd, GWL_EXSTYLE);
SetWindowLongPtr(mHwnd, GWL_EXSTYLE, style | WS_EX_ACCEPTFILES);
MyGUI::Gui::getInstance().eventFrameStart += MyGUI::newDelegate(this, &InputManager::frameEvent);
}
其实就是 SetWindowLong 和SetWindowLongPtr使用不当导致。