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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| //Note: J'ai ajouté la taille d'un Player* à cbWndExtra
//[static]
bool Player::registerClass(HINSTANCE hInst, bool bAllowAlready)
{
WNDCLASSEX wincl;
wincl.hInstance = hInst;
wincl.lpszClassName = CLASSNAME;
wincl.lpfnWndProc = SProc;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof(wincl);
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = sizeof(Player *); // <--- ici!
//Ne pas oublier le +1...
wincl.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
if(!RegisterClassEx(&wincl))
{
if(!bAllowAlready || GetLastError()!=ERROR_ALREADY_EXISTS)
return false;
}
return true;
}
//[static]
LRESULT CALLBACK Player::SProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT ret = 0;
Player * pOwner = reinterpret_cast< Player * >(GetWindowLongPtr(hWnd, 0));
if(message==WM_CREATE)
{
CREATESTRUCT const * pcCS = reinterpret_cast< CREATESTRUCT const * >(lParam);
pOwner = static_cast< Player * >(pcCS->lpCreateParams);
SetWindowLongPtr(hWnd, 0, reinterpret_cast< LONG_PTR >(pOwner));
assert(pOwner->_hwnd==NULL || pOwner->_hwnd==hWnd);
pOwner->_hwnd = hWnd;
}
if(pOwner)
ret = pOwner->proc(message, wParam, lParam);
else
ret = DefWindowProc(hWnd, message, wParam, lParam);
return ret;
}
//[virtual]
LRESULT Player::proc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT ret = 0;
assert(this != NULL);
switch(message)
{
case WM_CREATE:
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
ret = DefWindowProc(_hwnd, message, wParam, lParam);
}
return ret;
} |
Partager