LRESULT CALLBACK EXPORT AWLayoutWndProc ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { BOOL fHandled = FALSE; LRESULT lRet; Layout* pLayout = (Layout*)GetWindowLong(hwnd, I_GWL_LAYOUT); switch(uMsg) { case WM_CREATE: pLayout = (Layout*)(((CREATESTRUCT*)lParam)->lpCreateParams); SetWindowLong(hwnd, I_GWL_LAYOUT, (long)pLayout); pLayout->m_hwndLayout = hwnd; fHandled = TRUE; lRet = 0L; break; case WM_SYSCOMMAND: if((wParam & 0xFFF0)==SC_CLOSE) { FORWARD_WM_COMMAND(hwnd, IDM_EXIT, 0, 0, PostMessage); fHandled = TRUE; lRet = 0L; break; } break; case WM_QUERYENDSESSION: MessageBeep(MB_ICONEXCLAMATION); MessageBox(hwnd, "Window layout is still active.\r\n\r\nQuit the window layout before quitting Windows.", "Window Layout", MB_TASKMODAL | MB_OK | MB_ICONEXCLAMATION); lRet = 0; fHandled = TRUE; break; case WM_KEYDOWN: (pLayout->m_shapes).KeyDown(pLayout->m_pWndActive, hwnd, (int)wParam, lParam); fHandled = TRUE; lRet = 0L; break; case WM_KEYUP: (pLayout->m_shapes).KeyUp(pLayout->m_pWndActive, hwnd, (int)wParam, lParam); fHandled = TRUE; lRet = 0L; break; case WM_INITMENUPOPUP: HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, pLayout->InitMenuPopup); fHandled = TRUE; lRet = 0L; break; case WM_PALETTECHANGED: if ((pLayout->ActiveWindow()) && ((HWND)wParam==pLayout->ActiveWindow()->ClientWnd())) break; // else fall through case WM_QUERYNEWPALETTE: if(!IsIconic(hwnd) && pLayout->ActiveWindow() && WndData::GetPaletteHandle()) { HDC hdc = GetDC(pLayout->ActiveWindow()->ClientWnd()); HPALETTE hpalOld = SelectPalette(hdc, WndData::GetPaletteHandle(), FALSE); lRet = RealizePalette(hdc); SelectPalette(hdc, hpalOld, TRUE); RealizePalette(hdc); ReleaseDC(pLayout->ActiveWindow()->ClientWnd(), hdc); if(lRet) InvalidateRect(pLayout->ActiveWindow()->ClientWnd(), NULL, TRUE); fHandled = TRUE; } break; case WM_HSCROLL: HANDLE_WM_HSCROLL(hwnd, wParam, lParam, pLayout->HScroll); fHandled = TRUE; lRet = 0; break; case WM_VSCROLL: HANDLE_WM_VSCROLL(hwnd, wParam, lParam, pLayout->VScroll); fHandled = TRUE; lRet = 0L; break; case WM_SIZE: pLayout->UpdateScrollRegion(); fHandled = TRUE; lRet = 0L; break; case WM_COMMAND: HANDLE_WM_COMMAND(hwnd, wParam, lParam, pLayout->Command); fHandled = TRUE; lRet = 0L; break; case WM_NCACTIVATE: if(!IsIconic(hwnd) && pLayout->m_pWndActive && pLayout->m_pWndActive->WndHandle()) SendMessage(pLayout->m_pWndActive->WndHandle(), uMsg, wParam, lParam); break; default: break; } if(!fHandled) lRet = DefWindowProc(hwnd, uMsg, wParam, lParam); return lRet; }