Last updated: 13. 2.1998, 22:48
<*/NOWARN:F*> IMPLEMENTATION MODULE StatBar; (*------------------------------------------- STATBAR.C --- Status bar helper functions. (c) Paul Yao, 1996 StatBar.mod --- Translation to Stony Brook Modula-2 (c) Peter Stadler, 1998 -------------------------------------------*) IMPORT comcthlp; IMPORT COMMCTRL; IMPORT WIN32; IMPORT WINUSER; IMPORT h2d_gadgets; IMPORT SYSTEM; IMPORT WINX; IMPORT ToolBar; IMPORT ASCII; TYPE POPUPSTRING = RECORD hMenu :WIN32.HMENU; uiString :WIN32.UINT; END; CONST MAX_MENUS=5; VAR popstr : ARRAY[0..MAX_MENUS-1] OF POPUPSTRING; VAR bSimple : BOOLEAN = TRUE; (*******************************************************************- *) PROCEDURE InitStatusBar (hwndParent : WIN32.HWND) : WIN32.HWND; VAR hwndSB : WIN32.HWND; hMenu : WIN32.HMENU; hMenuTB : WIN32.HMENU; hMenuSB : WIN32.HMENU; BEGIN (* Initialize values for WM_MENUSELECT message handling *) hMenu := WINUSER.GetMenu (hwndParent); hMenuTB := WINUSER.GetSubMenu (hMenu, 2); hMenuSB := WINUSER.GetSubMenu (hMenu, 3); popstr[0].hMenu := NIL; popstr[0].uiString := 0; popstr[1].hMenu := hMenu; popstr[1].uiString := h2d_gadgets.IDS_MAIN_MENU; popstr[2].hMenu := hMenuTB; popstr[2].uiString := h2d_gadgets.IDS_TOOLBAR_MENU; popstr[3].hMenu := hMenuSB; popstr[3].uiString := h2d_gadgets.IDS_STATUSBAR_MENU; popstr[4].hMenu := NIL; popstr[4].uiString := 0; hwndSB := COMMCTRL.CreateStatusWindow (dwStatusBarStyles, "Ready", hwndParent, 2); RETURN hwndSB; END InitStatusBar; (*******************************************************************- *) PROCEDURE FlipStyleFlag (dwStyle : WIN32.LPDWORD; flag : WIN32.DWORD); BEGIN IF (dwStyle^ BAND flag#0) THEN (* Flag on -- turn off *) dwStyle^ := dwStyle^ BAND BNOT flag; ELSE (* Flag off -- turn on *) dwStyle^ := dwStyle^ BOR flag; END; END FlipStyleFlag; (*******************************************************************- *) PROCEDURE RebuildStatusBar (hwndParent : WIN32.HWND; wFlag : WIN32.WORD) : WIN32.HWND; VAR hwndSB : WIN32.HWND; r : WIN32.RECT; BEGIN CASE (wFlag) OF | h2d_gadgets.IDM_STAT_SIZEGRIP : FlipStyleFlag (SYSTEM.ADR(dwStatusBarStyles), COMMCTRL.SBARS_SIZEGRIP); | h2d_gadgets.IDM_STAT_TOP : dwStatusBarStyles := dwStatusBarStyles BAND 0FFFFFFFCh; dwStatusBarStyles := dwStatusBarStyles BOR COMMCTRL.CCS_TOP; | h2d_gadgets.IDM_STAT_BOTTOM : dwStatusBarStyles := dwStatusBarStyles BAND 0FFFFFFFCh; dwStatusBarStyles := dwStatusBarStyles BOR COMMCTRL.CCS_BOTTOM; | h2d_gadgets.IDM_STAT_NOMOVEY : dwStatusBarStyles := dwStatusBarStyles BAND 0FFFFFFFCh; dwStatusBarStyles := dwStatusBarStyles BOR COMMCTRL.CCS_NOMOVEY; | h2d_gadgets.IDM_STAT_NOPARENTALIGN : FlipStyleFlag (SYSTEM.ADR(dwStatusBarStyles), COMMCTRL.CCS_NOPARENTALIGN); | h2d_gadgets.IDM_STAT_NORESIZE : FlipStyleFlag (SYSTEM.ADR(dwStatusBarStyles), COMMCTRL.CCS_NORESIZE); ELSE END; hwndSB := InitStatusBar (hwndParent); (* Post parent a WM_SIZE message to resize children *) WINUSER.GetClientRect (hwndParent, r); WINUSER.PostMessage (hwndParent, WINUSER.WM_SIZE, 0, WINUSER.MAKELPARAM (r.right, r.bottom)); RETURN hwndSB; END RebuildStatusBar; (*******************************************************************- *) PROCEDURE StatusBarMessage (hwndSB : WIN32.HWND; wMsg : WIN32.WORD); VAR ach : ARRAY[0..179] OF CHAR; och : ARRAY[0..179] OF CHAR; aiBorders : ARRAY[0..2] OF INTEGER; nParts : INTEGER; BEGIN CASE (wMsg) OF | h2d_gadgets.IDM_ST_GETBORDERS : comcthlp.Status_GetBorders (hwndSB, aiBorders); och := "Horiz Width = %d/n"+ASCII.lf+ "Vert Width = %d/n"+ASCII.lf+ "Separator Width = %d"; WINUSER.wsprintf (ach,och, aiBorders[0], aiBorders[1], aiBorders[2]); WINUSER.MessageBox (WINUSER.GetParent (hwndSB), ach, "COMMCTRL.SB_GETBORDERS", WINUSER.MB_OK); | h2d_gadgets.IDM_ST_GETPARTS : nParts := comcthlp.Status_GetParts (hwndSB, 0, 0); WINUSER.wsprintf (ach, "Part Count = %d", nParts); WINUSER.MessageBox (WINUSER.GetParent (hwndSB), ach, "COMMCTRL.SB_GETPARTS", WINUSER.MB_OK); | h2d_gadgets.IDM_ST_SETTEXT : comcthlp.Status_SetText (hwndSB, 0, 0, "COMMCTRL.SB_SETTEXT Message Sent"); | h2d_gadgets.IDM_ST_SIMPLE : comcthlp.Status_Simple (hwndSB, VAL(WIN32.WORD,bSimple)); bSimple := NOT bSimple; ELSE END; END StatusBarMessage; (*******************************************************************- *) PROCEDURE StatusBar_MenuSelect (hwnd : WIN32.HWND; wParam : WIN32.WPARAM; lParam : WIN32.LPARAM) : WIN32.LRESULT; VAR fuFlags : WIN32.UINT; hMainMenu : WIN32.HMENU = NIL; iMenu : INTEGER = 0; BEGIN fuFlags := VAL(WIN32.UINT, WINUSER.HIWORD (wParam)); (* Handle non-system popup menu descriptions. *) IF ((fuFlags BAND WINUSER.MF_POPUP=1) AND ((fuFlags BAND WINUSER.MF_SYSMENU)=0)) THEN iMenu := 1; LOOP IF ((SYSTEM.CAST(WIN32.HMENU,lParam) = popstr[iMenu].hMenu)) THEN hMainMenu := SYSTEM.CAST(WIN32.HMENU,lParam); EXIT; END; INC(iMenu); IF(iMenu>=MAX_MENUS) THEN EXIT; END; END; END; (* Display helpful text in status bar *) COMMCTRL.MenuHelp (WINUSER.WM_MENUSELECT, wParam, lParam, hMainMenu, ToolBar.hInst, hwndStatusBar, SYSTEM.CAST(WIN32.UINT,popstr[iMenu])); RETURN 0; END StatusBar_MenuSelect; END StatBar.