// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright © Microsoft Corporation. All rights reserved ///////////////////////////////////////////////////////////////////////// // ChildWin.CPP // // This module handles all actions that take place in the child window. // The child window is used for displaying the mouth bitmaps. // ///////////////////////////////////////////////////////////////////////// #include "globals.h" // --------------------------------------------------------------------------- // ChildWndProc // --------------------------------------------------------------------------- // Description: Main window procedure. // Arguments: // HWND [in] Window handle. // UINT [in] Message identifier. // WPARAM [in] Depends on message. // LPARAM [in] Depends on message. // Returns: // LPARAM Depends on message. LPARAM CALLBACK ChildWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hdc=NULL, hmemDC=NULL; PAINTSTRUCT ps; HBRUSH hbrBkGnd=NULL; RECT rect; // Call the appropriate message handler switch(uMsg) { case WM_PAINT: { // Get the Display Context so we have someplace to blit. hdc = BeginPaint( hWnd, &ps ); // Create a compatible DC. hmemDC = CreateCompatibleDC( hdc ); GetClientRect( hWnd, &rect ); // Create a bitmap big enough for our client rectangle. HBITMAP hmemBMP = CreateCompatibleBitmap( hdc, rect.right - rect.left, rect.bottom - rect.top ); // Select the bitmap into the off-screen DC. HGDIOBJ hobjOld = SelectObject( hmemDC, hmemBMP ); // Erase the background. hbrBkGnd = CreateSolidBrush( GetSysColor(COLOR_3DFACE) ); FillRect( hmemDC, &rect, hbrBkGnd ); DeleteObject( hbrBkGnd ); // Draw into memory DC ImageList_Draw( g_hListBmp, 0, hmemDC, 0, 0, INDEXTOOVERLAYMASK(g_iBmp) ); if( g_iBmp%6 == 2 ) { ImageList_Draw( g_hListBmp, WEYESNAR, hmemDC, 0, 0, 0 ); } if( g_iBmp%6 == 5 ) { ImageList_Draw( g_hListBmp, WEYESCLO, hmemDC, 0, 0, 0 ); } // Blit to window DC StretchBlt( hdc, 0, 0, rect.right, rect.bottom, hmemDC, 0, 0, rect.right, rect.bottom, SRCCOPY ); // Replace the previous GDI object to the DC SelectObject( hmemDC, hobjOld ); // Done with off-screen bitmap and DC. DeleteObject( hmemBMP ); DeleteDC( hmemDC ); DeleteDC( hdc ); // Clean up and get outta here EndPaint( hWnd, &ps ); } break; case WM_DESTROY: // Delete Mouth Bitmaps ImageList_Destroy( g_hListBmp ); break; } // Call the default message handler return DefWindowProc(hWnd, uMsg, wParam, lParam); }