Files
Work/common/BTNLNK.CPP
2024-08-07 09:09:36 -04:00

88 lines
3.4 KiB
C++

#include <common/btnlnk.hpp>
#include <common/purehdc.hpp>
LinkedButton::LinkedButton(void)
: mCtlID(0), mFocus(Focus), mlpBitmapDefault(0), mReferenceCount(0), mhInstance(0)
{
}
LinkedButton::LinkedButton(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,String &noFocusDisabled,HINSTANCE hInstance,FocusItem focusItem)
: mCtlID(ctlID), mReferenceCount(1), mFocus(focusItem),
mBitmapFocusUp(focusUp,hInstance), mBitmapNoFocusUp(noFocusUp,hInstance),
mBitmapFocusDown(focusDown,hInstance), mBitmapDisabled(noFocusDisabled,hInstance),
mFocusUpString(focusUp), mNoFocusUpString(noFocusUp), mFocusDownString(focusDown),
mNoFocusDisabledString(noFocusDisabled), mhInstance(hInstance)
{
setBitmapDefault();
}
LinkedButton::LinkedButton(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,HINSTANCE hInstance,FocusItem focusItem)
: mCtlID(ctlID), mReferenceCount(1), mFocus(focusItem),
mBitmapFocusUp(focusUp,hInstance), mBitmapNoFocusUp(noFocusUp,hInstance),
mBitmapFocusDown(focusDown,hInstance), mBitmapDisabled(noFocusUp,hInstance),
mFocusUpString(focusUp), mNoFocusUpString(noFocusUp), mFocusDownString(focusDown),
mNoFocusDisabledString(noFocusUp), mhInstance(hInstance)
{
setBitmapDefault();
}
LinkedButton::LinkedButton(const LinkedButton &someLinkedButton)
: mCtlID(someLinkedButton.mCtlID), mReferenceCount(someLinkedButton.mReferenceCount),
mFocus(someLinkedButton.mFocus), mhInstance(someLinkedButton.instance()),
mBitmapFocusUp(someLinkedButton.mFocusUpString,someLinkedButton.instance()),
mBitmapNoFocusUp(someLinkedButton.mNoFocusUpString,someLinkedButton.instance()),
mBitmapFocusDown(someLinkedButton.mFocusDownString,someLinkedButton.instance()),
mBitmapDisabled(someLinkedButton.mNoFocusDisabledString,someLinkedButton.instance()),
mFocusUpString(someLinkedButton.mFocusUpString),
mNoFocusUpString(someLinkedButton.mNoFocusUpString),
mFocusDownString(someLinkedButton.mFocusDownString),
mNoFocusDisabledString(someLinkedButton.mNoFocusDisabledString)
{
setBitmapDefault();
}
LinkedButton::~LinkedButton()
{
}
WORD LinkedButton::drawButton(LPDRAWITEMSTRUCT lpControlData)
{
int retCode(TRUE);
switch(lpControlData->itemAction)
{
case ODA_DRAWENTIRE :
if(lpControlData->itemState&ODS_SELECTED)drawBitmap(lpControlData,mBitmapFocusDown);
else if(lpControlData->itemState&ODS_FOCUS)drawBitmap(lpControlData,*mlpBitmapDefault);
else if(lpControlData->itemState&ODS_DISABLED)drawBitmap(lpControlData,mBitmapDisabled);
else drawBitmap(lpControlData,mBitmapNoFocusUp);
break;
case ODA_SELECT :
if(lpControlData->itemState&ODS_SELECTED)drawBitmap(lpControlData,mBitmapFocusDown);
else
{
drawBitmap(lpControlData,mBitmapFocusUp);
retCode=FALSE;
}
break;
case ODA_FOCUS :
if(lpControlData->itemState&ODS_FOCUS)drawBitmap(lpControlData,mBitmapFocusUp);
else drawBitmap(lpControlData,mBitmapNoFocusUp);
break;
}
return retCode;
}
void LinkedButton::drawBitmap(const LPDRAWITEMSTRUCT lpControlData,PureBitmap &pureBitmap)
{
RECT controlRect;
if(!pureBitmap.isOkay())return;
PureDevice displayDevice(lpControlData->hDC);
PureDevice memDevice(displayDevice);
::GetClientRect(lpControlData->hwndItem,&controlRect);
memDevice.select((HBITMAP)pureBitmap);
displayDevice.stretchBlt(controlRect,memDevice,Rect(0,0,pureBitmap.width(),pureBitmap.height()),PureDevice::SourceCopy);
memDevice.select((HBITMAP)pureBitmap,FALSE);
}