void InitDlgItemSpin( HWND hWindow, int idControl, int iValue, BOOL bSigned, int iMin, int iMax) { HWND hEditControl; HWND hSpinControl; /* Get the handle to the control */ if ( !(hEditControl = GetDlgItem( hWindow, idControl ) ) ) goto Exit; if ( !(hSpinControl = GetWindow(hEditControl, GW_HWNDNEXT) ) ) goto Exit; if ( GetDlgCtrlID(hSpinControl) != idControl ) goto Exit; SetWindowWord( hSpinControl, GWW_SPINTYPE, 0 ); SetWindowWord( hSpinControl, GWW_SPINMIN, iMin ); SetWindowWord( hSpinControl, GWW_SPINMAX, iMax ); SetWindowLong( hSpinControl, GWL_SPINSTEP, 0 ); Exit: SetDlgItemSpin( hWindow, idControl, iValue, bSigned ); }
void HandleSpinValue( HWND hWindow, BOOL bInTopRect, BOOL bInBottomRect) { LFIXED fValue; int iValue; BOOL Bool; STRING szString; long l; long step; step = GetWindowLong( hWindow, GWL_SPINSTEP ); if ( GetWindowWord( hWindow, GWW_SPINTYPE ) ) { // Its a fixed spinner... fValue = GetWindowLong(hWindow, GWL_FSPINVALUE); if (bInTopRect) fValue = BumpFixedSpinnerValue(fValue, TRUE, step); else if (bInBottomRect) fValue = BumpFixedSpinnerValue(fValue, FALSE, step); SetDlgItemSpinFixed(GetParent(hWindow), GET_WINDOW_ID(hWindow), fValue, step == 0); } else { iValue = GetDlgItemInt( GetParent(hWindow), GET_WINDOW_ID(hWindow), &Bool, YES ); if ( !iValue && !Bool) { // if zero from the control, check to see if it's empty (which is OK) GetDlgItemText( GetParent(hWindow),GET_WINDOW_ID(hWindow), szString, MAX_STR_LEN); l = atol(szString); iValue = mbound(l, INT_MIN, INT_MAX); } if (step == 0) { if ( bInTopRect ) iValue++; if ( bInBottomRect ) iValue--; } else { if ( bInTopRect ) iValue += step; if ( bInBottomRect ) iValue -= step; } SetDlgItemSpin( GetParent(hWindow), GET_WINDOW_ID(hWindow), iValue, YES ); } }
BOOL CSizeImageDlg::DoSizeControls( ITEMID id, UINT codeNotify, BOOL bResAdjust ) { BOOL bResult = TRUE; HWND hDlg = GetSafeHwnd(); BOOL Bool; long x, y; int npix, nlin; HWND hWnd, hControl; RECT rArea; LFIXED scale; LPIMAGE lpImage; FRMDATATYPE Type; lpImage = GetImage(); ImgGetInfo(lpImage, NULL, NULL, NULL, &Type); npix = CROPWIDTH(); nlin = CROPHEIGHT(); switch( id ) { case IDC_SMARTSIZE: m_SmartSize = !m_SmartSize; CheckDlgButton( IDC_SMARTSIZE, m_SmartSize ); break; case IDC_MAINTAINSIZE: m_MaintainSize = !m_MaintainSize; if (m_MaintainSize) m_Distortable = NO; ControlEnable(hDlg, IDC_DISTORT, !m_MaintainSize); ControlEnable(hDlg, IDC_SMARTSIZE, !m_MaintainSize); Bool = !m_MaintainSize || m_Units != IDC_PREF_UNITPIXELS; ControlEnable(hDlg, IDC_WIDTH, Bool); ControlEnable(hDlg, IDC_HEIGHT, Bool); ControlEnable(hDlg, IDC_SCALEX, Bool); ControlEnable(hDlg, IDC_SCALEY, Bool); if (m_MaintainSize) { m_Resolution = m_CropResolution = m_OrigResolution; m_Width = FGET( npix, m_CropResolution ); m_Height = FGET( nlin, m_CropResolution ); SetUnitResolution( m_CropResolution ); SetDlgItemSpin( hDlg, IDC_RES, m_Resolution, NO ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); } CheckDlgButton( IDC_MAINTAINSIZE, m_MaintainSize ); CheckDlgButton( IDC_SMARTSIZE, !m_MaintainSize && m_SmartSize ); break; case IDC_PREF_UNITS: { WORD wUnits; if ( !(wUnits = HandleCombo( hDlg, id, codeNotify )) ) break; m_Units = wUnits; SetUnitInfo((UNIT_TYPE)(m_Units-IDC_PREF_UNITINCHES), m_UnitRes, m_Points); CheckComboItem(hDlg, IDC_PREF_UNITS, IDC_PREF_UNITFIRST, IDC_PREF_UNITLAST, m_Units); Bool = !m_MaintainSize || m_Units != IDC_PREF_UNITPIXELS; ControlEnable(hDlg, IDC_WIDTH, Bool); ControlEnable(hDlg, IDC_HEIGHT, Bool); ControlEnable(hDlg, IDC_SCALEX, Bool); ControlEnable(hDlg, IDC_SCALEY, Bool); if (m_MaintainSize && m_Units == IDC_PREF_UNITPIXELS) { m_CropResolution = m_Resolution; SetUnitResolution( m_CropResolution ); m_Width = FGET( npix, m_CropResolution ); m_Height = FGET( nlin, m_CropResolution ); y = FMUL( m_CropResolution, m_Height ); m_ScaleY = ((y*100L) + nlin/2) / nlin; SetDlgItemSpin( hDlg, IDC_SCALEY, m_ScaleY, NO ); x = FMUL( m_CropResolution, m_Width ); m_ScaleX = ((x*100L) + npix/2) / npix; SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); } SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); SetUnitLabels(); } break; case IDC_DISTORT: m_Distortable = !m_Distortable; CheckDlgButton( IDC_DISTORT, m_Distortable ); if (m_Distortable) m_MaintainSize = NO; ControlEnable(hDlg, IDC_MAINTAINSIZE, !m_MaintainSize); if ( m_ScaleX != m_ScaleY ) { m_ScaleX = m_ScaleY; x = (((long)npix * m_ScaleX)+50L)/100L; m_Width = FGET( x, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); } CheckDlgButton( IDC_SMARTSIZE,m_SmartSize && !m_Distortable); ControlEnable( hDlg, IDC_SMARTSIZE, !m_Distortable && CANDOTRANSPARENCY(Type)); ControlEnable(hDlg, IDC_MAINTAINSIZE, !m_Distortable && lpImage); if ( Page.PrintNumeric ) break; if ( !(hWnd = ::GetDlgItem( hDlg,IDC_PRINTVIEWPAGE)) ) break; if ( !(hControl = ::GetDlgItem( hDlg,IDC_PRINTVIEWIMAGE)) ) break; SetLongBit(hControl, GWL_STYLE, IS_RATIO_CONSTRAIN, !m_Distortable ); if (!m_Distortable) { ::GetWindowRect(hControl, &rArea); ::ScreenToClient(hWnd, (LPPOINT)&rArea.left); ::ScreenToClient(hWnd, (LPPOINT)&rArea.right); ::MoveWindow(hControl, rArea.left, rArea.top, RectWidth(&rArea)-1, RectHeight(&rArea)-1, TRUE); } break; case IDC_HEIGHT: if ( ::GetFocus() != ::GetDlgItem( hDlg,id ) ) break; if ( codeNotify != EN_CHANGE ) break; m_Height = GetDlgItemSpinFixed( hDlg, IDC_HEIGHT, &Bool, YES); if (m_MaintainSize) { scale = FGET(FUNITY, m_Height); m_Resolution = FMUL(nlin, scale); SetUnitResolution( m_Resolution ); SetDlgItemSpin( hDlg, IDC_RES, m_Resolution, NO ); } // y = number of new pixels x 100 y = FMUL( m_CropResolution, m_Height ); // calculate scale factor = (new pixels * 100) / old pixels m_ScaleY = ((y * 100L) + nlin/2) / nlin; SetDlgItemSpin( hDlg, IDC_SCALEY, m_ScaleY, NO ); if ( !m_Distortable ) { m_ScaleX = m_ScaleY; x = (((long)npix * (long)y) + (nlin/2))/ (long)nlin; m_Width = FGET( x, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); } ImageMemory( hDlg, IDC_MEMORY, m_MaintainSize ? FGET(npix,1) : m_Width, m_MaintainSize ? FGET(nlin,1) : m_Height, m_MaintainSize ? 1 : m_Resolution, m_Depth ); break; case IDC_WIDTH: if ( ::GetFocus() != ::GetDlgItem( hDlg, id ) ) break; if ( codeNotify != EN_CHANGE ) break; m_Width = GetDlgItemSpinFixed( hDlg, IDC_WIDTH, &Bool, YES ); if (m_MaintainSize) { scale = FGET(FUNITY, m_Width); m_Resolution = FMUL(npix, scale); SetUnitResolution( m_Resolution ); SetDlgItemSpin( hDlg, IDC_RES, m_Resolution, NO ); } x = FMUL( m_CropResolution, m_Width ); m_ScaleX = ((x * 100L) + npix/2L) / (long)npix; SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); if ( !m_Distortable ) { m_ScaleY = m_ScaleX; y = (((long)nlin * (long)x) + (npix/2))/ (long)npix; m_Height = FGET( y, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); SetDlgItemSpin( hDlg, IDC_SCALEY, m_ScaleY, NO ); } ImageMemory( hDlg, IDC_MEMORY, m_MaintainSize ? FGET(npix,1) : m_Width, m_MaintainSize ? FGET(nlin,1) : m_Height, m_MaintainSize ? 1 : m_Resolution, m_Depth ); break; case IDC_RES: if ( ::GetFocus() != ::GetDlgItem( hDlg, id ) ) break; if ( codeNotify != EN_CHANGE ) break; m_Resolution = GetDlgItemSpin( hDlg, IDC_RES, &Bool, NO ); if ( m_Resolution <= 0 ) m_Resolution = 2; if (m_MaintainSize) { m_Width = FGET(npix, m_Resolution); m_Height = FGET(nlin, m_Resolution); SetUnitResolution( m_Resolution ); if (m_Units != IDC_PREF_UNITPIXELS) { SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); y = FMUL( m_CropResolution, m_Height ); m_ScaleY = ((y*100L) + nlin/2) / nlin; SetDlgItemSpin( hDlg, IDC_SCALEY, m_ScaleY, NO ); x = FMUL( m_CropResolution, m_Width ); m_ScaleX = ((x*100L) + npix/2) / npix; SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); } } if ( m_Units == IDC_PREF_UNITPIXELS ) { if ( bResAdjust ) { // Extract the values again (inch values changed) m_CropResolution = m_Resolution; SetUnitResolution( m_Resolution ); ::SetFocus( hWnd = ::GetDlgItem( hDlg,IDC_HEIGHT ) ); FORWARD_WM_COMMAND(hDlg, IDC_HEIGHT, hWnd, EN_CHANGE, ::SendMessage); ::SetFocus( hWnd = ::GetDlgItem( hDlg,IDC_WIDTH ) ); FORWARD_WM_COMMAND(hDlg, IDC_WIDTH, hWnd, EN_CHANGE, ::SendMessage); ::SetFocus( ::GetDlgItem( hDlg,id ) ); } else { // Change the edit box SetUnitResolution( m_Resolution ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); } } ImageMemory( hDlg, IDC_MEMORY, m_MaintainSize ? FGET(npix,1) : m_Width, m_MaintainSize ? FGET(nlin,1) : m_Height, m_MaintainSize ? 1 : m_Resolution, m_Depth ); break; case IDC_SCALEX: if ( GetFocus() != GetDlgItem( id ) ) break; if ( codeNotify != EN_CHANGE ) break; m_ScaleX = GetDlgItemSpin( hDlg, IDC_SCALEX, &Bool, NO ); x = (((long)npix * m_ScaleX)+50L)/100L; m_Width = FGET( x, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES ); if (m_MaintainSize) { scale = FGET(FUNITY, m_Width); m_Resolution = FMUL(npix, scale); SetUnitResolution( m_Resolution ); SetDlgItemSpin( hDlg, IDC_RES, m_Resolution, NO ); } if ( !m_Distortable ) { m_ScaleY = m_ScaleX; y = (((long)nlin * m_ScaleY)+50)/100L; m_Height = FGET( y, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); SetDlgItemSpin( hDlg, IDC_SCALEY, m_ScaleY, NO ); } ImageMemory( hDlg, IDC_MEMORY, m_MaintainSize ? FGET(npix,1) : m_Width, m_MaintainSize ? FGET(nlin,1) : m_Height, m_MaintainSize ? 1 : m_Resolution, m_Depth ); break; case IDC_SCALEY: if ( GetFocus() != GetDlgItem( id ) ) break; if ( codeNotify != EN_CHANGE ) break; m_ScaleY = GetDlgItemSpin( hDlg, IDC_SCALEY, &Bool, NO ); y = (((long)nlin * m_ScaleY)+50)/100L; m_Height = FGET( y, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_HEIGHT, m_Height, YES ); if (m_MaintainSize) { scale = FGET(FUNITY, m_Height); m_Resolution = FMUL(nlin, scale); SetUnitResolution( m_Resolution ); SetDlgItemSpin( hDlg, IDC_RES, m_Resolution, NO ); } if ( !m_Distortable ) { m_ScaleX = m_ScaleY; x = (((long)npix * m_ScaleX)+50L)/100L; m_Width = FGET( x, m_CropResolution ); SetDlgItemSpinFixed( hDlg, IDC_WIDTH, m_Width, YES); SetDlgItemSpin( hDlg, IDC_SCALEX, m_ScaleX, NO ); } ImageMemory( hDlg, IDC_MEMORY, m_MaintainSize ? FGET(npix,1) : m_Width, m_MaintainSize ? FGET(nlin,1) : m_Height, m_MaintainSize ? 1 : m_Resolution, m_Depth ); break; case IDC_MEMORY: default: bResult = FALSE; break; } return bResult; }