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

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1993-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. #include <windows.h>
  11. #include "console.h"
  12. /*********************************************************************
  13. * FUNCTION: resizeConBufAndWindow(HANDLE hConsole, SHORT xSize,      *
  14. *                                 SHORT ySize)                       *
  15. *                                                                    *
  16. * PURPOSE: resize both the console output buffer and the console     *
  17. *          window to the given x and y size parameters               *
  18. *                                                                    *
  19. * INPUT: the console output handle to resize, and the required x and *
  20. *        y size to resize the buffer and window to.                  *
  21. *                                                                    *
  22. * COMMENTS: Note that care must be taken to resize the correct item  *
  23. *           first; you cannot have a console buffer that is smaller  *
  24. *           than the console window.                                 *
  25. *********************************************************************/
  26. void resizeConBufAndWindow(HANDLE hConsole, SHORT xSize, SHORT ySize)
  27. {
  28.   CONSOLE_SCREEN_BUFFER_INFO csbi; /* hold current console buffer info */
  29.   BOOL bSuccess;
  30.   SMALL_RECT srWindowRect; /* hold the new console size */
  31.   COORD coordScreen;
  32.   bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi);
  33.   PERR(bSuccess, "GetConsoleScreenBufferInfo");
  34.   /* get the largest size we can size the console window to */
  35.   coordScreen = GetLargestConsoleWindowSize(hConsole);
  36.   PERR(coordScreen.X | coordScreen.Y, "GetLargestConsoleWindowSize");
  37.   /* define the new console window size and scroll position */
  38.   srWindowRect.Right = (SHORT) (min(xSize, coordScreen.X) - 1);
  39.   srWindowRect.Bottom = (SHORT) (min(ySize, coordScreen.Y) - 1);
  40.   srWindowRect.Left = srWindowRect.Top = (SHORT) 0;
  41.   /* define the new console buffer size */
  42.   coordScreen.X = xSize;
  43.   coordScreen.Y = ySize;
  44.   /* if the current buffer is larger than what we want, resize the */
  45.   /* console window first, then the buffer */
  46.   if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y > (DWORD) xSize * ySize)
  47.     {
  48.     bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
  49.     PERR(bSuccess, "SetConsoleWindowInfo");
  50.     bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
  51.     PERR(bSuccess, "SetConsoleScreenBufferSize");
  52.     }
  53.   /* if the current buffer is smaller than what we want, resize the */
  54.   /* buffer first, then the console window */
  55.   if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y < (DWORD) xSize * ySize)
  56.     {
  57.     bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
  58.     PERR(bSuccess, "SetConsoleScreenBufferSize");
  59.     bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
  60.     PERR(bSuccess, "SetConsoleWindowInfo");
  61.     }
  62.   /* if the current buffer *is* the size we want, don't do anything! */
  63.   return;
  64. }
  65. /*********************************************************************
  66. * FUNCTION: demoSizeInfo(HANDLE hConOut)                             *
  67. *                                                                    *
  68. * PURPOSE: demonstrate SetConsoleWindowInfo and                      *
  69. *          SetConsoleScreenBufferSize. Resize the console buffer and *
  70. *          window                                                    *
  71. *                                                                    *
  72. * INPUT: console output handle to set the information for            *
  73. *********************************************************************/
  74. void demoSizeInfo(HANDLE hConOut)
  75. {
  76.   SHORT sConX, sConY; /* save the current console dimensions */
  77.   setConTitle(__FILE__);
  78.   myPuts(hConOut, "Let's resize the console buffer and window to a 40 x 25n"
  79.                   "size screen by using the SetConsoleScreenBufferSize andn"
  80.                   "SetConsoleWindowInfo APIs. Hit enter to continue...n");
  81.   myGetchar();
  82.   sConX = getConX(hConOut);
  83.   sConY = getConY(hConOut);
  84.   resizeConBufAndWindow(hConOut, (SHORT) 40, (SHORT) 25);
  85.   myPuts(hConOut, "Now let's resize to a large size ofn"
  86.                   "200 x 200 - notice that the consolen"
  87.                   "window size will not grow larger thann"
  88.                   "the physical screen size. Hit entern"
  89.                   "to continue...n");
  90.   myGetchar();
  91.   resizeConBufAndWindow(hConOut, (SHORT) 200, (SHORT) 200);
  92.   myPuts(hConOut, "Now let's resize back to our original size screen.n"
  93.                   "Hit enter to continue...n");
  94.   myGetchar();
  95.   resizeConBufAndWindow(hConOut, sConX, sConY);
  96.   myPuts(hConOut, "Now we're back to our original size. Hit enter to return...");
  97.   myGetchar();
  98.   return;
  99. }