sizewndw.c
上传用户:jlteech
上传日期:2007-01-06
资源大小:349k
文件大小:3k
源码类别:

压缩解压

开发平台:

Visual C++

  1. /* sizewndw.c module of WiZ.
  2.  * Author: Robert A. Heath
  3.  * I, Robert Heath, place this source code module in the public domain.
  4.  *
  5.  * Modifications Mike White 1995, 1996
  6.  */
  7. #include <stdio.h>
  8. #include "wiz.h"
  9. /* Call this when the window size changes or needs to change. */
  10. void SizeWindow(void)
  11. {
  12. static WORD wOriWidth =1;
  13. WORD wClientWidth;       /* width of hWndMain client area  */
  14. RECT rectT;
  15. static BOOL doneOnce = FALSE;
  16. /* Set up to do button sizing */
  17. BtnMult = (float)BTNWIDTH; /* Reset multiplier to original setting */
  18. BtnSeparator = 1;          /* Set distance between buttons back to 1 */
  19. Width = (int)(BtnMult*dxChar);
  20. WinAssert(hWndMain);
  21. if (!doneOnce)
  22.    {
  23.    MoveWindow(hWndMain,
  24.          MainRc.left,
  25.          MainRc.top,
  26.          MainRc.right,
  27.          MainRc.bottom,
  28.          FALSE);
  29.    }
  30. GetClientRect(hWndMain, &rectT);
  31. wClientWidth = (WORD)(rectT.right-rectT.left+1);  /* x size of client area */
  32. #ifdef RESIZE_BUTTONS
  33. if (((Width * NUMOFBUTTONS) + NUMOFBUTTONS) > rectT.right)
  34.    {
  35.    /* Okay, we've got to reduce the button sizes to get them to fit on the
  36.     * screen.
  37.     */
  38.    while (BtnMult > MIN_BTN_WIDTH)
  39.       {
  40.       BtnMult = (float)(BtnMult - 0.1);
  41.       Width = (int)(BtnMult*dxChar);
  42.       if (((Width * NUMOFBUTTONS) + NUMOFBUTTONS) < rectT.right)
  43.          break;
  44.       }
  45.    if (((Width * NUMOFBUTTONS) + NUMOFBUTTONS) > rectT.right)
  46.       BtnSeparator = 0;
  47.    }
  48. #endif
  49. if (wClientWidth != wOriWidth)
  50.    {
  51.    wOriWidth = wClientWidth;
  52.    WinAssert(hWndButtonBar);
  53.    MoveWindow(hWndButtonBar,
  54.             0, 1,
  55.             wClientWidth,(int)(2.1 * dyChar),
  56.             TRUE);
  57.    MoveButtons();
  58.    }
  59. /*
  60.  * Position the archive display listbox.
  61.  */
  62. WinAssert(hWndList);
  63. GetClientRect(hWndMain, &rectT);
  64. #ifndef WIN32
  65. rectT.bottom = rectT.bottom - (2 * GetSystemMetrics(SM_CYDLGFRAME)) -
  66.    (5 * dyChar); /* This 5 * dyChar is to allow for the two lines we're
  67.                   * being dropped down for the button row, two lines for
  68.                   * the actual "trailers", and one additional line so the
  69.                   * totals line doesn't show up on the very edge of the
  70.                   * main window.
  71.                   */
  72. MoveWindow(hWndList,
  73.    0, (3 * dyChar), /* drop listbox two lines down for buttons, and one for */
  74.    rectT.right,     /* headings */
  75.    rectT.bottom,
  76.    TRUE);
  77. #else
  78. rectT.bottom = rectT.bottom - (2 * dyChar);
  79.                   /* This 2 * dyChar is to allow for the two lines we're
  80.                   * being dropped down for the button row
  81.                   */
  82. MoveWindow(hWndList,
  83.    0, (2 * dyChar), /* drop listbox two lines down for buttons */
  84.    rectT.right,
  85.    rectT.bottom,
  86.    TRUE);
  87. #endif
  88. if (!doneOnce)
  89.    {
  90.    int top;
  91.    HMENU hSysMenu;
  92.    /* Limit user actions on window */
  93.    hSysMenu = GetSystemMenu(hWndStatic, FALSE);
  94.    DeleteMenu(hSysMenu, SC_CLOSE, MF_BYCOMMAND);
  95.    DeleteMenu(hSysMenu, SC_TASKLIST, MF_BYCOMMAND);
  96.    /* walk thru menu and delete all separator bars */
  97.    for (top = GetMenuItemCount(hSysMenu); top; top--)
  98.        if (GetMenuState(hSysMenu, top-1, MF_BYPOSITION) & MF_SEPARATOR)
  99.           DeleteMenu(hSysMenu, top-1, MF_BYPOSITION);
  100.    doneOnce = TRUE;
  101.    }
  102. }