ciderpress/util/MyBitmapButton.cpp

101 lines
2.2 KiB
C++
Raw Normal View History

2007-03-27 17:47:10 +00:00
/*
* CiderPress
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
* See the file LICENSE for distribution terms.
*/
/*
* Code for my buttons with bitmaps.
*/
#include "stdafx.h"
#include "MyBitmapButton.h"
BEGIN_MESSAGE_MAP(MyBitmapButton, CButton)
ON_WM_SYSCOLORCHANGE()
2007-03-27 17:47:10 +00:00
END_MESSAGE_MAP()
/*
* Replace a button control in a dialog with ourselves.
*
* Returns TRUE on success, FALSE on failure.
*/
BOOL
MyBitmapButton::ReplaceDlgCtrl(CDialog* pDialog, int buttonID)
{
CWnd* pWnd = pDialog->GetDlgItem(buttonID);
2014-11-18 05:13:13 +00:00
if (pWnd == NULL)
return FALSE;
2007-03-27 17:47:10 +00:00
#if 0
DWORD styles = pWnd->GetStyle();
//DWORD stylesEx = pWnd->GetExStyle();
CString caption;
CRect rect;
pWnd->GetWindowText(caption);
pWnd->GetWindowRect(&rect);
pDialog->ScreenToClient(&rect);
2007-03-27 17:47:10 +00:00
// pWnd->DestroyWindow();
if (Create(caption, styles, rect, pDialog, buttonID) == FALSE) {
LOGI("ERROR: unable to replace dialog ctrl (buttonID=%d)",
buttonID);
return FALSE;
}
2007-03-27 17:47:10 +00:00
#endif
/* latch on to their window handle */
Attach(pWnd->m_hWnd);
2007-03-27 17:47:10 +00:00
return TRUE;
2007-03-27 17:47:10 +00:00
}
/*
* Set the bitmap ID, and update the button appropriately.
*/
BOOL
MyBitmapButton::SetBitmapID(int id)
{
fBitmapID = id;
UpdateBitmap();
return TRUE;
2007-03-27 17:47:10 +00:00
}
/*
* (Re-)load the bitmap and attach it to the button.
*/
void
MyBitmapButton::UpdateBitmap(void)
{
HBITMAP hNewBits;
2007-03-27 17:47:10 +00:00
if (fBitmapID == -1) {
LOGI("ERROR: UpdateBitmap called before bitmap set");
ASSERT(false);
return;
}
2007-03-27 17:47:10 +00:00
hNewBits = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(fBitmapID), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS);
2014-11-18 05:13:13 +00:00
if (hNewBits == NULL) {
LOGI("WARNING: LoadImage failed (bitID=%d)", fBitmapID);
ASSERT(false);
return;
}
2007-03-27 17:47:10 +00:00
ASSERT(GetBitmap() == fhBitmap);
2007-03-27 17:47:10 +00:00
::DeleteObject(SetBitmap(hNewBits));
fhBitmap = hNewBits;
2007-03-27 17:47:10 +00:00
}
/*
* If the system colors have changed, reload the bitmap.
*/
void
MyBitmapButton::OnSysColorChange(void)
{
LOGI("MyBitmapButton 0x%08lx tracking color change", this);
UpdateBitmap();
2007-03-27 17:47:10 +00:00
}