STATBAR.C
上传用户:woweijixie
上传日期:2018-12-11
资源大小:131k
文件大小:7k
源码类别:

TAPI编程

开发平台:

Visual C++

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1995  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE: statbar.c
  9. //
  10. //  PURPOSE: Handles general routines for the TapiComm sample.
  11. //
  12. //  FUNCTIONS:
  13. //    MsgTimer      - Handles the WM_TIMER messages to set the time on
  14. //                    the status bar.
  15. //    MsgMouseMove  - Handles the WM_MOUSEMOVE to display the cursor position.
  16. //    MsgMenuSelect - Handle the WM_MENUSELECT message. This message will
  17. //                    enable the status bar control to update when the user
  18. //                    moves across menu items on the main window.
  19. //    InitializeStatusBar - Sets the pane positions in the statusbar control
  20. //    CreateSBar    - Calls CreateStatusWindow() to create the status bar
  21. //    UpdateStatusBar - Updates the statusbar control with appropriate text
  22. //
  23. #include <windows.h>            // required for all Windows applications
  24. #include <windowsx.h>
  25. #include <commctrl.h>           // prototypes and defs for common controls
  26. #include "globals.h"            // prototypes specific to this application
  27. #include "statbar.h"            // prototypes specific to statbar.c
  28. // Global Variables for the status bar control.
  29. HWND  hWndStatusbar;
  30. //  **TODO**  Add entries to the string table in TapiComm.rc for each menu
  31. //            command.  MsgMenuSelect (below) loads these strings to display
  32. //            information in the status bar.  MsgMenuSelect assumes that the
  33. //            string ID is the same as the command ID and that a string
  34. //            exists for every command.
  35. //
  36. // The following array contains resource string ID's for popup menus
  37. // in the main application menu.  This array is used by MsgMenuSelect
  38. // to display information in the status bar.
  39. //
  40. //  **TODO**  Add entries to this array for each popup menu in the same
  41. //            positions as they appear in the main menu.  Remember to define
  42. //            the ID's in globals.h and add the strings to TapiComm.rc.
  43. UINT idPopup[] =
  44. {
  45.     IDS_FILEMENU,
  46.     IDS_EDITMENU,
  47.     IDS_HELPMENU,
  48. };
  49. //
  50. //  FUNCTION: MsgMenuSelect(HWND, UINT, WPARAM, LPARAM)
  51. //
  52. //  PURPOSE:  Upadates menu selections on the staus bar.
  53. //
  54. //
  55. //  PARAMETERS:
  56. //
  57. //    hwnd      - Window handle  (Used)
  58. //    uMessage  - Message number (Used)
  59. //    wparam    - Extra data     (Used)
  60. //    lparam    - Extra data     (Used)
  61. //
  62. //  RETURN VALUE:
  63. //
  64. //    Always returns 0 - Message handled
  65. //
  66. //  COMMENTS:
  67. //    This message is sent when the user selects menu items by
  68. //    by pulling down  a popup menu move the mouse around to highlite
  69. //    different menu items.
  70. //
  71. //
  72. #define MENUHACK 1              // Menu Select message has a bug..so workaround
  73. LRESULT MsgMenuSelect(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  74. {
  75.     static char szBuffer[128];
  76.     UINT   nStringID = 0;
  77.     UINT   fuFlags = GET_WM_MENUSELECT_FLAGS(wparam, lparam) & 0xffff;
  78.     UINT   uCmd    = GET_WM_MENUSELECT_CMD(wparam, lparam);
  79.     HMENU  hMenu   = GET_WM_MENUSELECT_HMENU(wparam, lparam);
  80.     szBuffer[0] = 0;                            // First reset the buffer
  81.     if (fuFlags == 0xffff && hMenu == NULL)     // Menu has been closed
  82.         nStringID = IDS_DESCRIPTION;
  83.     else if (fuFlags & MFT_SEPARATOR)           // Ignore separators
  84.         nStringID = 0;
  85.     else if (fuFlags & MF_POPUP)                // Popup menu
  86.     {
  87. #ifdef MENUHACK                 // This code shouldn't be necessary...
  88.         UINT i;
  89.         for (i = 0; i < sizeof(idPopup)/sizeof(idPopup[0]); i++)
  90.         {
  91.             if(GetSubMenu(hMenu, i) == (HMENU)uCmd)
  92.             {
  93.                 uCmd = i;
  94.                 break;
  95.             }
  96.         }
  97. #endif
  98.         if (fuFlags & MF_SYSMENU)               // System menu
  99.             nStringID = IDS_SYSMENU;
  100.         else
  101.             // Get string ID for popup menu from idPopup array.
  102.             nStringID = ((uCmd < sizeof(idPopup)/sizeof(idPopup[0])) ?
  103.                             idPopup[uCmd] : 0);
  104.     }  // for MF_POPUP
  105.     else                                        // Must be a command item
  106.         nStringID = uCmd;                       // String ID == Command ID
  107.     // Load the string if we have an ID
  108.     if (0 != nStringID)
  109.         LoadString(hInst, nStringID, szBuffer, sizeof(szBuffer));
  110.     // Finally... send the string to the status bar
  111.     UpdateStatusBar(szBuffer, 0, 0);
  112.     return 0;
  113. }
  114. //
  115. //  FUNCTION: InitializeStatusBar(HWND)
  116. //
  117. //  PURPOSE:  Initialize statusbar control with time and mouse positions.
  118. //
  119. //
  120. //  PARAMETERS:
  121. //
  122. //  hwndParent - Window handle of the status bar's parent
  123. //
  124. //
  125. //  RETURN VALUE:  NONE
  126. //
  127. //
  128. //  COMMENTS:
  129. //
  130. //   This function initializes the time  and mouse positions sections of
  131. //   the statubar window. The Date for the time section is obtained by
  132. //   calling SetTimer API. When the timer messages start comming in,
  133. //   GetSytemTime() to fill the time section.
  134. //   The WPARAM of SB_SETTEXT is divided into 2 parameters. The LOWORD
  135. //   determines which section/part the text goes into, and the HIWORD
  136. //   tells how the bar is drawn (popin or popout).
  137. //
  138. void InitializeStatusBar(HWND hwndParent)
  139. {
  140.     const cSpaceInBetween = 8;
  141.     int   ptArray[2];   // Array defining the number of parts/sections
  142.     SIZE  size = {0,0};         // the Status bar will display.
  143.     RECT  rect;
  144.     HDC   hDC;
  145.    /*
  146.     * Fill in the ptArray...
  147.     */
  148.     hDC = GetDC(hwndParent);
  149.     GetClientRect(hwndParent, &rect);
  150.     ReleaseDC(hwndParent, hDC);
  151.     ptArray[0] = (rect.right) / 2;
  152.     ptArray[1] = rect.right;
  153.     SendMessage(hWndStatusbar,
  154.                 SB_SETPARTS,
  155.                 sizeof(ptArray)/sizeof(ptArray[0]),
  156.                 (LPARAM)(LPINT)ptArray);
  157.     UpdateStatusBar(SZDESCRIPTION, 0, 0);
  158. }
  159. //
  160. //  FUNCTION: CreateSBar(HWND, UINT, WPARAM, LPARAM)
  161. //
  162. //  PURPOSE:  Calls CreateStatusWindow() to create the status bar
  163. //
  164. //
  165. //  PARAMETERS:
  166. //
  167. //  hwndParent - Window handle of the status bar's parent
  168. //
  169. //  RETURN VALUE:
  170. //
  171. //  If both controls were created successfully Return TRUE,
  172. //  else returns FALSE.
  173. //
  174. //  COMMENTS:
  175. //
  176. //
  177. BOOL CreateSBar(HWND hwndParent)
  178. {
  179.     hWndStatusbar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER,
  180.                                        SZDESCRIPTION,
  181.                                        hwndParent,
  182.                                        IDM_STATUSBAR);
  183.     if(hWndStatusbar)
  184.     {
  185.         InitializeStatusBar(hwndParent);
  186.         return TRUE;
  187.     }
  188.     return FALSE;
  189. }
  190. //
  191. //  FUNCTION: UpdateStatusBar(HWND)
  192. //
  193. //  PURPOSE:  Updates the statusbar control with appropriate text
  194. //
  195. //
  196. //  PARAMETERS:
  197. //
  198. //  lpszStatusString - text to be displayed
  199. //  partNumber       - which part of the status bar to display text in
  200. //  displayFlags     - display flags
  201. //
  202. //
  203. //  RETURN VALUE: NONE
  204. //
  205. //
  206. //  COMMENTS:
  207. //      None
  208. //
  209. //
  210. void UpdateStatusBar(LPSTR lpszStatusString, WORD partNumber, WORD displayFlags)
  211. {
  212.     SendMessage(hWndStatusbar,
  213.                 SB_SETTEXT,
  214.                 partNumber | displayFlags,
  215.                 (LPARAM)lpszStatusString);
  216. }