TOOLBAR.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1992-1997 Microsoft Corporation.
  4. *       All rights reserved. 
  5. *       This source code is only intended as a supplement to 
  6. *       Microsoft Development Tools and/or WinHelp documentation.
  7. *       See these sources for detailed information regarding the 
  8. *       Microsoft samples programs.
  9. ******************************************************************************/
  10. /**************************************************************************
  11. *  toolbar.c -- module for the "toolbar" on top of the main window.
  12. *   Includes the window procedure and an initialization routine.
  13. **************************************************************************/
  14. #include <windows.h>
  15. #include "ttfonts.h"
  16. /* for the initial positioning of the buttons within the toolbar. */
  17. #define SPACEBUTTON 8
  18. #define CXBUTTON ((GetSystemMetrics (SM_CXFULLSCREEN)) /5 -2*SPACEBUTTON)
  19. #define BUTTONTOP    TOOLBARHEIGHT/8
  20. #define BUTTONHEIGHT TOOLBARHEIGHT*3/4
  21. #define BUTTONLEFT(x) ((2*x+1)*SPACEBUTTON + x*CXBUTTON)
  22. #define BORDER     2
  23. int initTB (HWND hwndParent)
  24. {
  25. WNDCLASS  wc;
  26.   wc.style = 0;
  27.   wc.lpfnWndProc = (WNDPROC)ToolBarWndProc;
  28.   wc.cbClsExtra = 0;
  29.   wc.cbWndExtra = 0;
  30.   wc.hInstance = hInst;
  31.   wc.hIcon = NULL;
  32.   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  33.   wc.hbrBackground = GetStockObject(LTGRAY_BRUSH);
  34.   wc.lpszMenuName = NULL;
  35.   wc.lpszClassName = TEXT("ToolBar");
  36.   if (!RegisterClass(&wc)) return (FALSE);
  37.   hwndTB = CreateWindow(
  38.       TEXT("ToolBar"),
  39.       NULL,
  40.       WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
  41.       0,0,
  42.       GetSystemMetrics (SM_CXFULLSCREEN),
  43.       TOOLBARHEIGHT,
  44.       hwndParent, NULL, hInst, NULL);
  45.   if (!hwndTB) return (FALSE);
  46.   return TRUE;
  47. }
  48. /**************************************************************************
  49. *
  50. *  function:  ToolBarWndProc
  51. *
  52. *  input parameters:  normal window procedure parameters.
  53. *
  54. *  global variables:
  55. *   hwndMain - parent of the toolbar.
  56. *
  57. * When the window is created, create the various buttons.  When those
  58. *  buttons send WM_COMMAND messages later, send the messages back to hwndMain.
  59. *
  60. **************************************************************************/
  61. LRESULT CALLBACK ToolBarWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  62. {
  63. static HWND  hwndButton, hwndEnumPrinter;
  64.   switch (message) {
  65.     /**********************************************************************
  66.     *  WM_CREATE
  67.     *
  68.     * Create the various buttons which are on the toolbar.  Once the buttons
  69.     *  are created, set the window ID so that the WM_COMMANDS may be
  70.     *  distinguished.
  71.     **********************************************************************/
  72.     case WM_CREATE: {
  73.       hwndButton = CreateWindow(
  74.         TEXT("BUTTON"),TEXT("EnumFonts"),
  75.         WS_CHILD | WS_VISIBLE,
  76.         BUTTONLEFT(0),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
  77.         hwnd, NULL, hInst, NULL);
  78.       SetWindowLong (hwndButton, GWL_ID, TBID_ENUM);
  79.       hwndButton = CreateWindow(
  80.         TEXT("BUTTON"),TEXT("CreateFont"),
  81.         WS_CHILD | WS_VISIBLE,
  82.         BUTTONLEFT(1),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
  83.         hwnd, NULL, hInst, NULL);
  84.       SetWindowLong (hwndButton, GWL_ID, TBID_CREATE);
  85.       hwndButton = CreateWindow(
  86.         TEXT("BUTTON"),TEXT("GetMetrics"),
  87.         WS_CHILD | WS_VISIBLE ,
  88.         BUTTONLEFT(2),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
  89.         hwnd, NULL, hInst, NULL);
  90.       SetWindowLong (hwndButton, GWL_ID, TBID_GETTM);
  91.       hwndButton = CreateWindow(
  92.         TEXT("BUTTON"),TEXT("GetFontData"),
  93.         WS_CHILD | WS_VISIBLE ,
  94.         BUTTONLEFT(3),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
  95.         hwnd, NULL, hInst, NULL);
  96.       SetWindowLong (hwndButton, GWL_ID, TBID_GETFONTDATA);
  97.       hwndEnumPrinter = CreateWindow(
  98.         TEXT("BUTTON"),TEXT("Enum(Printer)"),
  99.         WS_CHILD | WS_VISIBLE,
  100.         BUTTONLEFT(4),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
  101.         hwnd, NULL, hInst, NULL);
  102.       SetWindowLong (hwndEnumPrinter, GWL_ID, TBID_PRINT);
  103.     } break;
  104.     /**********************************************************************
  105.     *  WM_COMMAND
  106.     *
  107.     * Send the command messages back to hwndMain.
  108.     *  except for the one to disable the printer button.
  109.     **********************************************************************/
  110.     case WM_COMMAND:
  111.       if (wParam == IDU_NOPRINTER)
  112.         EnableWindow (hwndEnumPrinter, FALSE);
  113.       else
  114.         PostMessage (hwndMain,message, wParam, lParam);
  115.     break;
  116.     /**********************************************************************
  117.     *  WM_PAINT
  118.     *
  119.     * Paint two rectangular strips, one on top, one on bottom.
  120.     **********************************************************************/
  121.     case WM_PAINT : {
  122.       PAINTSTRUCT ps;
  123.       RECT rect;
  124.       HDC hdc;
  125.       hdc = BeginPaint(hwnd, &ps);
  126.       GetClientRect (hwnd, &rect);
  127.       rect.right --;
  128.       rect.bottom --;
  129.       SelectObject (hdc, GetStockObject (BLACK_PEN));
  130.       MoveToEx (hdc, rect.right, rect.top, NULL);
  131.       LineTo (hdc, rect.right, rect.bottom);
  132.       LineTo (hdc, rect.left, rect.bottom);
  133.       SelectObject (hdc, GetStockObject (WHITE_PEN));
  134.       LineTo (hdc, rect.left, rect.top);
  135.       LineTo (hdc, rect.right, rect.top);
  136.       EndPaint (hwnd, &ps);
  137.     } break;
  138.   } /* end switch */
  139.   return (DefWindowProc(hwnd, message, wParam, lParam));
  140. }