#ifndef CLASS_FRAME #define CLASS_FRAME "MakeMDI_Frame" // ==========================================================Purpose // FRAME.H - Top level application window. // // MAKEMDI adaptation of Windows 3.1 SDK MAKEAPP system. // // MDI application design based on Chapter 7 of // "Windows 3: A Developer's Guide" by Jeffrey Richter. // // Adaptation developed with permission of the author by // John F. Holliday, Technisoft Corporation // Telephone: (515) 472-9803, CompuServe: 71271,634 // // [DMM] 25-Nov-1992: Fixed crashing on exit // Also tabified file to tabsize of 4 // // David M. Miller, Business Visions, Inc. // Telephone: (212) 747-6118 // CompuServe: 72676,327 // internet: dmiller@hera.sbi.com // ==========================================================Private // Window procedure LRESULT CALLBACK _export Frame_WndProc(HWND, UINT, WPARAM, LPARAM); // Default message handler #define Frame_DefProc DefWindowProc // Instance data structure typedef struct tagFRAME { HWND hWnd; // Instance window handle. HWND hWndClient; // Client window handle. HWND hWndActiveMDIChild; // Active MDI child window. WORD wNumSheets; // Number of Sheet windows created. WORD wNumCharts; // Number of Chart windows created. HMENU hMenu; /* Menu used when no MDI children are active. */ DLGPROC fpProcRibbon; // Ribbon dialog procedure address. HWND hdlgRibbon; // Ribbon modeless dialog box. BOOL fStatusBarOn; // Is the status bar showing? BOOL fMDIChildIsMaximized; /* Is the active child maximized? */ HWND hWndMenuHelp; /* Window that last received a WM_MENUSELECT message. */ DWORD dwMenuHelp; /* Menu help code placed here by hWndMenuHelp window. */ } FRAME; // Instance data pointer access functions #if defined(M_I86SM) || defined(M_I86MM) #define Frame_GetPtr(hWnd) (FRAME*)GetWindowWord((hWnd), 0) #define Frame_SetPtr(hWnd, pfrm) (FRAME*)SetWindowWord((hWnd), 0, (WORD)(pfrm)) #else #define Frame_GetPtr(hWnd) (FRAME*)GetWindowLong((hWnd), 0) #define Frame_SetPtr(hWnd, pfrm) (FRAME*)SetWindowLong((hWnd), 0, (LONG)(pfrm)) #endif // Helper macros #define GETFRAME(hWnd) ((HWND) (GetParent(GetParent(hWnd)))) // Frame message handler macros #define HANDLE_FW_MDICHILDDESTROY(hWnd, wParam, lParam, fn) \ ((fn)((hWnd)), 0) #define FORWARD_FW_MDICHILDDESTROY(hWnd, fn) \ (void)(fn)((hWnd), FW_MDICHILDDESTROY, 0, 0L) #define HANDLE_FW_GETSTATBARRECT(hWnd, wParam, lParam, fn) \ ((fn)((hWnd), (LPRECT)(LPARAM)(lParam)), 0) #define FORWARD_FW_GETSTATBARRECT(hWnd, lpRect, fn) \ (void)(fn)((hWnd), FW_GETSTATBARRECT, 0, (LPARAM)(LPRECT)(lpRect)) #define HANDLE_FW_DRAWSTATUSDIVIDE(hWnd, wParam, lParam, fn) \ ((fn)((hWnd), (LPPAINTSTRUCT)(LPARAM)(lParam)), 0) #define FORWARD_FW_DRAWSTATUSDIVIDE(hWnd, lps, fn) \ (void)(fn)((hWnd), FW_DRAWSTATUSDIVIDE, 0, (LPARAM)(LPPAINTSTRUCT)(lps)) #define HANDLE_FW_RESIZEMDICLIENT(hWnd, wParam, lParam, fn) \ ((fn)((hWnd)), 0) #define FORWARD_FW_RESIZEMDICLIENT(hWnd, fn) \ (void)(fn)((hWnd), FW_RESIZEMDICLIENT, 0, 0L) #define HANDLE_FW_SETMENUHELP(hWnd, wParam, lParam, fn) \ ((fn)((hWnd),(HWND)(WPARAM)(wParam),(DWORD)(LPARAM)(lParam)), 0) #define FORWARD_FW_SETMENUHELP(hWnd, hWndMenuHelp, dwMenuHelp, fn) \ (void)(fn)((hWnd), FW_SETMENUHELP, (WPARAM)(HWND)(hWndMenuHelp), \ (LPARAM)(DWORD)(dwMenuHelp)) #define HANDLE_FW_GETMENUHELP(hWnd, wParam, lParam, fn) \ (LRESULT)(DWORD)((fn)(hWnd)) #define FORWARD_FW_GETMENUHELP(hWnd, fn) \ (DWORD)(fn)((hWnd), FW_GETMENUHELP, 0, 0L) // Application message handler macros #define HANDLE_AW_PAINTMENUHELP(hWnd, wParam, lParam, fn) \ ((fn)((hWnd),(LPPAINTSTRUCT)(LPARAM)(lParam)), 0) #define FORWARD_AW_PAINTMENUHELP(hWnd, ps, fn) \ (void)(fn)((hWnd), AW_PAINTMENUHELP, 0, (LPARAM)(LPPAINTSTRUCT)(ps)) #define HANDLE_AC_PAINTSTATBAR(hWnd, wParam, lParam, fn) \ ((fn)((hWnd),(HDC)(WPARAM)(wParam),(LPPAINTSTRUCT)(LPARAM)(lParam)), 0) #define FORWARD_AC_PAINTSTATBAR(hWnd, hdc, ps, fn) \ (void)(fn)((hWnd), AC_PAINTSTATBAR, 0, (WPARAM)(HDC)(wParam), \ (LPARAM)(LPPAINTSTRUCT)(ps)) // Message handler declarations BOOL Frame_OnCreate(FRAME * pfrm, CREATESTRUCT FAR * lpCreateStruct); void Frame_OnDestroy(FRAME * pfrm); BOOL Frame_OnQueryEndSession(FRAME * pfrm); void Frame_OnEndSession(FRAME * pfrm, BOOL fEnding); void Frame_OnClose(FRAME * pfrm); void Frame_OnSize(FRAME * pfrm, UINT state, int cx, int cy); void Frame_OnPaint(FRAME * pfrm); BOOL Frame_OnEraseBkgnd(FRAME * pfrm, HDC hdc); void Frame_OnActivate(FRAME * pfrm, UINT state, HWND hWndActDeact, BOOL fMinimized); void Frame_OnSetFocus(FRAME * pfrm, HWND hWndOldFocus); void Frame_OnKillFocus(FRAME * pfrm, HWND hWndNewFocus); void Frame_OnKey(FRAME * pfrm, UINT vk, BOOL fDown, int cRepeat, UINT flags); void Frame_OnChar(FRAME * pfrm, UINT ch, int cRepeat); void Frame_OnMouseMove(FRAME * pfrm, int x, int y, UINT keyFlags); void Frame_OnLButtonDown(FRAME * pfrm, BOOL fDoubleClick, int x, int y, UINT keyFlags); void Frame_OnLButtonUp(FRAME * pfrm, int x, int y, UINT keyFlags); void Frame_OnInitMenu(FRAME * pfrm, HMENU hMenu); void Frame_OnInitMenuPopup(FRAME * pfrm, HMENU hMenu, int item, BOOL fSystemMenu); void Frame_OnCommand(FRAME * pfrm, int id, HWND hWndCtl, UINT codeNotify); void Frame_OnSysCommand(FRAME * pfrm, WORD cmd, int x, int y); void Frame_OnNclButtonDown(FRAME * pfrm, BOOL fDoubleClick, int x, int y, UINT codeHitTest); void Frame_OnMenuSelect(FRAME * pfrm, HMENU hMenu, int item, HMENU hmenuPopup, UINT flags); void Frame_OnEnterIdle(FRAME * pfrm, WORD source, HWND hWndSource); void Frame_OnMdiChildDestroy(FRAME * pfrm); void Frame_OnGetStatBarRect(FRAME * pfrm, LPRECT lpRect); void Frame_OnDrawStatusDivide(FRAME * pfrm, LPPAINTSTRUCT lpps); void Frame_OnResizeMdiClient(FRAME * pfrm); void Frame_OnSetMenuHelp(FRAME * pfrm, HWND hWndMenuHelp, DWORD dwMenuHelp); DWORD Frame_OnGetMenuHelp(FRAME * pfrm); void Frame_OnPaintMenuHelp(FRAME * pfrm, LPPAINTSTRUCT lpps); // ===========================================================Public BOOL Frame_Initialize(APP * papp); void Frame_Terminate(APP * papp); HWND Frame_CreateWindow(LPCSTR lpszText, int x, int y, int cx, int cy, HINSTANCE hinst); void WINAPI Frame_TileVertically(HWND hWndMDIClient); HWND WINAPI Frame_CreateMDIChild(LPSTR szClassName, LPSTR szWindowName, DWORD dwStyle, short x, short y, short nWidth, short nHeight, HWND hWndMDIClient, HANDLE hInstance, LPARAM lParam); void WINAPI Frame_ChangeMDIMenu(HWND hWndFrame, HWND hWndClient, HMENU hMenuNew, WORD wMenuID); //--------------------------------------------------------------End #endif // !CLASS_FRAME