#include 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; }