home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / graphics / getbkmde.c < prev    next >
C/C++ Source or Header  |  1988-08-10  |  5KB  |  170 lines

  1. /*
  2.  *
  3.  *   This program demonstrates the use of the GetBkMode function. GetBkMode
  4.  *   retrieves the background mode of the given device. The background mode
  5.  *   can be either OPAQUE or TRANSPARENT. The mode affects the background
  6.  *   painting behind text, hatched brushes, and certain pens. GetBkMode is
  7.  *   called from WinMain in this application.
  8.  *
  9.  */
  10.  
  11. #include "windows.h"
  12.  
  13. long FAR PASCAL HelloWndProc(HWND, unsigned, WORD, LONG);
  14.  
  15. /* Procedure called when the application is loaded for the first time */
  16. BOOL HelloInit( hInstance )
  17. HANDLE hInstance;
  18. {
  19.     PWNDCLASS   pHelloClass;
  20.  
  21.     pHelloClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) );
  22.  
  23.     pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  24.     pHelloClass->hIcon        = LoadIcon( hInstance,NULL);
  25.     pHelloClass->lpszMenuName   = (LPSTR)NULL;
  26.     pHelloClass->lpszClassName    = (LPSTR)"Sample Application";
  27.     pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  28.     pHelloClass->hInstance      = hInstance;
  29.     pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  30.     pHelloClass->lpfnWndProc    = HelloWndProc;
  31.  
  32.     if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  33.         /* Initialization failed.
  34.          * Windows will automatically deallocate all allocated memory.
  35.          */
  36.         return FALSE;
  37.  
  38.     LocalFree( (HANDLE)pHelloClass );
  39.     return TRUE;        /* Initialization succeeded */
  40. }
  41.  
  42. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  43. HANDLE hInstance, hPrevInstance;
  44. LPSTR lpszCmdLine;
  45. int cmdShow;
  46. {
  47.     MSG   msg;
  48.     HWND  hWnd;
  49.     HMENU hMenu;
  50.     HDC   hDC;        /*   display context          */
  51.     short nBkMode;    /*   return value from GetBkMode  */
  52.     int   i;        /*   used in for loop          */
  53.  
  54.     HelloInit( hInstance );
  55.     hWnd = CreateWindow((LPSTR)"Sample Application",
  56.             (LPSTR)"GetBkColor",
  57.             WS_OVERLAPPEDWINDOW,
  58.             CW_USEDEFAULT,
  59.             CW_USEDEFAULT,
  60.             CW_USEDEFAULT,
  61.             CW_USEDEFAULT,
  62.                         (HWND)NULL,        /* no parent */
  63.                         (HMENU)NULL,       /* use class menu */
  64.                         (HANDLE)hInstance, /* handle to window instance */
  65.                         (LPSTR)NULL        /* no params to pass on */
  66.                         );
  67.  
  68.     /* Make window visible according to the way the app is activated */
  69.     ShowWindow( hWnd, cmdShow );
  70.     UpdateWindow( hWnd );
  71.  
  72.     hDC = GetDC(hWnd);
  73.  
  74.     for (i=0; i<=200; i+=5)
  75.     {              /* draw line so we can see the affect */
  76.      MoveTo(hDC,i,0);     /*      of the background mode        */
  77.      LineTo(hDC,i,200);
  78.     }
  79.  
  80.     TextOut(hDC,5,25,
  81.         (LPSTR)"This line written with an OPAQUE Backgound mode",
  82.         (short)47);
  83.  
  84.     nBkMode = GetBkMode(hDC);  /* Get the background mode of the DC */
  85.  
  86.     if (nBkMode == OPAQUE)
  87.     MessageBox(hWnd,
  88.            (LPSTR)"is OPAQUE",
  89.            (LPSTR)"GetBkMode says the background mode...",
  90.            MB_OK);
  91.     else if(nBkMode == TRANSPARENT)
  92.     MessageBox(hWnd,
  93.            (LPSTR)"is TRANSPARENT",
  94.            (LPSTR)"GetBkMode says the background mode...",
  95.            MB_OK);
  96.     else
  97.     MessageBox(hWnd,
  98.            (LPSTR)"ERROR",
  99.            (LPSTR)"ERROR",
  100.            MB_OK);
  101.  
  102.  
  103.     SetBkMode(hDC,TRANSPARENT);  /* make background mode TRANSPARENT */
  104.  
  105.  
  106.     TextOut(hDC,5,55,
  107.         (LPSTR)"This line written with a TRANSPARENT Backgound mode",
  108.         (short)51);
  109.  
  110.     nBkMode = GetBkMode(hDC);  /* Get the background mode of the DC */
  111.  
  112.     if (nBkMode == OPAQUE)
  113.     MessageBox(hWnd,
  114.            (LPSTR)"is OPAQUE",
  115.            (LPSTR)"GetBkMode says the background mode...",
  116.            MB_OK);
  117.     else if(nBkMode == TRANSPARENT)
  118.     MessageBox(hWnd,
  119.            (LPSTR)"is TRANSPARENT",
  120.            (LPSTR)"GetBkMode says the background mode...",
  121.            MB_OK);
  122.     else
  123.     MessageBox(hWnd,
  124.            (LPSTR)"ERROR",
  125.            (LPSTR)"ERROR",
  126.            MB_OK);
  127.  
  128.     ReleaseDC(hWnd,hDC);
  129.  
  130.     /* Polling messages from event queue */
  131.     while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
  132.         TranslateMessage((LPMSG)&msg);
  133.         DispatchMessage((LPMSG)&msg);
  134.         }
  135.  
  136.     return (int)msg.wParam;
  137. }
  138.  
  139.  
  140. /* Procedures which make up the window class. */
  141. long FAR PASCAL HelloWndProc( hWnd, message, wParam, lParam )
  142. HWND hWnd;
  143. unsigned message;
  144. WORD wParam;
  145. LONG lParam;
  146. {
  147.     PAINTSTRUCT ps;
  148.  
  149.     switch (message)
  150.     {
  151.     case WM_SYSCOMMAND:
  152.     return DefWindowProc( hWnd, message, wParam, lParam );
  153.         break;
  154.  
  155.     case WM_DESTROY:
  156.         PostQuitMessage( 0 );
  157.         break;
  158.  
  159.     case WM_PAINT:
  160.         BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
  161.         EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
  162.         break;
  163.  
  164.     default:
  165.         return DefWindowProc( hWnd, message, wParam, lParam );
  166.         break;
  167.     }
  168.     return(0L);
  169. }
  170.