2025-11-28 00:35:46 +09:00

104 lines
3.3 KiB
C++

// 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);
}