home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / child / ischild.c next >
C/C++ Source or Header  |  1988-08-10  |  7KB  |  249 lines

  1. /*
  2.  *
  3.  *   IsChild
  4.  *
  5.  *   This program demonstrates the use of the IsChild function. IsChild
  6.  *   determines if one window is a child of another. IsChild is called from
  7.  *   WinMain in this sample application.
  8.  */
  9.  
  10. #include "windows.h"
  11.  
  12. long    FAR PASCAL HelloWndProc(HWND, unsigned, WORD, LONG);
  13. /* parent's window procedure */
  14.  
  15. long    FAR PASCAL ChildAProc(HWND, unsigned, WORD, LONG);
  16. /* child A's window procedure */
  17.  
  18. long    FAR PASCAL ChildBProc(HWND, unsigned, WORD, LONG);
  19. /* child B's window procedure */
  20.  
  21. HWND hChAWnd = NULL;  /* handle to Child A's window */
  22. HWND hChBWnd = NULL;  /* handle to Child B's window */
  23.  
  24. /* Procedure called when the application is loaded for the first time */
  25.  
  26. BOOL HelloInit( hInstance )
  27. HANDLE hInstance;
  28. {
  29.   PWNDCLASS   pHelloClass;
  30.  
  31.   pHelloClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) );
  32.  
  33.   pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  34.   pHelloClass->hIcon         = LoadIcon( hInstance, NULL);
  35.   pHelloClass->lpszMenuName   = (LPSTR)NULL;
  36.   pHelloClass->lpszClassName     = (LPSTR)"Sample Application";
  37.   pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  38.   pHelloClass->hInstance      = hInstance;
  39.   pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  40.   pHelloClass->lpfnWndProc     = HelloWndProc;
  41.  
  42.   if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  43. /* Initialization failed.
  44.          * Windows will automatically deallocate all allocated memory.
  45.          */
  46.     return FALSE;
  47.  
  48.   pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  49.   pHelloClass->hIcon         = LoadIcon( hInstance, NULL);
  50.   pHelloClass->lpszMenuName   = (LPSTR)NULL;
  51.   pHelloClass->lpszClassName     = (LPSTR)"CHILD A";
  52.   pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  53.   pHelloClass->hInstance      = hInstance;
  54.   pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  55.   pHelloClass->lpfnWndProc     = ChildAProc;
  56.  
  57.   if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  58. /* Initialization failed.
  59.          * Windows will automatically deallocate all allocated memory.
  60.          */
  61.     return FALSE;
  62.  
  63.   pHelloClass->hCursor        = LoadCursor( NULL, IDC_ARROW );
  64.   pHelloClass->hIcon         = LoadIcon( hInstance, NULL);
  65.   pHelloClass->lpszMenuName   = (LPSTR)NULL;
  66.   pHelloClass->lpszClassName     = (LPSTR)"CHILD B";
  67.   pHelloClass->hbrBackground  = (HBRUSH)GetStockObject( WHITE_BRUSH );
  68.   pHelloClass->hInstance      = hInstance;
  69.   pHelloClass->style          = CS_HREDRAW | CS_VREDRAW;
  70.   pHelloClass->lpfnWndProc     = ChildBProc;
  71.  
  72.   if (!RegisterClass( (LPWNDCLASS)pHelloClass ) )
  73. /* Initialization failed.
  74.          * Windows will automatically deallocate all allocated memory.
  75.          */
  76.     return FALSE;
  77.  
  78.   LocalFree( (HANDLE)pHelloClass );
  79.   return TRUE;        /* Initialization succeeded */
  80. }
  81.  
  82.  
  83. int    PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  84. HANDLE hInstance, hPrevInstance;
  85. LPSTR lpszCmdLine;
  86. int    cmdShow;
  87. {
  88.   MSG   msg;
  89.   HWND  hWnd;
  90.   HMENU hMenu;
  91.   BOOL  bChild;     /* return value from IsChild */
  92.  
  93.   HelloInit( hInstance );
  94.  
  95.   hWnd = CreateWindow((LPSTR)"Sample Application", (LPSTR)"IsChild (PARENT)",
  96.       WS_OVERLAPPEDWINDOW,
  97.       CW_USEDEFAULT, 0,
  98.       CW_USEDEFAULT, 0,
  99.       NULL, NULL, hInstance, NULL);
  100.  
  101. /* Make window visible according to the way the app is activated */
  102.   ShowWindow( hWnd, cmdShow );
  103.   UpdateWindow( hWnd );
  104.  
  105.   hChAWnd = CreateWindow((LPSTR)"CHILD A", (LPSTR)"Child A",
  106.       WS_CHILD | WS_SIZEBOX | WS_VISIBLE | WS_CAPTION | WS_CLIPSIBLINGS,
  107.       5, 5,
  108.       150, 150,
  109.       hWnd, 1,     hInstance, NULL);
  110.  
  111.   hChBWnd = CreateWindow((LPSTR)"CHILD B",     (LPSTR)"Child B",
  112.       WS_CHILD | WS_SIZEBOX | WS_VISIBLE | WS_CAPTION | WS_CLIPSIBLINGS,
  113.       270, 5,
  114.       150, 150,
  115.       hWnd,     2,     hInstance, NULL);
  116.  
  117. /***************************************************************************/
  118.  
  119.   MessageBox(GetFocus(), (LPSTR)"Child A is a Child of the Parent Window",
  120.       (LPSTR)"Checking to see if...",
  121.       MB_OK);
  122.  
  123.   bChild = IsChild(hWnd, hChAWnd);
  124.  
  125.   if (bChild)
  126.     MessageBox(GetFocus(), (LPSTR)"IS a child of the Parent Window",
  127.         (LPSTR)"'IsChild' says that Child A...",
  128.         MB_OK);
  129.   else
  130.     MessageBox(GetFocus(), (LPSTR)"is NOT a child of the Parent Window",
  131.         (LPSTR)"'IsChild' says that Child A...",
  132.         MB_OK);
  133.  
  134.  
  135.   MessageBox(GetFocus(), (LPSTR)"Child A is a child of Child B",
  136.       (LPSTR)"Checking to see if...",
  137.       MB_OK);
  138.  
  139.   bChild = IsChild(hChBWnd, hChAWnd); /* is Child A a child of Child B? */
  140.  
  141.   if (bChild)
  142.     MessageBox(GetFocus(), (LPSTR)"IS a child of Child B",
  143.         (LPSTR)"'IsChild' says that Child A...",
  144.         MB_OK);
  145.   else
  146.     MessageBox(GetFocus(), (LPSTR)"is NOT a child of Child B",
  147.         (LPSTR)"'IsChild' says that Child A...",
  148.         MB_OK);
  149.  
  150. /***************************************************************************/
  151.  
  152. /* Polling messages from event queue */
  153.   while (GetMessage((LPMSG) & msg, NULL, 0, 0))
  154.   {
  155.     TranslateMessage((LPMSG) & msg);
  156.     DispatchMessage((LPMSG) & msg);
  157.   }
  158.  
  159.   return (int)msg.wParam;
  160. }
  161.  
  162.  
  163. /* Procedures which make up the window class. */
  164. long    FAR PASCAL HelloWndProc( hWnd, message, wParam, lParam )
  165. HWND hWnd;
  166. unsigned    message;
  167. WORD wParam;
  168. LONG lParam;
  169. {
  170.   PAINTSTRUCT ps;
  171.  
  172.   switch (message)
  173.   {
  174.   case WM_LBUTTONDOWN:
  175.     MessageBox(GetFocus(), (LPSTR)"Left Button Click", (LPSTR)"PARENT WINDOW",
  176.         MB_OK);
  177.     break;
  178.  
  179.   case WM_DESTROY:
  180.     PostQuitMessage( 0 );
  181.     break;
  182.  
  183.   default:
  184.     return DefWindowProc( hWnd, message, wParam, lParam );
  185.     break;
  186.   }
  187.   return(0L);
  188. }
  189.  
  190.  
  191. long    FAR PASCAL ChildAProc( hChAWnd, message, wParam, lParam )
  192. HWND hChAWnd;
  193. unsigned    message;
  194. WORD wParam;
  195. LONG lParam;
  196. {
  197.   PAINTSTRUCT ps;
  198.  
  199.   switch (message)
  200.   {
  201.  
  202.   case WM_LBUTTONDOWN:
  203.     MessageBox(hChAWnd, (LPSTR)"Left Button Click",
  204.         (LPSTR)"CHILD A",
  205.         MB_OK);
  206.     break;
  207.  
  208.   case WM_DESTROY:
  209.     PostQuitMessage( 0 );
  210.     break;
  211.  
  212.   default:
  213.     return DefWindowProc( hChAWnd, message, wParam, lParam );
  214.     break;
  215.   }
  216.   return(0L);
  217. }
  218.  
  219.  
  220. long    FAR PASCAL ChildBProc( hChBWnd, message, wParam, lParam )
  221. HWND hChBWnd;
  222. unsigned    message;
  223. WORD wParam;
  224. LONG lParam;
  225. {
  226.   PAINTSTRUCT ps;
  227.  
  228.   switch (message)
  229.   {
  230.  
  231.   case WM_LBUTTONDOWN:
  232.     MessageBox(hChBWnd, (LPSTR)"Left Button Click",
  233.         (LPSTR)"CHILD B",
  234.         MB_OK);
  235.     break;
  236.  
  237.   case WM_DESTROY:
  238.     PostQuitMessage( 0 );
  239.     break;
  240.  
  241.   default:
  242.     return DefWindowProc( hChBWnd, message, wParam, lParam );
  243.     break;
  244.   }
  245.   return(0L);
  246. }
  247.  
  248.  
  249.