source-engine/utils/hlfaceposer/mxbitmapbutton.cpp

97 lines
1.7 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "mxBitmapButton.h"
#include "hlfaceposer.h"
mxBitmapButton::mxBitmapButton( mxWindow *parent, int x, int y, int w, int h, int id /*= 0*/, const char *bitmap /* = 0 */ )
: mxWindow( parent, x, y, w, h, "" )
{
setId( id );
m_bmImage.valid = false;
SetImage( bitmap );
HWND wnd = (HWND)getHandle();
DWORD style = GetWindowLong( wnd, GWL_STYLE );
style |= WS_CLIPSIBLINGS;
SetWindowLong( wnd, GWL_STYLE, style );
}
mxBitmapButton::~mxBitmapButton( void )
{
DeleteImage();
}
void mxBitmapButton::redraw()
{
HWND wnd = (HWND)getHandle();
if ( !wnd )
return;
if ( !m_bmImage.valid )
return;
RECT rc;
GetClientRect( wnd, &rc );
HDC dc = GetDC( wnd );
DrawBitmapToDC( dc, 0, 0, w(), h(), m_bmImage );
ReleaseDC( wnd, dc );
ValidateRect( wnd, &rc );
}
int mxBitmapButton::handleEvent( mxEvent * event )
{
int iret = 0;
switch (event->event)
{
case mxEvent::MouseUp:
// Send message to parent
HWND parent = (HWND)( getParent() ? getParent()->getHandle() : NULL );
if ( parent )
{
LPARAM lp;
WPARAM wp;
wp = MAKEWPARAM( getId(), BN_CLICKED );
lp = (long)getHandle();
SendMessage( parent, WM_COMMAND, wp, lp );
iret = 1;
}
break;
}
return iret;
}
void mxBitmapButton::SetImage( const char *bitmapname )
{
if ( m_bmImage.valid )
{
DeleteImage();
}
LoadBitmapFromFile( bitmapname, m_bmImage );
}
void mxBitmapButton::DeleteImage( void )
{
if ( m_bmImage.valid )
{
DeleteObject( m_bmImage.image );
m_bmImage.valid = false;
}
}