#include #include #include #include #include #include #include Factor::Factor(HWND hParent,const char *caption) : mhParent(hParent), mWidthFactor(0.00), mWidthIncremental(0.00), mWidthOperation(None), mHeightFactor(0.00), mHeightIncremental(0.00), mHeightOperation(None), mhInstance(Main::processInstance(hParent)) { ::strcpy(mCaption,caption); } Factor::~Factor() { } WORD Factor::showFactor(double &widthFactor,double &heightFactor, double &widthIncremental,Operation &widthOperation, double &heightIncremental,Operation &heightOperation) { WORD returnCode; mFactorType=Incremental; returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); if(!returnCode)return FALSE; widthFactor=mWidthFactor; widthIncremental=mWidthIncremental; widthOperation=mWidthOperation; heightFactor=mHeightFactor; heightIncremental=mHeightIncremental; heightOperation=mHeightOperation; return TRUE; } WORD Factor::showFactor(double &widthFactor,double &heightFactor) { WORD returnCode; mFactorType=NonIncremental; returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); if(!returnCode)return FALSE; widthFactor=mWidthFactor; heightFactor=mHeightFactor; return TRUE; } void Factor::initializeStrings(void) { mWidthStringIndex=0; mHeightStringIndex=0; mWidthStrings.insert(&String("+=")); mWidthStrings.insert(&String("-=")); mWidthStrings.insert(&String("\\=")); mWidthStrings.insert(&String("*=")); mHeightStrings.insert(&mWidthStrings[0]); mHeightStrings.insert(&mWidthStrings[1]); mHeightStrings.insert(&mWidthStrings[2]); mHeightStrings.insert(&mWidthStrings[3]); } void Factor::currentOperation(WORD stringIndex,Operation &operation)const { switch(stringIndex) { case 0 : operation=Add; break; case 1 : operation=Subtract; break; case 2 : operation=Divide; break; case 3 : operation=Multiply; break; } } int Factor::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_INITDIALOG : { mWidthStrings.remove(); mHeightStrings.remove(); if(Incremental==mFactorType) { RECT clientRect; ::GetWindowRect(GetHandle(),(RECT FAR *)&clientRect); ::MoveWindow(GetHandle(),clientRect.left,clientRect.top,407,148,TRUE); initializeStrings(); currentOperation(mWidthStringIndex,mWidthOperation); currentOperation(mHeightStringIndex,mHeightOperation); ::SetDlgItemText(GetHandle(),FACTOR_WOPSTRING,(LPSTR)mWidthStrings[mWidthStringIndex]); ::SetDlgItemText(GetHandle(),FACTOR_HOPSTRING,(LPSTR)mHeightStrings[mHeightStringIndex]); } ::SetWindowText(GetHandle(),(LPSTR)mCaption); Main::smhBitmap.associate(IDOK, String(STRING_BITMAPOKFOCUSUP,mhInstance), String(STRING_BITMAPOKNOFUP,mhInstance), String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); Main::smhBitmap.associate(IDCANCEL, String(STRING_BITMAPCAFOCUSUP,mhInstance), String(STRING_BITMAPCANOFUP,mhInstance), String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); } return TRUE; case WM_DRAWITEM : switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) { case IDOK : Main::smhBitmap.handleOwnerButton(IDOK,lParam); break; case IDCANCEL : Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); break; } return TRUE; case WM_COMMAND : switch(GET_WM_COMMAND_ID(wParam,lParam)) { case FACTOR_WIDTHOP : { LRESULT checkState; if(BN_CLICKED==HIWORD(lParam)) { if(!mWidthStrings.size())break; if(++mWidthStringIndex>=mWidthStrings.size())mWidthStringIndex=0; checkState=::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_GETCHECK,0,0L); ::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_SETCHECK,!checkState,0L); ::SetDlgItemText(GetHandle(),FACTOR_WOPSTRING,(LPSTR)mWidthStrings[mWidthStringIndex]); ::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_SETCHECK,!(!checkState),0L); currentOperation(mWidthStringIndex,mWidthOperation); } } break; case FACTOR_HEIGHTOP : { LRESULT checkState; if(BN_CLICKED==HIWORD(wParam)) { if(!mHeightStrings.size())break; if(++mHeightStringIndex>=mHeightStrings.size())mHeightStringIndex=0; checkState=::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_GETCHECK,0,0L); ::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_SETCHECK,!checkState,0L); ::SetDlgItemText(GetHandle(),FACTOR_HOPSTRING,(LPSTR)mHeightStrings[mHeightStringIndex]); ::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_SETCHECK,!(!checkState),0L); currentOperation(mHeightStringIndex,mHeightOperation); } } break; case IDOK : { char buffer[50]; ::GetDlgItemText(GetHandle(),FACTOR_WIDTH,(LPSTR)buffer,sizeof(buffer)-1); mWidthFactor=::atof(buffer); ::GetDlgItemText(GetHandle(),FACTOR_HEIGHT,(LPSTR)buffer,sizeof(buffer)-1); mHeightFactor=::atof(buffer); ::GetDlgItemText(GetHandle(),FACTOR_WIDTHINCR,(LPSTR)buffer,sizeof(buffer)-1); mWidthIncremental=::atof(buffer); ::GetDlgItemText(GetHandle(),FACTOR_HEIGHTINCR,(LPSTR)buffer,sizeof(buffer)-1); mHeightIncremental=::atof(buffer); } Main::smhBitmap.freeButton(IDOK); Main::smhBitmap.freeButton(IDCANCEL); ::EndDialog(GetHandle(),TRUE); return TRUE; case IDCANCEL : Main::smhBitmap.freeButton(IDOK); Main::smhBitmap.freeButton(IDCANCEL); ::EndDialog(GetHandle(),FALSE); return TRUE; } } return FALSE; }