home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / modal / gsysmode.c next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  3.5 KB  |  138 lines

  1. /*
  2.  *
  3.  *
  4.  *   This program demonstrates the use of the GetSysModalWindow() function.
  5.  *   GetSysModalWindow(). GetSysModalWindow() returns a handle to a system
  6.  *   modal window if one exists.
  7.  *
  8.  *   Windows Version 2.0 function demonstration application
  9.  *
  10.  */
  11.  
  12. #include "windows.h"
  13.  
  14. HWND hSysModalWnd;
  15.  
  16. long FAR PASCAL HelloWndProc(HWND, unsigned, WORD, LONG);
  17.  
  18. /* Procedure called when the application is loaded for the first time */
  19. BOOL HelloInit( hInstance )
  20. HANDLE hInstance;
  21. {
  22.     PWNDCLASS   pHelloClass;
  23.  
  24.     pHelloClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) );
  25.  
  26.     pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  27.     pHelloClass->hIcon        = LoadIcon( hInstance,NULL);
  28.     pHelloClass->lpszMenuName    = (LPSTR)"min";
  29.     pHelloClass->lpszClassName    = (LPSTR)"SetSysModalWindow";
  30.     pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  31.     pHelloClass->hInstance      = hInstance;
  32.     pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  33.     pHelloClass->lpfnWndProc    = HelloWndProc;
  34.  
  35.     if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  36.         /* Initialization failed.
  37.          * Windows will automatically deallocate all allocated memory.
  38.          */
  39.         return FALSE;
  40.  
  41.     LocalFree( (HANDLE)pHelloClass );
  42.     return TRUE;        /* Initialization succeeded */
  43. }
  44.  
  45. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  46. HANDLE hInstance, hPrevInstance;
  47. LPSTR lpszCmdLine;
  48. int cmdShow;
  49. {
  50.     MSG   msg;
  51.     HWND  hWnd;
  52.     HMENU hMenu;
  53.  
  54.     HelloInit( hInstance );
  55.     hWnd = CreateWindow((LPSTR)"SetSysModalWindow",
  56.             (LPSTR)"SetSysModalWindow()",
  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.     MessageBox(NULL,
  73.            (LPSTR)"I'm a system modal message box",
  74.            (LPSTR)"HI!",
  75.            MB_SYSTEMMODAL);
  76.  
  77.     hSysModalWnd = GetSysModalWindow();
  78.  
  79.     if (hSysModalWnd)
  80.     DestroyWindow(hSysModalWnd);
  81.     else
  82.     MessageBox(NULL,
  83.            (LPSTR)"not found",
  84.            (LPSTR)"system modal window...",
  85.            MB_OK);
  86.  
  87.     /* Polling messages from event queue */
  88.     while (GetMessage((LPMSG)&msg, NULL, 0, 0)) {
  89.         TranslateMessage((LPMSG)&msg);
  90.         DispatchMessage((LPMSG)&msg);
  91.         }
  92.  
  93.     return (int)msg.wParam;
  94. }
  95.  
  96. /* Procedures which make up the window class. */
  97. long FAR PASCAL HelloWndProc( hWnd, message, wParam, lParam )
  98. HWND hWnd;
  99. unsigned message;
  100. WORD wParam;
  101. LONG lParam;
  102. {
  103.     PAINTSTRUCT ps;
  104.  
  105.     switch (message)
  106.     {
  107.     case WM_SYSCOMMAND:
  108.     return DefWindowProc( hWnd, message, wParam, lParam );
  109.         break;
  110.  
  111.     case WM_COMMAND:
  112.  
  113. /*** make "hWnd" system modal ***/
  114.     SetSysModalWindow(hWnd);
  115.  
  116.     break;
  117.  
  118.     case WM_DESTROY:
  119.         PostQuitMessage( 0 );
  120.         break;
  121.  
  122.     case WM_PAINT:
  123.     BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
  124.     TextOut(ps.hdc,
  125.         5,
  126.         5,
  127.         (LPSTR)"To make this window system modal, click on the menu",
  128.         (long)51);
  129.         EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
  130.         break;
  131.  
  132.     default:
  133.         return DefWindowProc( hWnd, message, wParam, lParam );
  134.         break;
  135.     }
  136.     return(0L);
  137. }
  138.