Files
Work/mdiwin/BTNLNK.CPP
2024-08-07 09:16:27 -04:00

71 lines
2.4 KiB
C++

#include <mdiwin/btnlnk.hpp>
LinkedButton::LinkedButton(void)
: mCtlID(0), mhBitmapFocusUp(0), mhBitmapNoFocusUp(0), mFocus(Focus),
mhBitmapFocusDown(0), mlpBitmapDefault(0), mReferenceCount(0), mhLibrary(0)
{
}
LinkedButton::LinkedButton(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,HINSTANCE hLibrary,FocusItem focusItem)
: mCtlID(ctlID), mReferenceCount(1), mFocus(focusItem),
mhLibrary(hLibrary), mFocusUpString(focusUp), mNoFocusUpString(noFocusUp),
mFocusDownString(focusDown)
{
loadButtons();
}
LinkedButton::LinkedButton(const LinkedButton &someLinkedButton)
: mCtlID(someLinkedButton.mCtlID), mReferenceCount(someLinkedButton.mReferenceCount),
mFocus(someLinkedButton.mFocus), mhLibrary(someLinkedButton.mhLibrary),
mFocusUpString(someLinkedButton.mFocusUpString),
mNoFocusUpString(someLinkedButton.mNoFocusUpString),
mFocusDownString(someLinkedButton.mFocusDownString)
{
loadButtons();
}
void LinkedButton::loadButtons(void)
{
mhBitmapFocusUp=::LoadBitmap(mhLibrary,mFocusUpString);
mhBitmapNoFocusUp=::LoadBitmap(mhLibrary,mNoFocusUpString);
mhBitmapFocusDown=::LoadBitmap(mhLibrary,mFocusDownString);
if(Focus==mFocus)mlpBitmapDefault=&mhBitmapFocusUp;
else mlpBitmapDefault=&mhBitmapNoFocusUp;
}
LinkedButton::~LinkedButton()
{
if(mhBitmapFocusUp)::DeleteObject(mhBitmapFocusUp);
if(mhBitmapNoFocusUp)::DeleteObject(mhBitmapNoFocusUp);
if(mhBitmapFocusDown)::DeleteObject(mhBitmapFocusDown);
}
WORD LinkedButton::drawButton(LPDRAWITEMSTRUCT lpControlData)
{
int retCode(TRUE);
RECT buttonRect;
::SetRect((RECT FAR *)&buttonRect,0,0,0,0);
switch(lpControlData->itemAction)
{
case ODA_DRAWENTIRE :
if(lpControlData->itemState & ODS_SELECTED)drawBitmap(lpControlData->hDC,mhBitmapFocusDown,buttonRect);
else if(lpControlData->itemState & ODS_FOCUS)drawBitmap(lpControlData->hDC,*mlpBitmapDefault,buttonRect);
else drawBitmap(lpControlData->hDC,mhBitmapNoFocusUp,buttonRect);
break;
case ODA_SELECT :
if(lpControlData->itemState & ODS_SELECTED)drawBitmap(lpControlData->hDC,mhBitmapFocusDown,buttonRect);
else
{
drawBitmap(lpControlData->hDC,mhBitmapFocusUp,buttonRect);
retCode=FALSE;
}
break;
case ODA_FOCUS :
if(lpControlData->itemState & ODS_FOCUS)drawBitmap(lpControlData->hDC,mhBitmapFocusUp,buttonRect);
else drawBitmap(lpControlData->hDC,mhBitmapNoFocusUp,buttonRect);
break;
}
return retCode;
}