Code snippet: replace window’s callback function

Exploring myGUI library. I have found this nice snippet.


//old procedure we'll replace later
LRESULT msOldWindowProc = NULL;
LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
...
mHwnd = (HWND)_handle;//our window

// our new callback function
if (!msOldWindowProc)
{
  msOldWindowProc = GetWindowLong(mHwnd, GWL_WNDPROC);
  SetWindowLong(mHwnd, GWL_WNDPROC, (long)windowProc);
}
...
//at the end of the program replace our procedure back
if (msOldWindowProc)
{
 SetWindowLong((HWND)mHwnd, GWL_WNDPROC, (long)msOldWindowProc);
 msOldWindowProc = 0;
}