// imgedctl.cpp : Implementation of the CImgEditCtrl OLE control class. #include "stdafx.h" #include "mbstring.h" #include "norermap.h" #include "disphids.h" extern "C" { #include #include #include #include #include "oiui.h" } #include #include #include "norermap.h" #include "toolpal.h" #include "minitlbx.h" #include "imgedit.h" #include "imgedctl.h" #include "imgedppg.h" #include "annoprpg.h" #include "resource.h" const FONTDESC _fontdescHeading = { sizeof(FONTDESC), OLESTR("MS Sans Serif"), FONTSIZE( 12 ), FW_NORMAL, ANSI_CHARSET, FALSE, FALSE, FALSE }; extern UINT uWangAnnotatedImageFormat; extern UINT uWangAnnotationFormat; extern CControlList *pControlList; CString szToolPaletteClassName; #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CImgEditCtrl, COleControl) // registered messages between annotation button control and image/edit control UINT DRAW_START_XPOSITION; UINT DRAW_START_YPOSITION; UINT DRAW_END_XPOSITION; UINT DRAW_END_YPOSITION; // end registered messages between annotation button control and image/edit control // registered msgs from tool palette to image/edit control UINT STP_SET_ANNOTATION_TYPE; UINT STP_SET_ANNOTATION_FONTNAME; UINT STP_SET_ANNOTATION_FONTSIZE; UINT STP_SET_ANNOTATION_FONTBOLD; UINT STP_SET_ANNOTATION_FONTITALIC; UINT STP_SET_ANNOTATION_FONTSTRIKETHRU; UINT STP_SET_ANNOTATION_FONTUNDERLINE; UINT STP_SET_ANNOTATION_FONTCHARSET; UINT STP_SET_ANNOTATION_STAMPTEXT; UINT STP_SET_ANNOTATION_LINESIZE; UINT STP_SET_ANNOTATION_STYLE; UINT STP_SET_ANNOTATION_REDCOLOR; UINT STP_SET_ANNOTATION_GREENCOLOR; UINT STP_SET_ANNOTATION_BLUECOLOR; UINT STP_SET_ANNOTATION_BACKREDCOLOR; UINT STP_SET_ANNOTATION_BACKGREENCOLOR; UINT STP_SET_ANNOTATION_BACKBLUECOLOR; UINT STP_SET_ANNOTATION_IMAGE; UINT TOOLTIP_EVENT; UINT TOOLPALETTE_HIDDEN; UINT TOOLPALETTE_HIDDENEVENT; UINT TOOL_SELECTED_EVENT; UINT TOOLPALETTE_HIDDEN_XPOSITION; UINT TOOLPALETTE_HIDDEN_YPOSITION; // end registered msgs from tool palette to image/edit control // registered messages from image/edit to tool palette UINT SELECT_TOOL_BUTTON; // end registered messages from image/edit to tool palette ///////////////////////////////////////////////////////////////////////////// // Message map BEGIN_MESSAGE_MAP(CImgEditCtrl, COleControl) //{{AFX_MSG_MAP(CImgEditCtrl) ON_WM_CREATE() ON_WM_DESTROY() ON_WM_HSCROLL() ON_WM_KEYDOWN() ON_WM_KEYUP() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_RENDERALLFORMATS() ON_WM_RENDERFORMAT() ON_WM_TIMER() ON_WM_VSCROLL() ON_MESSAGE(SET_ANNOTATION_TYPE, OnSetAnnotationType) ON_MESSAGE(SET_ANNOTATION_BACKCOLOR, OnSetAnnotationBackColor) ON_MESSAGE(SET_ANNOTATION_FILLCOLOR, OnSetAnnotationFillColor) ON_MESSAGE(SET_ANNOTATION_FILLSTYLE, OnSetAnnotationFillStyle) ON_MESSAGE(SET_ANNOTATION_FONT, OnSetAnnotationFont) ON_MESSAGE(SET_ANNOTATION_FONTCOLOR, OnSetAnnotationFontColor) ON_MESSAGE(SET_ANNOTATION_IMAGE, OnSetAnnotationImage) ON_MESSAGE(SET_ANNOTATION_LINECOLOR, OnSetAnnotationLineColor) ON_MESSAGE(SET_ANNOTATION_LINESTYLE, OnSetAnnotationLineStyle) ON_MESSAGE(SET_ANNOTATION_LINEWIDTH, OnSetAnnotationLineWidth) ON_MESSAGE(SET_ANNOTATION_STAMPTEXT, OnSetAnnotationStampText) ON_MESSAGE(SET_ANNOTATION_TEXTFILE, OnSetAnnotationTextFile) ON_REGISTERED_MESSAGE(DRAW_START_XPOSITION, OnStartXPosition) ON_REGISTERED_MESSAGE(DRAW_START_YPOSITION, OnStartYPosition) ON_REGISTERED_MESSAGE(DRAW_END_XPOSITION, OnEndXPosition) ON_REGISTERED_MESSAGE(DRAW_END_YPOSITION, OnEndYPosition) ON_MESSAGE(RECT_SELECTION, OnRectSelection) ON_MESSAGE(DRAW_ANNOTATION, OnDrawAnnotationMethod) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_TYPE, OnSTPSetAnnotationType) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_REDCOLOR, OnSTPSetAnnotationRedColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_GREENCOLOR, OnSTPSetAnnotationGreenColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_BLUECOLOR, OnSTPSetAnnotationBlueColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_STYLE, OnSTPSetAnnotationStyle) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_LINESIZE, OnSTPSetAnnotationLineSize) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTNAME, OnSTPSetAnnotationFontName) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTSIZE, OnSTPSetAnnotationFontSize) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTBOLD, OnSTPSetAnnotationFontBold) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTITALIC, OnSTPSetAnnotationFontItalic) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTSTRIKETHRU, OnSTPSetAnnotationFontStrikethru) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTUNDERLINE, OnSTPSetAnnotationFontUnderline) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_BACKREDCOLOR, OnSTPSetAnnotationBackRedColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_BACKGREENCOLOR, OnSTPSetAnnotationBackGreenColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_BACKBLUECOLOR, OnSTPSetAnnotationBackBlueColor) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_FONTCHARSET, OnSTPSetAnnotationFontCharSet) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_IMAGE, OnSTPSetAnnotationImage) ON_REGISTERED_MESSAGE(STP_SET_ANNOTATION_STAMPTEXT, OnSTPSetAnnotationStampText) ON_REGISTERED_MESSAGE(TOOLTIP_EVENT, OnToolTipEvent) ON_REGISTERED_MESSAGE(TOOLPALETTE_HIDDEN, OnToolPaletteHidden) ON_REGISTERED_MESSAGE(TOOLPALETTE_HIDDENEVENT, OnToolPaletteHiddenEvent) ON_REGISTERED_MESSAGE(TOOL_SELECTED_EVENT, OnToolSelectedEvent) ON_REGISTERED_MESSAGE(TOOLPALETTE_HIDDEN_XPOSITION, OnToolPaletteHiddenXPosition) ON_REGISTERED_MESSAGE(TOOLPALETTE_HIDDEN_YPOSITION, OnToolPaletteHiddenYPosition) ON_WM_RBUTTONUP() ON_WM_RBUTTONDOWN() ON_WM_MBUTTONDOWN() ON_WM_MBUTTONUP() ON_WM_LBUTTONDBLCLK() ON_WM_SETFOCUS() ON_WM_PALETTECHANGED() ON_WM_ENTERIDLE() // 25jun96 paj From thumbnail>>>jar added cursor processing ON_WM_SETCURSOR() //}}AFX_MSG_MAP ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Dispatch map BEGIN_DISPATCH_MAP(CImgEditCtrl, COleControl) //{{AFX_DISPATCH_MAP(CImgEditCtrl) DISP_PROPERTY_EX(CImgEditCtrl, "Image", GetImage, SetImage, VT_BSTR) DISP_PROPERTY_EX(CImgEditCtrl, "ImageControl", GetImageControl, SetImageControl, VT_BSTR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationType", GetAnnotationType, SetAnnotationType, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationGroupCount", GetAnnotationGroupCount, SetNotSupported, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "Zoom", GetZoom, SetZoom, VT_R4) DISP_PROPERTY_EX(CImgEditCtrl, "Page", GetPage, SetPage, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationBackColor", GetAnnotationBackColor, SetAnnotationBackColor, VT_COLOR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationFillColor", GetAnnotationFillColor, SetAnnotationFillColor, VT_COLOR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationFillStyle", GetAnnotationFillStyle, SetAnnotationFillStyle, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationFont", GetAnnotationFont, SetAnnotationFont, VT_FONT) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationImage", GetAnnotationImage, SetAnnotationImage, VT_BSTR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationLineColor", GetAnnotationLineColor, SetAnnotationLineColor, VT_COLOR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationLineStyle", GetAnnotationLineStyle, SetAnnotationLineStyle, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationLineWidth", GetAnnotationLineWidth, SetAnnotationLineWidth, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationStampText", GetAnnotationStampText, SetAnnotationStampText, VT_BSTR) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationTextFile", GetAnnotationTextFile, SetAnnotationTextFile, VT_BSTR) DISP_PROPERTY_EX(CImgEditCtrl, "DisplayScaleAlgorithm", GetDisplayScaleAlgorithm, SetDisplayScaleAlgorithm, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "ImageDisplayed", GetImageDisplayed, SetNotSupported, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "ImageHeight", GetImageHeight, SetNotSupported, VT_YSIZE_PIXELS) DISP_PROPERTY_EX(CImgEditCtrl, "ImageModified", GetImageModified, SetNotSupported, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "ImagePalette", GetImagePalette, SetImagePalette, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "ImageResolutionX", GetImageResolutionX, SetImageResolutionX, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "ImageResolutionY", GetImageResolutionY, SetImageResolutionY, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "MousePointer", GetMousePointer, SetMousePointer, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "PageCount", GetPageCount, SetNotSupported, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "ScrollBars", GetScrollBars, SetScrollBars, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "ScrollPositionX", GetScrollPositionX, SetScrollPositionX, VT_XPOS_PIXELS) DISP_PROPERTY_EX(CImgEditCtrl, "ScrollPositionY", GetScrollPositionY, SetScrollPositionY, VT_YPOS_PIXELS) DISP_PROPERTY_EX(CImgEditCtrl, "AnnotationFontColor", GetAnnotationFontColor, SetAnnotationFontColor, VT_COLOR) DISP_PROPERTY_EX(CImgEditCtrl, "CompressionType", GetCompressionType, SetNotSupported, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "FileType", GetFileType, SetNotSupported, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "ScrollShortcutsEnabled", GetScrollShortcutsEnabled, SetScrollShortcutsEnabled, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "SelectionRectangle", GetSelectionRectangle, SetSelectionRectangle, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "PageType", GetPageType, SetNotSupported, VT_I2) DISP_PROPERTY_EX(CImgEditCtrl, "CompressionInfo", GetCompressionInfo, SetNotSupported, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "StatusCode", GetStatusCode, SetNotSupported, VT_I4) DISP_PROPERTY_EX(CImgEditCtrl, "MouseIcon", GetMouseIcon, SetMouseIcon, VT_PICTURE) DISP_PROPERTY_EX(CImgEditCtrl, "AutoRefresh", GetAutoRefresh, SetAutoRefresh, VT_BOOL) DISP_PROPERTY_EX(CImgEditCtrl, "ImageWidth", GetImageWidth, SetNotSupported, VT_XSIZE_PIXELS) DISP_PROPERTY_EX(CImgEditCtrl, "ImageScaleHeight", GetImageScaleHeight, SetNotSupported, VT_YSIZE_PIXELS) DISP_PROPERTY_EX(CImgEditCtrl, "ImageScaleWidth", GetImageScaleWidth, SetNotSupported, VT_XSIZE_PIXELS) DISP_FUNCTION_ID(CImgEditCtrl, "RenderAllPages", dispidRenderAllPages, RenderAllPages, VT_I4, VTS_I2 VTS_I2) DISP_PROPERTY_EX_ID(CImgEditCtrl, "BorderStyle", DISPID_BORDERSTYLE, GetBorderStyle, SetBorderStyle, VT_I2) DISP_PROPERTY_EX_ID(CImgEditCtrl, "Enabled", DISPID_ENABLED, GetEnabled, SetEnabled, VT_BOOL) DISP_PROPERTY_EX_ID(CImgEditCtrl, "hWnd", DISPID_HWND, GetHWnd, SetNotSupported, VT_HANDLE) DISP_FUNCTION_ID(CImgEditCtrl, "Display", dispidDisplay, Display, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetAnnotationGroup",dispidGetAnnotationGroup, GetAnnotationGroup, VT_BSTR, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "AddAnnotationGroup",dispidAddAnnotationGroup, AddAnnotationGroup, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationLineColor", dispidGetSelectedAnnotationLineColor, GetSelectedAnnotationLineColor, VT_COLOR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "ClearDisplay", dispidClearDisplay, ClearDisplay, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "DeleteAnnotationGroup", dispidDeleteAnnotationGroup, DeleteAnnotationGroup, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CImgEditCtrl, "DeleteImageData",dispidDeleteImageData, DeleteImageData, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ClipboardCopy",dispidClipboardCopy, ClipboardCopy, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ClipboardCut", dispidClipboardCut,ClipboardCut, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "DeleteSelectedAnnotations",dispidDeleteSelectedAnnotations, DeleteSelectedAnnotations, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "Flip", dispidFlip, Flip, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationBackColor",dispidGetSelectedAnnotationBackColor, GetSelectedAnnotationBackColor, VT_COLOR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationFont",dispidGetSelectedAnnotationFont,GetSelectedAnnotationFont, VT_FONT, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationImage", dispidGetSelectedAnnotationImage,GetSelectedAnnotationImage, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationLineStyle",dispidGetSelectedAnnotationLineStyle, GetSelectedAnnotationLineStyle, VT_I2, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationLineWidth",dispidGetSelectedAnnotationLineWidth,GetSelectedAnnotationLineWidth, VT_I2, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "HideAnnotationToolPalette", dispidHideAnnotationToolPalette,HideAnnotationToolPalette, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "IsClipboardDataAvailable",dispidIsClipboardDataAvailable,IsClipboardDataAvailable, VT_BOOL, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "RotateLeft", dispidRotateLeft, RotateLeft, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "RotateRight",dispidRotateRight,RotateRight, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "Save", dispidSave, Save, VT_EMPTY, VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ScrollImage", dispidScrollImage, ScrollImage, VT_EMPTY, VTS_I2 VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "SelectAnnotationGroup",dispidSelectAnnotationGroup, SelectAnnotationGroup, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CImgEditCtrl, "SetImagePalette", dispidSetImagePalette, SetImagePalette1, VT_EMPTY, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationFillStyle", dispidSetSelectedAnnotationFillStyle, SetSelectedAnnotationFillStyle, VT_EMPTY, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationFont",dispidSetSelectedAnnotationFont, SetSelectedAnnotationFont, VT_EMPTY, VTS_FONT) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationLineStyle", dispidSetSelectedAnnotationLineStyle, SetSelectedAnnotationLineStyle, VT_EMPTY, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationLineWidth",dispidSetSelectedAnnotationLineWidth, SetSelectedAnnotationLineWidth, VT_EMPTY, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "ZoomToSelection", dispidZoomToSelection, ZoomToSelection, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetAnnotationMarkCount", dispidGetAnnotationMarkCount, GetAnnotationMarkCount, VT_I2, VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationFillColor",dispidGetSelectedAnnotationFillColor, GetSelectedAnnotationFillColor, VT_COLOR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationFontColor",dispidGetSelectedAnnotationFontColor, GetSelectedAnnotationFontColor, VT_COLOR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "GetCurrentAnnotationGroup",dispidGetCurrentAnnotationGroup, GetCurrentAnnotationGroup, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "ConvertPageType", dispidConvertPageType,ConvertPageType, VT_EMPTY, VTS_I2 VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "BurnInAnnotations", dispidBurnInAnnotations,BurnInAnnotations, VT_EMPTY, VTS_I2 VTS_I2 VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "Draw", dispidDraw, Draw, VT_EMPTY, VTS_XPOS_PIXELS VTS_YSIZE_PIXELS VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationLineColor",dispidSetSelectedAnnotationLineColor, SetSelectedAnnotationLineColor, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationFillColor", dispidSetSelectedAnnotationFillColor,SetSelectedAnnotationFillColor, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "HideAnnotationGroup",dispidHideAnnotationGroup, HideAnnotationGroup, VT_EMPTY, VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ShowAnnotationGroup",dispidShowAnnotationGroup, ShowAnnotationGroup, VT_EMPTY, VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "GetSelectedAnnotationFillStyle",dispidGetSelectedAnnotationFillStyle, GetSelectedAnnotationFillStyle, VT_I2, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "SaveAs",dispidSaveAs, SaveAs, VT_EMPTY, VTS_BSTR VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationBackColor",dispidSetSelectedAnnotationBackColor, SetSelectedAnnotationBackColor, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "SetSelectedAnnotationFontColor",dispidSetSelectedAnnotationFontColor, SetSelectedAnnotationFontColor, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "DrawSelectionRect",dispidDrawSelectionRect, DrawSelectionRect, VT_EMPTY, VTS_XPOS_PIXELS VTS_YPOS_PIXELS VTS_XSIZE_PIXELS VTS_YSIZE_PIXELS) DISP_FUNCTION_ID(CImgEditCtrl, "ShowAnnotationToolPalette",dispidShowAnnotationToolPalette, ShowAnnotationToolPalette, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "SelectTool",dispidSelectTool, SelectTool, VT_EMPTY, VTS_I2) DISP_FUNCTION_ID(CImgEditCtrl, "DisplayBlankImage",dispidDisplayBlankImage, DisplayBlankImage, VT_EMPTY, VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ClipboardPaste",dispidClipboardPaste, ClipboardPaste, VT_EMPTY, VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "PrintImage", dispidPrintImage, PrintImage, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "FitTo", dispidFitTo, FitTo, VT_EMPTY, VTS_I2 VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "ShowAttribsDialog",dispidShowAttribsDlg, ShowAttribsDialog, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "ShowRubberStampDialog",dispidShowRubberStampDlg, ShowRubberStampDialog, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "RotateAll",dispidRotateAll, RotateAll, VT_EMPTY, VTS_VARIANT) DISP_FUNCTION_ID(CImgEditCtrl, "CacheImage",dispidCacheImage, CacheImage, VT_EMPTY, VTS_BSTR VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "EditSelectedAnnotationText",dispidEditSelectedAnnotationText, EditSelectedAnnotationText, VT_EMPTY, VTS_I4 VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "CompletePaste",dispidCompletePaste, CompletePaste, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "RemoveImageCache",dispidRemoveImageCache, RemoveImageCache, VT_EMPTY, VTS_BSTR VTS_I4) DISP_FUNCTION_ID(CImgEditCtrl, "SetCurrentAnnotationGroup",dispidSetCurrentAnnotationGroup, SetCurrentAnnotationGroup, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CImgEditCtrl, "GetVersion", dispidGetVersion, GetVersion, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "Refresh",dispidRefresh, Refresh, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CImgEditCtrl, "PrintImageAs", dispidPrintImageAs, PrintImageAs, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) //}}AFX_DISPATCH_MAP DISP_FUNCTION_ID(CImgEditCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE) END_DISPATCH_MAP() ///////////////////////////////////////////////////////////////////////////// // Event map BEGIN_EVENT_MAP(CImgEditCtrl, COleControl) //{{AFX_EVENT_MAP(CImgEditCtrl) EVENT_CUSTOM("Close", FireClose, VTS_NONE) EVENT_CUSTOM("MarkEnd", FireMarkEnd, VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_BSTR) EVENT_CUSTOM("ToolSelected", FireToolSelected, VTS_I2) EVENT_CUSTOM("SelectionRectDrawn", FireSelectionRectDrawn, VTS_I4 VTS_I4 VTS_I4 VTS_I4) EVENT_CUSTOM("ToolTip", FireToolTip, VTS_I2) EVENT_CUSTOM("ToolPaletteHidden", FireToolPaletteHidden, VTS_I4 VTS_I4) EVENT_CUSTOM("Scroll", FireScroll, VTS_NONE) EVENT_CUSTOM("MarkSelect", FireMarkSelect, VTS_I2 VTS_I2 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_BSTR) EVENT_CUSTOM("PasteCompleted", FirePasteCompleted, VTS_NONE) EVENT_CUSTOM("Load", FireLoad, VTS_R8) EVENT_STOCK_KEYDOWN() EVENT_STOCK_KEYUP() EVENT_STOCK_KEYPRESS() EVENT_STOCK_MOUSEDOWN() EVENT_STOCK_MOUSEMOVE() EVENT_STOCK_MOUSEUP() EVENT_STOCK_CLICK() EVENT_CUSTOM_ID("DblClick", DISPID_DBLCLICK, FireDblClick, VTS_NONE) // 9602.21 jar replced SCODE with VTS_I4 //EVENT_CUSTOM_ID("Error", DISPID_ERROREVENT, FireError, VTS_I2 VTS_PBSTR VTS_SCODE VTS_BSTR VTS_BSTR VTS_I4 VTS_PBOOL) EVENT_CUSTOM_ID("Error", DISPID_ERROREVENT, FireError, VTS_I2 VTS_PBSTR VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 VTS_PBOOL) //}}AFX_EVENT_MAP END_EVENT_MAP() ///////////////////////////////////////////////////////////////////////////// // Property pages // TODO: Add more property pages as needed. Remember to increase the count! BEGIN_PROPPAGEIDS(CImgEditCtrl, 5) PROPPAGEID(CImgEditPropPage::guid) PROPPAGEID(CAnnotationPropPage::guid) PROPPAGEID(CLSID_CColorPropPage) PROPPAGEID(CLSID_CFontPropPage) PROPPAGEID(CLSID_CPicturePropPage) END_PROPPAGEIDS(CImgEditCtrl) ///////////////////////////////////////////////////////////////////////////// // Initialize class factory and guid IMPLEMENT_OLECREATE_EX(CImgEditCtrl, "WangImage.EditCtrl.1", 0x6d940280, 0x9f11, 0x11ce, 0x83, 0xfd, 0x2, 0x60, 0x8c, 0x3e, 0xc0, 0x8a) ///////////////////////////////////////////////////////////////////////////// // Type library ID and version IMPLEMENT_OLETYPELIB(CImgEditCtrl, _tlid, _wVerMajor, _wVerMinor) ///////////////////////////////////////////////////////////////////////////// // Interface IDs const IID BASED_CODE IID_DImgEdit = { 0x6d940281, 0x9f11, 0x11ce, { 0x83, 0xfd, 0x2, 0x60, 0x8c, 0x3e, 0xc0, 0x8a } }; const IID BASED_CODE IID_DImgEditEvents = { 0x6d940282, 0x9f11, 0x11ce, { 0x83, 0xfd, 0x2, 0x60, 0x8c, 0x3e, 0xc0, 0x8a } }; ///////////////////////////////////////////////////////////////////////////// // Control type information static const DWORD BASED_CODE _dwImgEditOleMisc = OLEMISC_SIMPLEFRAME | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_INSIDEOUT | OLEMISC_CANTLINKINSIDE | OLEMISC_RECOMPOSEONRESIZE; IMPLEMENT_OLECTLTYPE(CImgEditCtrl, IDS_IMGEDIT, _dwImgEditOleMisc) ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::CImgEditCtrlFactory::UpdateRegistry - // Adds or removes system registry entries for CImgEditCtrl BOOL CImgEditCtrl::CImgEditCtrlFactory::UpdateRegistry(BOOL bRegister) { if (bRegister) return AfxOleRegisterControlClass( AfxGetInstanceHandle(), m_clsid, m_lpszProgID, IDS_IMGEDIT, IDB_IMGEDIT, TRUE, // Not insertable _dwImgEditOleMisc, _tlid, _wVerMajor, _wVerMinor); else return AfxOleUnregisterClass(m_clsid, m_lpszProgID); } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::CImgEditCtrl - Constructor CImgEditCtrl::CImgEditCtrl() : m_AnnotationFont(&m_xHeadingFontNotify) { //9603.14 jar added init m_lStatusCode = 0L; // 9606.12 jar added text anno dialog flag init m_bTextAnnoDlg = FALSE; InitializeIIDs(&IID_DImgEdit, &IID_DImgEditEvents); EnableSimpleFrame(); // TODO: Initialize your control's instance data here. m_nFitToZoom = -1; // no arbitrary zoom initially m_bImageInWindow = FALSE; // no image initially // initialize selection rect variables to null - no selection rect m_bMouseTimer = FALSE; m_bVariableSelectBoxBeingDrawn = FALSE; m_bSelectRectangle = FALSE; // no group list initially m_lpGroupList = NULL; // no standard tool palette initially and therfore no standard tool pressed m_hToolPaletteWnd = NULL; m_uSTP_AnnotationType = 0; // tool palette window not created or visible m_bToolPaletteVisible = FALSE; m_bToolPaletteCreated = FALSE; // tool palette class not created m_CMiniToolBox = NULL; // set paste mode to false initially m_bInPasteMode = FALSE; // define messages between annotation button control and image/edit control DRAW_START_XPOSITION = RegisterWindowMessage("DRAW_START_XPOSITION"); DRAW_START_YPOSITION = RegisterWindowMessage("DRAW_START_YPOSITION"); DRAW_END_XPOSITION = RegisterWindowMessage("DRAW_END_XPOSITION"); DRAW_END_YPOSITION = RegisterWindowMessage("DRAW_END_YPOSITION"); // registered msgs from tool palette to image/edit control STP_SET_ANNOTATION_TYPE = RegisterWindowMessage("STP_SET_ANNOTATION_TYPE"); STP_SET_ANNOTATION_FONTNAME = RegisterWindowMessage("STP_SET_ANNOTATION_FONTNAME"); STP_SET_ANNOTATION_FONTSIZE = RegisterWindowMessage("STP_SET_ANNOTATION_FONTSIZE"); STP_SET_ANNOTATION_FONTBOLD = RegisterWindowMessage("STP_SET_ANNOTATION_FONTBOLD"); STP_SET_ANNOTATION_FONTITALIC = RegisterWindowMessage("STP_SET_ANNOTATION_FONTITALIC"); STP_SET_ANNOTATION_FONTSTRIKETHRU = RegisterWindowMessage("STP_SET_ANNOTATION_FONTSTRIKETHRU"); STP_SET_ANNOTATION_FONTUNDERLINE = RegisterWindowMessage("STP_SET_ANNOTATION_FONTUNDERLINE"); STP_SET_ANNOTATION_FONTCHARSET = RegisterWindowMessage("STP_SET_ANNOTATION_FONTCHARSET"); STP_SET_ANNOTATION_STAMPTEXT = RegisterWindowMessage("STP_SET_ANNOTATION_STAMPTEXT"); STP_SET_ANNOTATION_LINESIZE = RegisterWindowMessage("STP_SET_ANNOTATION_LINESIZE"); STP_SET_ANNOTATION_STYLE = RegisterWindowMessage("STP_SET_ANNOTATION_STYLE"); STP_SET_ANNOTATION_REDCOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_REDCOLOR"); STP_SET_ANNOTATION_GREENCOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_GREENCOLOR"); STP_SET_ANNOTATION_BLUECOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_BLUECOLOR"); STP_SET_ANNOTATION_BACKREDCOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_BACKREDCOLOR"); STP_SET_ANNOTATION_BACKGREENCOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_BACKGREENCOLOR"); STP_SET_ANNOTATION_BACKBLUECOLOR = RegisterWindowMessage("STP_SET_ANNOTATION_BACKBLUECOLOR"); STP_SET_ANNOTATION_IMAGE = RegisterWindowMessage("STP_SET_ANNOTATION_IMAGE"); TOOLTIP_EVENT = RegisterWindowMessage("TOOLTIP_EVENT"); TOOLPALETTE_HIDDEN = RegisterWindowMessage("TOOLPALETTE_HIDDEN"); TOOLPALETTE_HIDDENEVENT = RegisterWindowMessage("TOOLPALETTE_HIDDENEVENT"); TOOL_SELECTED_EVENT = RegisterWindowMessage("TOOL_SELECTED_EVENT"); TOOLPALETTE_HIDDEN_XPOSITION = RegisterWindowMessage("TOOLPALETTE_HIDDEN_XPOSITION"); TOOLPALETTE_HIDDEN_YPOSITION = RegisterWindowMessage("TOOLPALETTE_HIDDEN_YPOSITION"); // end registered msgs from tool palette to image/edit control // registered messages from image/edit to tool palette SELECT_TOOL_BUTTON = RegisterWindowMessage("SELECT_TOOL_BUTTON"); // end registered messages from image/edit to tool palette m_bFirstImageDisplayed = FALSE; // set palette scope member varaible here because this is set as a method and // not a property and yet it is used to initialize o/i on the OnCreate function. m_PaletteScope = PALETTE_SCOPE_FOREGROUND; // set the 7 image type scale algs to nothing initially m_uBiLevelScaleAlg = (UINT)-1; m_uGray4ScaleAlg = (UINT)-1; m_uGray8ScaleAlg = (UINT)-1; m_uRGB24ScaleAlg = (UINT)-1; m_uBGR24ScaleAlg = (UINT)-1; m_uPal4ScaleAlg = (UINT)-1; m_uPal8ScaleAlg = (UINT)-1; // specify that our palette has not changed initially m_bPaletteChanged = FALSE; // specify that no left button down msg m_bLeftButtonDown = FALSE; } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::~CImgEditCtrl - Destructor CImgEditCtrl::~CImgEditCtrl() { LPCTSTR pImageControlName; pImageControlName = m_strImageControl.GetBuffer(CONTROLSIZE); pControlList->Delete(pImageControlName, (DWORD)GetCurrentProcessId(), m_hWnd); // if null group list, then free it if (m_lpGroupList != NULL) { free(m_lpGroupList); m_lpGroupList = NULL; } } // Font stuff - new interface defines inorder to support multiple font properties. I have only 1 font // property but I could not get the font changes unless I implemented this interface. STDMETHODIMP_(ULONG) CImgEditCtrl::XHeadingFontNotify::AddRef() { METHOD_MANAGE_STATE(CImgEditCtrl, HeadingFontNotify) return (ULONG)pThis->ExternalAddRef(); } STDMETHODIMP_(ULONG) CImgEditCtrl::XHeadingFontNotify::Release() { METHOD_MANAGE_STATE(CImgEditCtrl, HeadingFontNotify) return (ULONG)pThis->ExternalRelease(); } STDMETHODIMP CImgEditCtrl::XHeadingFontNotify::QueryInterface( REFIID iid, LPVOID FAR* ppvObj) { METHOD_MANAGE_STATE(CImgEditCtrl, HeadingFontNotify) if ( IsEqualIID( iid, IID_IUnknown) || IsEqualIID( iid, IID_IPropertyNotifySink)) { *ppvObj = this; AddRef(); return NOERROR; } return ResultFromScode(E_NOINTERFACE); } STDMETHODIMP CImgEditCtrl::XHeadingFontNotify::OnChanged( DISPID ) { METHOD_MANAGE_STATE(CImgEditCtrl, HeadingFontNotify) BSTR lpBuffer; char Buffer[50]; CY Size; BOOL Bold,Italic,Underline,Strikethru; FONTDESC FontyPython; lpBuffer = (BSTR)Buffer; pThis->m_AnnotationFont.m_pFont->get_Name(&lpBuffer); pThis->m_AnnotationFont.m_pFont->get_Size((CY FAR *)&Size); pThis->m_AnnotationFont.m_pFont->get_Bold(&Bold); pThis->m_AnnotationFont.m_pFont->get_Italic(&Italic); pThis->m_AnnotationFont.m_pFont->get_Underline(&Underline); pThis->m_AnnotationFont.m_pFont->get_Strikethrough(&Strikethru); memset( &FontyPython, 0, sizeof( FONTDESC)); FontyPython.cbSizeofstruct = sizeof( FONTDESC); FontyPython.lpstrName = lpBuffer; FontyPython.cySize = Size; //FontyPtyhon.sWeight = //FontyPtyhon.sCharset = FontyPython.fItalic = Italic; FontyPython.fUnderline = Underline; FontyPython.fStrikethrough = Strikethru; pThis->m_AnnotationFont.InitializeFont(&FontyPython, NULL); pThis->SetModifiedFlag(TRUE); pThis->InvalidateControl(); return NOERROR; } STDMETHODIMP CImgEditCtrl::XHeadingFontNotify::OnRequestEdit( DISPID ) { return NOERROR; } // end font stuff ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::OnDraw - Drawing function void CImgEditCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { int RetCode; BOOL UserMode; HBRUSH hBrush; LRECT rect; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode UserMode = AmbientUserMode(); if (UserMode == FALSE) { // in design mode, paint backgroung gay hBrush = (HBRUSH) GetStockObject(LTGRAY_BRUSH); CBrush* pBrush = CBrush::FromHandle(hBrush); pdc->FillRect(rcBounds, pBrush); } else { CPoint point = rcInvalid.TopLeft(); rect.left = point.x; rect.top = point.y; point = rcInvalid.BottomRight(); rect.right = point.x; rect.bottom = point.y; RetCode = IMGRepaintDisplay(m_hWnd, (LPRECT)&rect); } } void CImgEditCtrl::OnDrawMetafile(CDC* pdc, const CRect& rcInvalid) { int RetCode; BOOL UserMode,bResult; HBRUSH hBrush; UINT height; UINT width; CPoint point; CString szErr; DWORD dwFlags=0; UINT Scale,ImageType,HelpIdDef; LPCTSTR ImageName; CWnd* HiddenWnd; CRect rect; PARM_DIM_STRUCT ParmDimStruct; PARM_SCALE_ALGORITHM_STRUCT ScaleAlg; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode UserMode = AmbientUserMode(); if (UserMode == TRUE) { if (m_hWnd != NULL) { CRect Rect; IMGGetParmsCgbw(m_hWnd, PARM_SELECTION_BOX, (void FAR *)&Rect, PARM_WINDOW); // if rect is not zero and the selected rectangle is enabled then create a hidden window // and only display the currently selected image with the correct scale algorithm if(Rect.Width() != 0 && m_bSelectionRectEnabled ) { RetCode = IMGGetParmsCgbw(m_hWnd, PARM_IMAGE_TYPE, &ImageType, NULL); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } ScaleAlg.uImageFlags = ImageType; RetCode =IMGGetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM,(void FAR *)&ScaleAlg,PARM_WINDOW_DEFAULT); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } CString lpszClassName = AfxRegisterWndClass(CS_DBLCLKS, 0, 0, 0); // construct an invisible frame window HiddenWnd = new CWnd; if (HiddenWnd == NULL) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)WICTL_E_UNABLETOCREATETOOLPALETTE,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, IDH_WIE_UNABLETOCREATETOOLPALETTE); return; } width = Rect.Width(); height = Rect.Height(); // use createex to get the popup.... bResult = HiddenWnd->CreateEx(WS_EX_NOPARENTNOTIFY, lpszClassName, "", WS_POPUP, 0,0,width+5, height+5, HWND_DESKTOP, 0); if (bResult == FALSE) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)WICTL_E_UNABLETOCREATETOOLPALETTE,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, IDH_WIE_UNABLETOCREATETOOLPALETTE); return; } if (HiddenWnd->m_hWnd != 0) { // register O/i window that was just created RetCode = IMGRegWndw(HiddenWnd->m_hWnd); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } // Use a DC instead of window IMGSetDC(HiddenWnd->m_hWnd, pdc->m_hDC); ImageName = m_strImage.GetBuffer(MAXFILESPECLENGTH); dwFlags = OI_DISP_NO | OI_NOSCROLL; // display image but don't paint it RetCode = IMGDisplayFile(HiddenWnd->m_hWnd, (LPSTR)ImageName, m_lPage, dwFlags); if (RetCode) { szErr.LoadString(IDS_BADMETH_DISPLAY); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } pdc->SetWindowExt(width,height); // forces metafile to size of window // The metafile DC is set to MM_ANISOTROPIC RetCode = IMGSetParmsCgbw(HiddenWnd->m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } // since we want only the image in the selection rect RetCode = IMGSetParmsCgbw(HiddenWnd->m_hWnd, PARM_SCALE_BOX, NULL, PARM_REPAINT | PARM_DONT_ERASE_BOX ); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } // set device context back to a window IMGSetDC(HiddenWnd->m_hWnd, NULL); // deregister O/i window IMGDeRegWndw(HiddenWnd->m_hWnd); // destroy window that was created HiddenWnd->DestroyWindow(); delete HiddenWnd; } } else // do not use the selection rect use the entire window { pdc->SetWindowExt(rcInvalid.Width(), rcInvalid.Height()); IMGSetDC(m_hWnd, pdc->m_hDC); RetCode = IMGRepaintDisplay(m_hWnd, (LPRECT)-1); IMGSetDC(m_hWnd, NULL); } } else { // If the HWND is null, then this is the special case of a rendering // for the application when performing an OLE OBJECT CREATE FORM FILE // (could be either normal or link) // The base class code just below here has created a Memory metafile DC // For us to write into. However, it gets set to our control size, // which in this case is very small (we are not showing, just created.) // on the way out from here, it ises our control's size to agein set extents // in the HMETAFILE that is passed back. Enlarge both our control size and // enlarge dc size and so we can get better metafile presentation. // DO NOT SET TOO LARGE, THOUGH. THis causes so much data to be painted // to the metafile so that when it is normally sized smaller in the // container htat is going to get it. // this returns PIXELS height = GetSystemMetrics(SM_CXFULLSCREEN); width = GetSystemMetrics(SM_CYFULLSCREEN); // make it 8.5 x 11 portrait scaling... (ratio .77) // If height greater than width, start equal // if less already, thats OK // then set witdh to .77 of height (after reducing by 1/2) if (height > width) height = width; // if odd, make even if (height & 1) height++; // now make 1/2 original and set width height /=2; // cant do float math (x 0.77), do discretely width = 77/100 height // be sure under 65535 // doing mult fisrt gives better results // 851 x 77 = 65527 if (height < 851) { width = height*77; width /= 100; } else { width = height/100; width *= 77; } CString lpszClassName = AfxRegisterWndClass(CS_DBLCLKS, 0, 0, 0); // construct an invisible frame window HiddenWnd = new CWnd; if (HiddenWnd == NULL) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)WICTL_E_UNABLETOCREATETOOLPALETTE,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, IDH_WIE_UNABLETOCREATETOOLPALETTE); return; } // create the frame window rect.left = 0; rect.top = 0; rect.right = width; rect.bottom = height; // use createex to get the popup.... bResult = HiddenWnd->CreateEx(WS_EX_NOPARENTNOTIFY, lpszClassName, "", WS_POPUP, 0,0,width, height, HWND_DESKTOP, 0); if (bResult == FALSE) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)WICTL_E_UNABLETOCREATETOOLPALETTE,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, IDH_WIE_UNABLETOCREATETOOLPALETTE); return; } if (HiddenWnd->m_hWnd != 0) { // register O/i window that was just created RetCode = IMGRegWndw(HiddenWnd->m_hWnd); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } // Use a DC instead of window IMGSetDC(HiddenWnd->m_hWnd, pdc->m_hDC); ImageName = m_strImage.GetBuffer(MAXFILESPECLENGTH); if (ImageName == NULL || ImageName[0] == 0) { IMGDisplayFile(HiddenWnd->m_hWnd, (LPSTR)ImageName, 1, dwFlags); } else { dwFlags = OI_DISP_NO | OI_NOSCROLL; // display image but don't paint it RetCode = IMGDisplayFile(HiddenWnd->m_hWnd, (LPSTR)ImageName, 1, dwFlags); if (RetCode) { szErr.LoadString(IDS_BADMETH_DISPLAY); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } } RetCode = IMGGetParmsCgbw(HiddenWnd->m_hWnd, PARM_DIMENSIONS, &ParmDimStruct, NULL); width = (ParmDimStruct.nWidth + 7) / 8; height = (ParmDimStruct.nHeight +7) / 8; HiddenWnd->SetWindowPos(&wndBottom,0,0,width,height,SWP_NOREDRAW || SWP_NOACTIVATE); // accepts pixels as size!! // Nee to do this because on the other end, SetControlSize(width, height); // forces metafile to size of window // The metafile DC is set to MM_ANISOTROPIC pdc->SetWindowExt(width, height); // Scale to one eight the size Scale = SD_EIGHTHSIZE; RetCode = IMGSetParmsCgbw(HiddenWnd->m_hWnd, PARM_SCALE, (void FAR *)&Scale, PARM_REPAINT); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return; } // set device context back to a window IMGSetDC(HiddenWnd->m_hWnd, NULL); // deregister O/i window IMGDeRegWndw(HiddenWnd->m_hWnd); // destroy window that was created HiddenWnd->DestroyWindow(); delete HiddenWnd; } } } else { // in design mode, paint backgroung gray hBrush = (HBRUSH) GetStockObject(LTGRAY_BRUSH); CBrush* pBrush = CBrush::FromHandle(hBrush); pdc->FillRect(rcInvalid, pBrush); } } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::DoPropExchange - Persistence support void CImgEditCtrl::DoPropExchange(CPropExchange* pPX) { BOOL bCtlLoading; ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); // change control border style default from none to fixed single // SetBorderStyle(1); // TODO: Call PX_ functions for each persistent custom property. PX_String(pPX, _T("Image"), m_strImage, _T("")); PX_String(pPX, _T("AnnotationImage"), m_strAnnotationImage, _T("")); PX_Long(pPX, _T("StatusCode"), m_lStatusCode, 0); PX_String(pPX, _T("ImageControl"), m_strImageControl, _T("")); PX_Bool(pPX, _T("SelectionRectangleEnabled"), m_bSelectionRectEnabled, TRUE); PX_Short(pPX, _T("AnnotationType"), m_nAnnotationType, 0); PX_Long(pPX, _T("Page"), m_lPage, 1); PX_Float(pPX, _T("Zoom"), m_fpZoom, (float)100.0); PX_Short(pPX, _T("AnnotationLineStyle"), m_nAnnotationLineStyle, 0); // transparent PX_Short(pPX, _T("AnnotationLineWidth"), m_nAnnotationLineWidth, 2); // 2 pixels PX_Color(pPX, _T("AnnotationLineColor"), m_clrAnnotationLineColor, RGB(255, 0, 0)); // red PX_Color(pPX, _T("AnnotationBackColor"), m_clrAnnotationBackColor, RGB(255, 255, 0)); // yellow PX_Short(pPX, _T("AnnotationFillStyle"), m_nAnnotationFillStyle, 0); // transparent PX_Color(pPX, _T("AnnotationFillColor"), m_clrAnnotationFillColor, RGB(255, 0, 0)); // red PX_Font(pPX, _T("AnnotationFont"), m_AnnotationFont, &_fontdescHeading); PX_Color(pPX, _T("AnnotationFontColor"), m_clrAnnotationFontColor, RGB(0, 0, 0)); // black PX_String(pPX, _T("AnnotationStampText"), m_strAnnotationStampText, _T("")); PX_String(pPX, _T("AnnotationTextFile"), m_strAnnotationTextFile, _T("")); PX_Short(pPX, _T("BorderStyle"), m_sBorderStyle, 1); PX_Bool(pPX, _T("AutoRefresh"), m_bAutoRefresh, FALSE); PX_Short(pPX, _T("DisplayScaleAlgorithm"), m_nDisplayScaleAlgorithm, 0); PX_Short(pPX, _T("ImagePalette"), m_nImagePalette, CUSTOM_PALETTE); PX_Bool(pPX, _T("ScrollBars"), m_bScrollBars, TRUE); PX_Short(pPX, _T("MousePointer"), m_nMousePointer, DEFAULT_MOUSEPOINTER); PX_Picture(pPX, _T("MouseIcon"), m_MouseIcon); PX_Bool(pPX, _T("ScrollShortcutsEnabled"), m_bScrollShortcutsEnabled, TRUE); PX_Bool(pPX, _T("Enabled"), m_bEnabled, TRUE); // if loading try and link controls bCtlLoading = pPX->IsLoading(); if (bCtlLoading == TRUE) { BOOL bCtlFound; char ImageControlStr[40],CountStr[10]; int nCtlCount; LPCTSTR pImageControl; HANDLE hImageWnd; pImageControl = m_strImageControl.GetBuffer(CONTROLSIZE); if (pImageControl == NULL || pImageControl[0] == '\0') { _mbscpy((unsigned char *)ImageControlStr, (const unsigned char*)"ImgEdit1"); bCtlFound = pControlList->Lookup((LPCTSTR)ImageControlStr, &hImageWnd, (DWORD)GetCurrentProcessId()); if (bCtlFound == FALSE) { pControlList->Add((LPCTSTR)ImageControlStr, (HWND)m_hWnd, (DWORD)GetCurrentProcessId()); SetImageControl(ImageControlStr); } else { nCtlCount = pControlList->GetCount((DWORD)GetCurrentProcessId()); _itoa(nCtlCount, CountStr, 10); _mbscpy((unsigned char *)ImageControlStr, (const unsigned char *)"ImgEdit"); _mbscat((unsigned char *)ImageControlStr, (const unsigned char *)CountStr); bCtlFound = pControlList->Lookup((LPCTSTR)ImageControlStr, &hImageWnd, (DWORD)GetCurrentProcessId()); while (bCtlFound == TRUE) { nCtlCount++; _itoa(nCtlCount, CountStr, 10); _mbscpy((unsigned char *)ImageControlStr, (const unsigned char *)"ImgEdit"); _mbscat((unsigned char *)ImageControlStr, (const unsigned char *)CountStr); bCtlFound = pControlList->Lookup((LPCTSTR)ImageControlStr, &hImageWnd, (DWORD)GetCurrentProcessId()); } pControlList->Add((LPCTSTR)ImageControlStr, (HWND)m_hWnd, (DWORD)GetCurrentProcessId()); SetImageControl(ImageControlStr); } } else { pControlList->Add(pImageControl, (HWND)m_hWnd, (DWORD)GetCurrentProcessId()); } } // end if control loading } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::OnResetState - Reset control to default state void CImgEditCtrl::OnResetState() { COleControl::OnResetState(); // Resets defaults found in DoPropExchange // TODO: Reset any other control state here. } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl::AboutBox - Display an "About" box to the user void CImgEditCtrl::AboutBox() { CDialog dlgAbout(IDD_ABOUTBOX_IMGEDIT); dlgAbout.DoModal(); } // MESSAGES RECIEVED FROM ANNOTATION BUTTON CONTROL long CImgEditCtrl::OnSetAnnotationType(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationType((short)wp); return 0L; } long CImgEditCtrl::OnSetAnnotationBackColor(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationBackColor((OLE_COLOR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationFillColor(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationFillColor((OLE_COLOR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationFillStyle(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationFillStyle((short)wp); return 0L; } long CImgEditCtrl::OnSetAnnotationFont(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationFont((LPFONTDISP)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationFontColor(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationFontColor((OLE_COLOR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationImage(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationImage((LPCTSTR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationLineColor(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationLineColor((OLE_COLOR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationLineStyle(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationLineStyle((short)wp); return 0L; } long CImgEditCtrl::OnSetAnnotationLineWidth(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationLineWidth((short)wp); return 0L; } long CImgEditCtrl::OnSetAnnotationStampText(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationStampText((LPCTSTR)lp); return 0L; } long CImgEditCtrl::OnSetAnnotationTextFile(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; SetAnnotationTextFile((LPCTSTR)lp); return 0L; } long CImgEditCtrl::OnStartXPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_StartPoint.x = (int)lp; return 0L; } long CImgEditCtrl::OnStartYPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_StartPoint.y = (int)lp; return 0L; } long CImgEditCtrl::OnEndXPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_EndPoint.x = (int)lp; return 0L; } long CImgEditCtrl::OnEndYPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_EndPoint.y = (int)lp; return 0L; } long CImgEditCtrl::OnRectSelection(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_bProgrammaticRectSelection = TRUE; return 0L; } long CImgEditCtrl::OnDrawAnnotationMethod(WPARAM wp, LPARAM lp) { long lRet; //9604.29 jar added init m_lStatusCode = 0L; lRet = OnDrawAnnotation(0, DRAW_IMMEDIATE); return lRet; } // END MESSAGES RECIEVED FROM ANNOTATION BUTTON CONTROL // MESSAGES RECIEVED FROM STANDARD TOOL PALETTE ONLY long CImgEditCtrl::OnSTPSetAnnotationType(WPARAM wp, LPARAM lp) { // 25jun96 paj Init cursor variable for below HCURSOR hCursor=NULL; LPCSTR lpMousePointer; //9603.14 jar added init m_lStatusCode = 0L; // set the annotation type m_uSTP_AnnotationType = (UINT)wp; // delete any existing custom cursors if (m_hCursor != NULL) { DestroyCursor(m_hCursor); m_hCursor = NULL; } // set the cursor switch(m_uSTP_AnnotationType) { case STP_NO_ANNOTATION: case STP_ANNOTATION_SELECTION: lpMousePointer = MAKEINTRESOURCE(IDC_ARROW); hCursor = LoadCursor(NULL, lpMousePointer); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_nMousePointer = ARROW_MOUSEPOINTER; break; case STP_FREEHAND_LINE: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FREEHAND_LINE_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = FREEHAND_LINE_MOUSEPOINTER; break; case STP_HIGHLIGHT_LINE: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(HIGHLIGHT_LINE_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = -1; // no define for this break; case STP_STRAIGHT_LINE: lpMousePointer = MAKEINTRESOURCE(IDC_CROSS); hCursor = LoadCursor(NULL, lpMousePointer); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_nMousePointer = CROSS_MOUSEPOINTER; break; case STP_HOLLOW_RECT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(HOLLOW_RECT_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = HOLLOW_RECT_MOUSEPOINTER; break; case STP_FILLED_RECT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FILLED_RECT_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = FILLED_RECT_MOUSEPOINTER; break; case STP_TEXT: lpMousePointer = MAKEINTRESOURCE(IDC_IBEAM); hCursor = LoadCursor(NULL, lpMousePointer); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_nMousePointer = IBEAM_MOUSEPOINTER; break; case STP_TEXT_FROM_FILE: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_FROM_FILE_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = TEXT_FROM_FILE_MOUSEPOINTER; break; case STP_TEXT_ATTACHMENT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_ATTACHMENT_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = TEXT_ATTACHMENT_MOUSEPOINTER; break; case STP_RUBBER_STAMP: // set whether its an image stamp or text stamp if (lp == STP_IMAGESTAMP) m_bSTP_ImageStamp = TRUE; else m_bSTP_ImageStamp = FALSE; hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(RUBBER_STAMP_CURSOR)); SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); m_hCursor = hCursor; m_nMousePointer = RUBBER_STAMP_MOUSEPOINTER; break; } // end switch // 25jun96 paj From thumbnail>>>jar save cursor if ( hCursor != NULL ) m_LittleOldCursor = hCursor; // 25jun96 paj From thumbnail>>>jar save cursor return 0L; } long CImgEditCtrl::OnSTPSetAnnotationLineSize(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_uSTP_LineWidth = (UINT)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationRedColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_ColorRed = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationGreenColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_ColorGreen = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationBlueColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_ColorBlue = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationStyle(WPARAM wp, LPARAM lp) { m_uSTP_Style = (BOOL)wp; //9603.14 jar added init m_lStatusCode = 0L; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontName(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_strSTP_FontName = (LPCTSTR)lp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontSize(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_uSTP_FontSize = lp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontBold(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_bSTP_FontBold = (BOOL)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontItalic(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_bSTP_FontItalic = (BOOL)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontStrikethru(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_bSTP_FontStrikethru = (BOOL)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontUnderline(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_bSTP_FontUnderline = (BOOL)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationFontCharSet(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_FontCharSet = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationBackRedColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_BackColorRed = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationBackGreenColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_BackColorGreen = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationBackBlueColor(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_STP_BackColorBlue = (BYTE)wp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationImage(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_strSTP_ImageStamp = (LPCTSTR)lp; return 0L; } long CImgEditCtrl::OnSTPSetAnnotationStampText(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_strSTP_TextStamp = (LPCTSTR)lp; return 0L; } long CImgEditCtrl::OnToolTipEvent(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; // fire tool tip event FireToolTip((short)wp); return 0L; } long CImgEditCtrl::OnToolPaletteHidden(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; // get rid of annotation type and cursor OnSTPSetAnnotationType(STP_NO_ANNOTATION, 0); if (m_bToolPaletteVisible == TRUE); // post event to myself to send tool palette hidden event PostMessage(TOOLPALETTE_HIDDENEVENT, wp, lp); m_bToolPaletteVisible = FALSE; m_bToolPaletteCreated = FALSE; return 0L; } long CImgEditCtrl::OnToolPaletteHiddenEvent(WPARAM wp, LPARAM lp) { long left,top; //9603.14 jar added init m_lStatusCode = 0L; // get left and top left = m_ToolPaletteHiddenXPosition; top = m_ToolPaletteHiddenYPosition; // fire event to container for tool palette hidden event FireToolPaletteHidden(left, top); return 0L; } long CImgEditCtrl::OnToolPaletteHiddenXPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_ToolPaletteHiddenXPosition = lp; return 0L; } long CImgEditCtrl::OnToolPaletteHiddenYPosition(WPARAM wp, LPARAM lp) { //9603.14 jar added init m_lStatusCode = 0L; m_ToolPaletteHiddenYPosition = lp; return 0L; } long CImgEditCtrl::OnToolSelectedEvent(WPARAM wp, LPARAM lp) { //9604.29 jar added init m_lStatusCode = 0L; // fire event FireToolSelected((short)wp); return 0L; } // END MESSAGES RECIEVED FROM TOOL PALETTE int CImgEditCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { LPCTSTR pImageControl; UINT ImagePalette; UINT RetCode, HelpIdDef; CString szErr; //9603.14 jar added init m_lStatusCode = 0L; if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // Register with O/i the specified Window Handle RetCode = IMGRegWndw(m_hWnd); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); return -1; } // add this control into global list so other controls can link to it pImageControl = m_strImageControl.GetBuffer(CONTROLSIZE); if (pImageControl != NULL && pImageControl[0] != '\0') pControlList->Add(pImageControl, (HWND)m_hWnd, (DWORD)GetCurrentProcessId()); // no initial cursor m_hCursor = NULL; // load the cursor the user wants SetMousePointer(m_nMousePointer); // Set palette to foreground or background for window RetCode = IMGSetParmsCgbw(m_hWnd, PARM_PALETTE_SCOPE, (void FAR *)&m_PaletteScope,PARM_WINDOW_DEFAULT); if (RetCode) { szErr.LoadString(IDS_BADMETH_DISPLAY); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef ); return 0; } // Set image palette for window based in ImagePalette property switch(m_nImagePalette) { case CUSTOM_PALETTE: ImagePalette = DISP_PALETTE_CUSTOM; break; case COMMON_PALETTE: ImagePalette = DISP_PALETTE_COMMON; break; case GRAY8_PALETTE: ImagePalette = DISP_PALETTE_GRAY8; break; case RGB24_PALETTE: ImagePalette = DISP_PALETTE_RGB24; break; case BLACK_AND_WHITE_PALETTE: ImagePalette = DISP_PALETTE_BW; break; } // end switch // Set O/i the palette settings RetCode = IMGSetParmsCgbw(m_hWnd, PARM_DISPLAY_PALETTE, &ImagePalette, PARM_WINDOW_DEFAULT); if (RetCode) { szErr.LoadString(IDS_BADMETH_DISPLAY); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef ); return 0; } // register the tool palette parent frame window szToolPaletteClassName = AfxRegisterWndClass(CS_DBLCLKS, 0, 0, 0); return 0; } void CImgEditCtrl::OnDestroy() { LPCTSTR pImageControlName; int RetCode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; COleControl::OnDestroy(); // delete the control that was added to the list with the window handle. // destructor does not have a valid hWnd. (at least not in this version of VB) pImageControlName = m_strImageControl.GetBuffer(CONTROLSIZE); pControlList->Delete(pImageControlName, (DWORD)GetCurrentProcessId(), m_hWnd); // de-register ole control window RetCode = IMGDeRegWndw(m_hWnd); if (RetCode) { szErr.LoadString((UINT)WICTL_E_INTERNALERROR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate((long)RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); FireErrorEdit(m_lStatusCode, szErr, HelpIdDef); } // control is unloading, destroy any non-standard loaded cursor if (m_hCursor != NULL) { DestroyCursor(m_hCursor); m_hCursor = NULL; } // if tool palette parent frame window created then destory it if (m_bToolPaletteCreated == TRUE) { if (m_CMiniToolBox != NULL) m_CMiniToolBox->DestroyWindow(); } } ///////////////////////////////////////////////////////////////////////////// // CImgEditCtrl message handlers BSTR CImgEditCtrl::GetImage() { m_lStatusCode = SUCCESS; return m_strImage.AllocSysString(); } void CImgEditCtrl::SetImage(LPCTSTR lpszNewValue) { CString szErr; UINT HelpIdDef; int len; //9603.14 jar added init m_lStatusCode = 0L; // Check if NULL PTR passed in...if so error out if (lpszNewValue == NULL ) { szErr.LoadString(IDS_BADPROP_IMAGE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGE); return; } // Check the input parm string length len = _mbstrlen((const char *)lpszNewValue); if( len > MAXFILESPECLENGTH ) { //Parm too big szErr.LoadString(IDS_BADVAR_PARMEXCEEDSMAX); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGE); return; } if (m_strImage != lpszNewValue) { m_strImage = lpszNewValue; SetModifiedFlag(TRUE); } m_lStatusCode = SUCCESS; } BSTR CImgEditCtrl::GetImageControl() { m_lStatusCode = (long)SUCCESS; return m_strImageControl.AllocSysString(); } void CImgEditCtrl::SetImageControl(LPCTSTR lpszNewValue) { CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // No NULL PTR values accepted and the length can not exceed CONTROLSIZE // Make sure that the length of the NewValue ImageControl name does not exceed the max. if (lpszNewValue == NULL ) { szErr.LoadString(IDS_BADPROP_DESTIMAGECTL); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGECONTROL); return; } // Verify that the input parm does not exceed CONTROLSIZE max == 50 if ( _mbstrlen((const char *)lpszNewValue) > CONTROLSIZE) { //Parm too big szErr.LoadString(IDS_BADVAR_PARMEXCEEDSMAX); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGECONTROL); return; } // Check to see if the current ImageControl value and the NewValue are =. if (m_strImageControl != lpszNewValue) { BOOL bCtlFound; HANDLE hImageWnd; char TempControl[CONTROLSIZE]; LPCTSTR pOldImageControl; // delete old control reference if found pOldImageControl = m_strImageControl.GetBuffer(CONTROLSIZE); _mbscpy((unsigned char *)TempControl, (const unsigned char *)pOldImageControl); bCtlFound = pControlList->Lookup((LPCTSTR)TempControl, &hImageWnd, (DWORD)GetCurrentProcessId()); if (bCtlFound == TRUE) pControlList->Delete((LPCTSTR)TempControl, (DWORD)GetCurrentProcessId(), m_hWnd); m_strImageControl = lpszNewValue; _mbscpy((unsigned char *)TempControl, (const unsigned char *)lpszNewValue); SetModifiedFlag(TRUE); // put new one in, needs to be done because here is where the // window handle becomes valid pControlList->Add((LPCTSTR)TempControl, m_hWnd, (DWORD)GetCurrentProcessId()); } m_lStatusCode = (long)SUCCESS; } short CImgEditCtrl::GetAnnotationType() { m_lStatusCode = SUCCESS; return m_nAnnotationType; } void CImgEditCtrl::SetAnnotationType(short nNewValue) { short MousePointer; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; if (m_nAnnotationType != nNewValue) { if (nNewValue < 0 || nNewValue > ANNOTATION_SELECTION) { szErr.LoadString(IDS_BADPROP_ANNOTYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONTYPE); return; } m_nAnnotationType = nNewValue; SetModifiedFlag(TRUE); // annotation type has changed, we need to reset the mouse pointer if using default one MousePointer = GetMousePointer(); if (MousePointer == DEFAULT_MOUSEPOINTER) // this will cause the new mouse pointer to be used SetMousePointer(DEFAULT_MOUSEPOINTER); } m_lStatusCode = SUCCESS; } float CImgEditCtrl::GetZoom() { m_lStatusCode = SUCCESS; return m_fpZoom; } short CImgEditCtrl::GetAnnotationGroupCount() { int RetCode; short GroupCount,i,j; PARM_MARK_COUNT_STRUCT MarkCount; LPPARM_NAMED_BLOCK_STRUCT lpNamedBlock; LONG llen; LPSTR lpStr; LPANNOTATION_GROUP_LIST lpTempGroupList,lpSearchGroupList; BOOL RunMode,bGroupFound; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; lpTempGroupList = NULL; // find out if design mode or run mode - can't happen RunMode = AmbientUserMode(); if (RunMode == FALSE) return 0; // no runtime error if (m_bImageInWindow == FALSE) { m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) { szErr.LoadString(IDS_BADPROP_GETGROUPCOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_NOIMAGEINWINDOW,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONGROUPCOUNT); return 0; } } // if an annotation group list exists then use it if (m_lpGroupList != NULL) { // have an existing list, return group count m_lStatusCode = SUCCESS; return (short)m_lpGroupList->GroupCount; } // save current annotation status RetCode = SaveAnnotationStatus(); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_ANNOSTATUS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( RetCode, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // deselected all annotations RetCode = OiAnSelectByMarkAttrib(m_hWnd, NULL, NULL, FALSE, TRUE, OIAN_SELECT_ALL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_ANNODESELECTALL); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode, szErr, HelpIdDef,__FILE__, __LINE__); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // select all annotations RetCode = OiAnSelectByMarkAttrib(m_hWnd, NULL, NULL, TRUE, TRUE, OIAN_SELECT_ALL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_ANNOSELECTALL); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef, __FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // get a count of how may marks we have MarkCount.uScope = NB_SCOPE_ALL_MARKS; RetCode = IMGGetParmsCgbw(m_hWnd, PARM_MARK_COUNT, (void FAR *)&MarkCount, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETMARKCOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef, __FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // no marks selected, return 0 if (MarkCount.uMarkCount == 0) { m_lStatusCode = SUCCESS; return 0; } lpNamedBlock = (LPPARM_NAMED_BLOCK_STRUCT) malloc(sizeof(PARM_NAMED_BLOCK_STRUCT) * MarkCount.uMarkCount); if (lpNamedBlock == NULL) { szErr.LoadString(IDS_BADPROP_GETGROUPCOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_OUTOFMEMORY,szErr,HelpIdDef, __FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONGROUPCOUNT); return 0; } // get all the named blocks for oiGroup so we can get the group names _mbscpy((unsigned char *)lpNamedBlock->szBlockName, (const unsigned char *)"OiGroup\0"); lpNamedBlock->uScope = NB_SCOPE_ALL_MARKS; lpNamedBlock->uNumberOfBlocks = MarkCount.uMarkCount; RetCode = IMGGetParmsCgbw(m_hWnd, PARM_NAMED_BLOCK, (void FAR *)lpNamedBlock, NULL); if (RetCode != 0) { free(lpNamedBlock); szErr.LoadString(IDS_BADPROP_GETGROUPCOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef, __FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // make annotation group list, parse out duplicates GroupCount = 0; for (i = 0; i < (short)MarkCount.uMarkCount; i++) { // First pass, allocate group list struct if (i == 0) { llen = sizeof(ANNOTATION_GROUP_STRUCT) + sizeof(ANNOTATION_GROUP_LIST) * (MarkCount.uMarkCount - 1); m_lpGroupList = (LPANNOTATION_GROUP_STRUCT) malloc((size_t)llen); if (m_lpGroupList == NULL) { free(lpNamedBlock); szErr.LoadString(IDS_BADPROP_GETGROUPCOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_OUTOFMEMORY,szErr,HelpIdDef, __FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr,IDH_PROP_EDIT_ANNOTATIONGROUPCOUNT ); return 0; } // first group name _mbscpy((unsigned char *)m_lpGroupList->GroupList.GroupName, (const unsigned char *)lpNamedBlock->Block[i].lpBlock); GroupCount++; // Set the TempGroupList ptr to the beginning of the Group Name list lpTempGroupList = (LPANNOTATION_GROUP_LIST) &m_lpGroupList->GroupList; } else { // we need to go thru entire current list to see if we've already added // this group. Marks do not come back from o/i in all one group and then all in the next group... lpSearchGroupList = (LPANNOTATION_GROUP_LIST) &m_lpGroupList->GroupList; for (j = 0, bGroupFound = FALSE; j < GroupCount; j++, lpSearchGroupList++) { lpStr = (LPSTR)_mbsstr((const unsigned char *)lpSearchGroupList->GroupName, (const unsigned char *)lpNamedBlock->Block[i].lpBlock); if (lpStr != NULL) { // found existing group name bGroupFound = TRUE; break; } } // end for // if group not found in list then add it if (bGroupFound == FALSE) { // Increment the GroupList ptr & the GroupCount value lpTempGroupList++; GroupCount++; // add group to list _mbscpy((unsigned char *)lpTempGroupList->GroupName, (const unsigned char *)lpNamedBlock->Block[i].lpBlock); } // end if new group found } // end else } // end for // put annotations back in original state RetCode = RestoreAnnotationStatus(); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_ANNOSTATUS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( RetCode, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } m_lpGroupList->GroupCount = GroupCount; m_lStatusCode = SUCCESS; free(lpNamedBlock); return GroupCount; } void CImgEditCtrl::SetZoom(float newValue) { int RetCode; UINT Scale; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // need to check for valid values if (m_fpZoom != newValue) { if (newValue < 2 || newValue > 6554) { szErr.LoadString(IDS_BADPROP_SETZOOM); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode,szErr,IDH_PROP_EDIT_ZOOM); return; } // set value so we know if arbitrary zoom before then no longer arbitrary m_nFitToZoom = -1; if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); // redisplay image if one in window if (m_bImageInWindow == TRUE && m_bAutoRefresh == TRUE) { Scale = (UINT) (newValue * 10); // o/i coordinates RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE, (void FAR *)&Scale, PARM_REPAINT); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_IMAGEREPAINT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } m_fpZoom = newValue; SetModifiedFlag(TRUE); } else { m_bZoomFactorChange = TRUE; m_fpZoom = newValue; SetModifiedFlag(TRUE); } } m_lStatusCode = SUCCESS; } long CImgEditCtrl::GetPage() { m_lStatusCode = SUCCESS; return m_lPage; } void CImgEditCtrl::SetPage(long nNewValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_lPage != nNewValue) { m_lPage = nNewValue; SetModifiedFlag(TRUE); } } OLE_COLOR CImgEditCtrl::GetAnnotationBackColor() { m_lStatusCode = SUCCESS; return m_clrAnnotationBackColor; } void CImgEditCtrl::SetAnnotationBackColor(OLE_COLOR newValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_clrAnnotationBackColor != newValue) { m_clrAnnotationBackColor = newValue; SetModifiedFlag(TRUE); } } OLE_COLOR CImgEditCtrl::GetAnnotationFillColor() { m_lStatusCode = SUCCESS; return m_clrAnnotationFillColor; } void CImgEditCtrl::SetAnnotationFillColor(OLE_COLOR newValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_clrAnnotationFillColor != newValue) { m_clrAnnotationFillColor = newValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetAnnotationFillStyle() { m_lStatusCode = SUCCESS; return m_nAnnotationFillStyle; } void CImgEditCtrl::SetAnnotationFillStyle(short nNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; if (m_nAnnotationFillStyle != nNewValue) { // Check to see if the nNewValue is a valid value if ( nNewValue < OI_TRANSPARENT || nNewValue > OI_OPAQUE ) { szErr.LoadString(IDS_BADPROP_ANNOFILLSTYLE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode,szErr,IDH_PROP_EDIT_ANNOTATIONFILLSTYLE); return; } m_nAnnotationFillStyle = nNewValue; SetModifiedFlag(TRUE); } } LPFONTDISP CImgEditCtrl::GetAnnotationFont() { m_lStatusCode = SUCCESS; return m_AnnotationFont.GetFontDispatch(); } void CImgEditCtrl::SetAnnotationFont(LPFONTDISP newValue) { //9604.29 jar added init m_lStatusCode = 0L; m_AnnotationFont.InitializeFont(&_fontdescHeading, newValue); SetModifiedFlag(TRUE); } BSTR CImgEditCtrl::GetAnnotationImage() { m_lStatusCode = SUCCESS; return m_strAnnotationImage.AllocSysString(); } void CImgEditCtrl::SetAnnotationImage(LPCTSTR lpszNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; // Error out if NULL ptr passed if (lpszNewValue == NULL ) { szErr.LoadString(IDS_BADPROP_ANNOTATIONIMAGE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONSTAMPTEXT); return; } // Verify that the input parm does not exceed CONTROLSIZE max == 50 if (_mbstrlen((const char *)lpszNewValue) > OIAN_START_OP_STRING_LENGTH) { //Parm too big szErr.LoadString(IDS_BADVAR_PARMEXCEEDSMAX); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONSTAMPTEXT); return; } // Validation complete, check if value to be assigned is diff from current value if (m_strAnnotationImage != lpszNewValue) { m_strAnnotationImage = lpszNewValue; SetModifiedFlag(TRUE); } } OLE_COLOR CImgEditCtrl::GetAnnotationLineColor() { m_lStatusCode = SUCCESS; return m_clrAnnotationLineColor; } void CImgEditCtrl::SetAnnotationLineColor(OLE_COLOR newValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_clrAnnotationLineColor != newValue) { m_clrAnnotationLineColor = newValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetAnnotationLineStyle() { m_lStatusCode = SUCCESS; return m_nAnnotationLineStyle; } void CImgEditCtrl::SetAnnotationLineStyle(short nNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; if (m_nAnnotationLineStyle != nNewValue) { // Check to see if the nNewValue is a valid value if ( nNewValue < OI_TRANSPARENT || nNewValue > OI_OPAQUE ) { szErr.LoadString(IDS_BADPROP_ANNOLINESTYLE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode,szErr,IDH_PROP_EDIT_ANNOTATIONLINESTYLE); return; } m_nAnnotationLineStyle = nNewValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetAnnotationLineWidth() { m_lStatusCode = SUCCESS; return m_nAnnotationLineWidth; } void CImgEditCtrl::SetAnnotationLineWidth(short nNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; // Validate the assigned value. Range is 1 to 999 if ( nNewValue < 1 || nNewValue > 999 ) { szErr.LoadString(IDS_BADPROP_ANNOLINEWIDTH); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_ANNO_ANNOTATIONLINEWIDTH); return; } if (m_nAnnotationLineWidth != nNewValue) { m_nAnnotationLineWidth = nNewValue; SetModifiedFlag(TRUE); } } BSTR CImgEditCtrl::GetAnnotationStampText() { m_lStatusCode = SUCCESS; return m_strAnnotationStampText.AllocSysString(); } void CImgEditCtrl::SetAnnotationStampText(LPCTSTR lpszNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; // No NULL PTR values accepted and No empty of Null string values if (lpszNewValue == NULL) { szErr.LoadString(IDS_BADPROP_STAMPANNOTATIONTEXT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONSTAMPTEXT); return; } // the length can not exceed OIAN_START_OP_STRING_LENGTH // Verify that the input parm does not exceed > OIAN_START_OP_STRING_LENGTH == 256 if ( _mbstrlen((const char *)lpszNewValue) > OIAN_START_OP_STRING_LENGTH) { //Parm too big szErr.LoadString(IDS_BADVAR_PARMEXCEEDSMAX); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONSTAMPTEXT); return; } if (m_strAnnotationStampText != lpszNewValue) { m_strAnnotationStampText = lpszNewValue; SetModifiedFlag(TRUE); } } BSTR CImgEditCtrl::GetAnnotationTextFile() { m_lStatusCode = SUCCESS; return m_strAnnotationTextFile.AllocSysString(); } void CImgEditCtrl::SetAnnotationTextFile(LPCTSTR lpszNewValue) { CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; // No NULL PTR values accepted if (lpszNewValue == NULL) { szErr.LoadString(IDS_BADPROP_ANNOTATIONTEXTFILE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONTEXTFILE); return; } // the length can not exceed OIAN_START_OP_STRING_LENGTH // Verify that the input parm does not exceed > OIAN_START_OP_STRING_LENGTH == 256 if ( _mbstrlen((const char *)lpszNewValue) > OIAN_START_OP_STRING_LENGTH) { //Parm too big szErr.LoadString(IDS_BADVAR_PARMEXCEEDSMAX); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_ANNOTATIONTEXTFILE); return; } if (m_strAnnotationTextFile != lpszNewValue) { m_strAnnotationTextFile = lpszNewValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetDisplayScaleAlgorithm() { m_lStatusCode = (long)SUCCESS; return m_nDisplayScaleAlgorithm; } void CImgEditCtrl::SetDisplayScaleAlgorithm(short nNewValue) { int RetCode; PARM_SCALE_ALGORITHM_STRUCT ScaleAlg; UINT ImageType; CString szErr; UINT HelpIdDef; //9604.29 jar added init m_lStatusCode = 0L; if (nNewValue < 0 || nNewValue > OPTIMIZE) { szErr.LoadString(IDS_BADPROP_DISPLAYSCALE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr,IDH_PROP_EDIT_DISPLAYSCALEALGORITHM); return; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_nDisplayScaleAlgorithm != nNewValue) { m_nDisplayScaleAlgorithm = nNewValue; SetModifiedFlag(TRUE); } if (m_bImageInWindow == TRUE && m_bAutoRefresh == TRUE) { // get the current image type RetCode = IMGGetParmsCgbw(m_hWnd, PARM_IMAGE_TYPE, &ImageType, NULL); if (RetCode) { szErr.LoadString(IDS_BADPROP_OPTIMIZESCALE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( RetCode, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } // set what user wants to o/i scale algorithm values switch(nNewValue) { case NORMAL: ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_NORMAL; break; case GRAY4: ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_AVERAGE_TO_GRAY4; break; case GRAY8: ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_AVERAGE_TO_GRAY8; break; case STAMP: ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_STAMP; break; case OPTIMIZE: if (ImageType == ITYPE_BI_LEVEL || ImageType == ITYPE_GRAY4 || ImageType == ITYPE_GRAY8) ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_AVERAGE_TO_GRAY4; else ScaleAlg.uScaleAlgorithm = OI_SCALE_ALG_NORMAL; break; } // end switch // if my stored o/i setting for each image tpye are the same as the current image type then we // don't do anything, else set new o/i defaults and store in my settings. Then call o/i. RetCode = 0; switch(ImageType) { case ITYPE_BI_LEVEL: if (m_uBiLevelScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_BI_LEVEL; m_uBiLevelScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_GRAY4: if (m_uGray4ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_GRAY4; m_uGray4ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_GRAY8: if (m_uGray8ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_GRAY8; m_uGray8ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_PAL4: if (m_uPal4ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_PAL4; m_uPal4ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_PAL8: if (m_uPal8ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_PAL8; m_uPal8ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_RGB24: if (m_uRGB24ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_RGB24; m_uRGB24ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; case ITYPE_BGR24: if (m_uBGR24ScaleAlg != ScaleAlg.uScaleAlgorithm) { ScaleAlg.uImageFlags = ITYPE_BGR24; m_uBGR24ScaleAlg = ScaleAlg.uScaleAlgorithm; RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCALE_ALGORITHM, &ScaleAlg, PARM_WINDOW_DEFAULT | PARM_REPAINT); } break; } // end switch if (RetCode) { szErr.LoadString(IDS_BADPROP_OPTIMIZESCALE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate( RetCode, szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } return; } // save value and let refresh method change scale algorithm m_bDisplayScaleAlgChange = TRUE; } BOOL CImgEditCtrl::GetImageDisplayed() { m_lStatusCode = SUCCESS; m_bImageInWindow = ImageInWindow(); return m_bImageInWindow; } OLE_YSIZE_PIXELS CImgEditCtrl::GetImageHeight() { int RetCode; PARM_DIM_STRUCT ParmDimensions; FIO_INFORMATION FileInfo; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get height in design mode because 1st time the image // property will not be set and therefore an error would be returned return (OLE_YSIZE_PIXELS)0; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { // get height from display RetCode = IMGGetParmsCgbw(m_hWnd, PARM_DIMENSIONS, &ParmDimensions, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETIMAGEHEIGHT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return (OLE_YSIZE_PIXELS)0; } m_lStatusCode = SUCCESS; return (OLE_YSIZE_PIXELS)ParmDimensions.nHeight; } else { // get height from file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT) m_lPage; // RetCode = IMGFileInfoCgbw(m_hWnd, &FileInfo, NULL); RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETIMAGEHEIGHT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return (OLE_YSIZE_PIXELS)0; } m_lStatusCode = SUCCESS; return (OLE_YSIZE_PIXELS)FileInfo.vertical_pixels; } } BOOL CImgEditCtrl::GetImageModified() { BOOL RunMode,ImageModified; int RetCode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) return FALSE; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) return FALSE; // return FALSE in design time RetCode = IMGGetParmsCgbw(m_hWnd, PARM_ARCHIVE, (void FAR *)&ImageModified, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETIMAGEMODIFIED); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return FALSE; } m_lStatusCode = SUCCESS; return ImageModified; } short CImgEditCtrl::GetImagePalette() { m_lStatusCode = SUCCESS; return m_nImagePalette; } void CImgEditCtrl::SetImagePalette(short nNewValue) { WORD wFlags; int RetCode; UINT ImagePalette; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; if (nNewValue < 0 || nNewValue > BLACK_AND_WHITE_PALETTE) { szErr.LoadString(IDS_BADPROP_IMAGEPALETTE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGEPALETTE); return; } if (nNewValue != m_nImagePalette) { if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); m_nImagePalette = nNewValue; SetModifiedFlag(TRUE); if (m_bImageInWindow == TRUE && m_bAutoRefresh == TRUE) wFlags = PARM_WINDOW_DEFAULT | PARM_REPAINT | PARM_IMAGE; else { m_bImagePaletteChange = TRUE; wFlags = PARM_WINDOW_DEFAULT; } switch(nNewValue) { case CUSTOM_PALETTE: ImagePalette = DISP_PALETTE_CUSTOM; break; case COMMON_PALETTE: ImagePalette = DISP_PALETTE_COMMON; break; case GRAY8_PALETTE: ImagePalette = DISP_PALETTE_GRAY8; break; case RGB24_PALETTE: ImagePalette = DISP_PALETTE_RGB24; break; case BLACK_AND_WHITE_PALETTE: ImagePalette = DISP_PALETTE_BW; break; } // end switch // give O/i the palette settings RetCode = IMGSetParmsCgbw(m_hWnd, PARM_DISPLAY_PALETTE, &ImagePalette, wFlags); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_SETIMAGEPALETTE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef ); return; } } m_lStatusCode = SUCCESS; } long CImgEditCtrl::GetImageResolutionX() { int RetCode; PARM_RESOLUTION_STRUCT ParmResStruct; FIO_INFORMATION FileInfo; long XResolution; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get resolution in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0L; } m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) { // get resolution from the file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT) m_lPage; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETHORZRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } XResolution = FileInfo.horizontal_dpi; } else { // get resolution from display RetCode = IMGGetParmsCgbw(m_hWnd, PARM_RESOLUTION, &ParmResStruct, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETHORZRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } XResolution = ParmResStruct.nHResolution; } m_lStatusCode = SUCCESS; return XResolution; } void CImgEditCtrl::SetImageResolutionX(long nNewValue) { WORD wFlags; int RetCode; CONV_RESOLUTION_STRUCT ConvResolutionStruct; long XResolution; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { szErr.LoadString(IDS_BADPROP_SETHORZRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_SETNOTSUPPORTEDATDESIGNTIME,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGERESOLUTIONX); return; } m_lStatusCode = SUCCESS; XResolution = GetImageResolutionX(); if (m_lStatusCode != 0) return; // error set in GetImageResolution if (XResolution != nNewValue) { if (m_bAutoRefresh == TRUE) { wFlags = PARM_REPAINT; ConvResolutionStruct.uHRes = (UINT)nNewValue; ConvResolutionStruct.uVRes = (UINT)GetImageResolutionY(); ConvResolutionStruct.uScaleAlgorithm = OI_SCALE_ALG_NORMAL; // use normal decimation RetCode = IMGConvertImage(m_hWnd, CONV_RESOLUTION, (void far *)&ConvResolutionStruct, wFlags); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_SETHORZRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } SetModifiedFlag(TRUE); } else { // save value so the refresh method can use it later m_bImageResolutionChange = TRUE; m_lImageResolutionX = nNewValue; } } m_lStatusCode = SUCCESS; } long CImgEditCtrl::GetImageResolutionY() { int RetCode; PARM_RESOLUTION_STRUCT ParmResStruct; FIO_INFORMATION FileInfo; long YResolution; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get resolution in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0L; } m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) { // get resolution from the file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT) m_lPage; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETVERTRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } YResolution = FileInfo.vertical_dpi; } else { // get resolution from display RetCode = IMGGetParmsCgbw(m_hWnd, PARM_RESOLUTION, &ParmResStruct, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETVERTRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } YResolution = ParmResStruct.nVResolution; } m_lStatusCode = SUCCESS; return YResolution; } void CImgEditCtrl::SetImageResolutionY(long nNewValue) { WORD wFlags; int RetCode; CONV_RESOLUTION_STRUCT ConvResolutionStruct; long YResolution; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't change resolution in design mode because image isn't displayed szErr.LoadString(IDS_BADPROP_SETVERTRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_SETNOTSUPPORTEDATDESIGNTIME,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_IMAGERESOLUTIONY); return; } m_lStatusCode = SUCCESS; YResolution = GetImageResolutionY(); if (m_lStatusCode != 0) return; // error set in GetImageResolution if (YResolution != nNewValue) { if (m_bAutoRefresh == TRUE) { wFlags = PARM_REPAINT; ConvResolutionStruct.uHRes = (UINT)GetImageResolutionX(); ConvResolutionStruct.uVRes = (UINT)nNewValue; ConvResolutionStruct.uScaleAlgorithm = OI_SCALE_ALG_NORMAL; // use normal decimation RetCode = IMGConvertImage(m_hWnd, CONV_RESOLUTION, (void far *)&ConvResolutionStruct, wFlags); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_SETVERTRES); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } SetModifiedFlag(TRUE); } else { // save value so the refresh method can use it m_lImageResolutionY = nNewValue; m_bImageResolutionChange = TRUE; } } m_lStatusCode = SUCCESS; } OLE_XSIZE_PIXELS CImgEditCtrl::GetImageWidth() { int RetCode; PARM_DIM_STRUCT ParmDimensions; FIO_INFORMATION FileInfo; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get resolution in design mode because 1st time the image // property will not be set and therefore an error would be returned return (OLE_XSIZE_PIXELS)0; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { // get width from display RetCode = IMGGetParmsCgbw(m_hWnd, PARM_DIMENSIONS, &ParmDimensions, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETIMAGEWIDTH); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return (OLE_XSIZE_PIXELS)0; } m_lStatusCode = SUCCESS; return (OLE_XSIZE_PIXELS)ParmDimensions.nWidth; } else { // get width from file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT) m_lPage; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETIMAGEWIDTH); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return (OLE_XSIZE_PIXELS)0; } m_lStatusCode = SUCCESS; return (OLE_XSIZE_PIXELS)FileInfo.horizontal_pixels; } } short CImgEditCtrl::GetMousePointer() { m_lStatusCode = SUCCESS; return m_nMousePointer; } void CImgEditCtrl::SetMousePointer(short nNewValue) { HCURSOR hCursor = NULL; HINSTANCE hInst = NULL; LPCSTR lpMousePointer=NULL; SHORT PictureType; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; if (!((nNewValue >= DEFAULT_MOUSEPOINTER && nNewValue <= IMAGE_SELECTION_MOUSEPOINTER) || (nNewValue == CUSTOM_MOUSEPOINTER))) { szErr.LoadString(IDS_BADPROP_SETMOUSEPTR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr, HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_MOUSEPOINTER ); return; } // set cursor if value changed or using default if (m_nMousePointer == DEFAULT_MOUSEPOINTER || m_nMousePointer != nNewValue) { m_nMousePointer = nNewValue; SetModifiedFlag(TRUE); if (nNewValue >= ARROW_MOUSEPOINTER && nNewValue <= SIZE_ALL_MOUSEPOINTER) { // standard window cursor switch(nNewValue) { case ARROW_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_ARROW); break; case CROSS_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_CROSS); break; case IBEAM_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_IBEAM); break; case ICON_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_ICON); break; case SIZE_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZEALL); break; case SIZE_NESW_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZENESW); break; case SIZE_NS_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZENS); break; case SIZE_NWSE_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZENWSE); break; case SIZE_WE_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZEWE); break; case UP_ARROW_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_UPARROW); break; case HOURGLASS_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_WAIT); break; case NO_DROP_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_NO); break; case ARROW_HOURGLASS_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_APPSTARTING); break; case ARROW_QUESTION_MOUSEPOINTER: // Special case as this is an AFX cursor... // (Copied from MFC source!) hInst = AfxFindResourceHandle(MAKEINTRESOURCE(AFX_IDC_CONTEXTHELP), RT_GROUP_CURSOR); hCursor = LoadCursor(hInst, MAKEINTRESOURCE(AFX_IDC_CONTEXTHELP)); break; case SIZE_ALL_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_SIZEALL); break; default: lpMousePointer = MAKEINTRESOURCE(IDC_ARROW); break; } // end switch // get rid of any custom cursors if (m_hCursor != NULL) { DestroyCursor(m_hCursor); m_hCursor = NULL; } // The Handle for the ARROW_QUESTION_MOUSEPOINTER cursor will already be set.But // for all other standard Cursor types the value will be NULL. if ( hCursor == NULL ) { // load standard cursors hCursor = LoadCursor(NULL, lpMousePointer); } SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); // 25jun96 paj From thumbnail>>>jar save cursor m_LittleOldCursor = hCursor; m_lStatusCode = SUCCESS; return; } if (nNewValue == CUSTOM_MOUSEPOINTER) { // get cursor from MouseIcon property PictureType = m_MouseIcon.GetType(); if (PictureType == PICTYPE_NONE || PictureType == PICTYPE_UNINITIALIZED) { // No Mouse Icon has been set szErr.LoadString(IDS_BADPROP_NOMOUSEICON); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_MOUSEICON); return; } // get cursor handle m_MouseIcon.m_pPict->get_Handle((OLE_HANDLE FAR *)&hCursor); if (hCursor == NULL) { // couldn't get cursor handle // RJS - ELIMINATE ERROR and CHANGE TO DEFAULT ???! SDW szErr.LoadString(IDS_BADPROP_SETMOUSEPTR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr,IDH_PROP_EDIT_MOUSEPOINTER); return; } // if an existing cursor, delete it if (m_hCursor != NULL) DestroyCursor(m_hCursor); // set the new cursor m_hCursor = hCursor; SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_hCursor); // 25jun96 paj From thumbnail>>>jar save cursor m_LittleOldCursor = m_hCursor; m_lStatusCode = SUCCESS; return; } // default mouse pointer that maps to the AnnotationType property // this is one of my standard cursors from my resouce file, except for // straight line which is the same as the cross // get rid of any custom cursors if (m_hCursor != NULL) { DestroyCursor(m_hCursor); m_hCursor = NULL; } if (m_nMousePointer == DEFAULT_MOUSEPOINTER) { switch(m_nAnnotationType) { case STRAIGHT_LINE: lpMousePointer = MAKEINTRESOURCE(IDC_CROSS); // load standard cursors hCursor = LoadCursor(NULL, lpMousePointer); break; case FREEHAND_LINE: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FREEHAND_LINE_CURSOR)); m_hCursor = hCursor; break; case HOLLOW_RECT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(HOLLOW_RECT_CURSOR)); m_hCursor = hCursor; break; case FILLED_RECT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FILLED_RECT_CURSOR)); m_hCursor = hCursor; break; case IMAGE_EMBEDDED: case IMAGE_REFERENCE: case TEXT_STAMP: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(RUBBER_STAMP_CURSOR)); m_hCursor = hCursor; break; case TEXT_ENTRY: lpMousePointer = MAKEINTRESOURCE(IDC_IBEAM); // load standard cursors hCursor = LoadCursor(NULL, lpMousePointer); break; case TEXT_FROM_FILE: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_FROM_FILE_CURSOR)); m_hCursor = hCursor; break; case TEXT_ATTACHMENT: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_ATTACHMENT_CURSOR)); m_hCursor = hCursor; break; case NO_ANNOTATION: case ANNOTATION_SELECTION: lpMousePointer = MAKEINTRESOURCE(IDC_ARROW); // load standard cursors hCursor = LoadCursor(NULL, lpMousePointer); break; default: break; } // end switch } else { // one of my annotation or hand cursors that the user wants switch(m_nMousePointer) { case FREEHAND_LINE_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FREEHAND_LINE_CURSOR)); m_hCursor = hCursor; break; case HOLLOW_RECT_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(HOLLOW_RECT_CURSOR)); m_hCursor = hCursor; break; case FILLED_RECT_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(FILLED_RECT_CURSOR)); m_hCursor = hCursor; break; case RUBBER_STAMP_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(RUBBER_STAMP_CURSOR)); m_hCursor = hCursor; break; case TEXT_MOUSEPOINTER: lpMousePointer = MAKEINTRESOURCE(IDC_IBEAM); // load standard cursors hCursor = LoadCursor(NULL, lpMousePointer); break; case TEXT_FROM_FILE_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_FROM_FILE_CURSOR)); m_hCursor = hCursor; break; case TEXT_ATTACHMENT_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(TEXT_ATTACHMENT_CURSOR)); m_hCursor = hCursor; break; case HAND_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(HAND_CURSOR)); m_hCursor = hCursor; break; case IMAGE_SELECTION_MOUSEPOINTER: hCursor = LoadCursor(AfxGetInstanceHandle() ,MAKEINTRESOURCE(IMAGE_SELECTION_CURSOR)); m_hCursor = hCursor; break; } // end switch } if (hCursor == NULL) { // couldn't get cursor handle // RJS - ELIMINATE ERROR and CHANGE TO DEFAULT ???! SDW szErr.LoadString(IDS_BADPROP_SETMOUSEPTR); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr,IDH_PROP_EDIT_MOUSEPOINTER); return; } // set new cursor SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)hCursor); // 25jun96 paj From thumbnail>>>jar save cursor m_LittleOldCursor = hCursor; m_lStatusCode = SUCCESS; return; } else m_lStatusCode = SUCCESS; } long CImgEditCtrl::GetPageCount() { int RetCode; FIO_INFORMATION FileInfo; PARM_FILE_STRUCT ParmFileStruct; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get page count in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0L; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { RetCode = IMGGetParmsCgbw(m_hWnd, PARM_FILE, &ParmFileStruct, NULL); if (RetCode == 0) { m_lStatusCode = SUCCESS; return(ParmFileStruct.nFileTotalPages); } else { szErr.LoadString(IDS_BADPROP_GETPAGECOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } } else { // if no image then error if (m_strImage.GetBuffer(MAXFILESPECLENGTH) == NULL) { szErr.LoadString(IDS_BADPROP_GETPAGECOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_FILENOTFOUND,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_PAGECOUNT); return 0; } else { FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = 1; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETPAGECOUNT); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } else { m_lStatusCode = SUCCESS; return(FileInfo.page_count); } } } // no image in window } BOOL CImgEditCtrl::GetScrollBars() { m_lStatusCode = SUCCESS; return m_bScrollBars; } void CImgEditCtrl::SetScrollBars(BOOL bNewValue) { int RetCode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; if (m_bScrollBars != bNewValue) { if (!m_bImageInWindow) m_bImageInWindow = ImageInWindow(); m_bScrollBars = bNewValue; SetModifiedFlag(TRUE); if (m_bImageInWindow && m_bAutoRefresh) { if (m_bScrollBars) { RetCode = IMGEnableScrollBar(m_hWnd); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_ENABLESCROLLBARS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } } else { RetCode = IMGDisableScrollBar(m_hWnd); if (RetCode) { szErr.LoadString(IDS_BADPROP_DISABLESCROLLBARS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } } } else m_bScrollBarsChange = TRUE; } m_lStatusCode = SUCCESS; } OLE_XPOS_PIXELS CImgEditCtrl::GetScrollPositionX() { int RetCode; PARM_SCROLL_STRUCT Scroll; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get scroll position in design mode return (OLE_XPOS_PIXELS)0; } if (!m_bImageInWindow) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow) { RetCode = IMGGetParmsCgbw(m_hWnd, PARM_SCROLL, &Scroll, PARM_PIXEL | PARM_ABSOLUTE | PARM_SCALED); if (RetCode) { szErr.LoadString(IDS_BADPROP_GETHORZSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } m_lStatusCode = SUCCESS; return(OLE_XPOS_PIXELS)Scroll.lHorz; } else { szErr.LoadString(IDS_BADPROP_GETHORZSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_NOIMAGEINWINDOW,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONX); return (OLE_XPOS_PIXELS)0; } } void CImgEditCtrl::SetScrollPositionX(OLE_XPOS_PIXELS newValue) { int RetCode; WORD wFlags; PARM_SCROLL_STRUCT Scroll; BOOL RunMode; OLE_XPOS_PIXELS CurPositionX; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't set scroll position in design mode szErr.LoadString(IDS_BADPROP_SETHORZSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_SETNOTSUPPORTEDATDESIGNTIME,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONX); return; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) { szErr.LoadString(IDS_BADPROP_SETHORZSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_NOIMAGEINWINDOW,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONX); return; } CurPositionX = GetScrollPositionX(); if (CurPositionX != newValue) { if (m_bAutoRefresh == TRUE) { Scroll.lHorz = newValue; Scroll.lVert = GetScrollPositionY(); wFlags = PARM_PIXEL | PARM_ABSOLUTE | PARM_SCALED | PARM_REPAINT; // move to new position in image RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCROLL, (void FAR *)&Scroll, wFlags); if (RetCode) { szErr.LoadString(IDS_BADPROP_SETHORZSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } } else { m_bScrollPositionChange = TRUE; } m_ScrollPositionX = newValue; // save for refresh method SetModifiedFlag(TRUE); } m_lStatusCode = SUCCESS; } OLE_YPOS_PIXELS CImgEditCtrl::GetScrollPositionY() { int RetCode; PARM_SCROLL_STRUCT Scroll; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get scroll position in design mode return (OLE_YPOS_PIXELS)0; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { RetCode = IMGGetParmsCgbw(m_hWnd, PARM_SCROLL, &Scroll, PARM_PIXEL | PARM_ABSOLUTE | PARM_SCALED); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETVERTSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } m_lStatusCode = SUCCESS; return(OLE_YPOS_PIXELS)Scroll.lVert; } else { szErr.LoadString(IDS_BADPROP_GETVERTSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_NOIMAGEINWINDOW,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONY); return (OLE_XPOS_PIXELS)0; } } void CImgEditCtrl::SetScrollPositionY(OLE_YPOS_PIXELS newValue) { int RetCode; WORD wFlags; PARM_SCROLL_STRUCT Scroll; BOOL RunMode; OLE_YPOS_PIXELS CurPositionY; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't set scroll position in design mode szErr.LoadString(IDS_BADPROP_SETVERTSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_SETNOTSUPPORTEDATDESIGNTIME,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONY); return; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == FALSE) { szErr.LoadString(IDS_BADPROP_SETVERTSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(WICTL_E_NOIMAGEINWINDOW,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_SCROLLPOSITIONY); return; } // Get the current Vertical Scroll coordinates CurPositionY = GetScrollPositionY(); // If different & AutoRefresh == TRUE repaint image display if (CurPositionY != newValue) { if (m_bAutoRefresh == TRUE) { Scroll.lHorz = GetScrollPositionX(); Scroll.lVert = newValue; wFlags = PARM_PIXEL | PARM_ABSOLUTE | PARM_SCALED | PARM_REPAINT; // move to new position in image RetCode = IMGSetParmsCgbw(m_hWnd, PARM_SCROLL, (void FAR *)&Scroll, wFlags); if (RetCode) { szErr.LoadString(IDS_BADPROP_SETVERTSCROLLPOS); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } } else { m_bScrollPositionChange = TRUE; } m_ScrollPositionY = newValue; SetModifiedFlag(TRUE); } m_lStatusCode = SUCCESS; } OLE_COLOR CImgEditCtrl::GetAnnotationFontColor() { m_lStatusCode = SUCCESS; return m_clrAnnotationFontColor; } void CImgEditCtrl::SetAnnotationFontColor(OLE_COLOR newValue) { //9603.14 jar added init m_lStatusCode = 0L; if (m_clrAnnotationFontColor != newValue) { m_clrAnnotationFontColor = newValue; SetModifiedFlag(TRUE); } m_lStatusCode = SUCCESS; } short CImgEditCtrl::GetCompressionType() { int RetCode; FIO_INFORMATION FileInfo; FIO_INFO_CGBW FileInfoCgbw; short CompressionType; BOOL RunMode; CString szErr; UINT HelpIdDef; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get compression type in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0; } FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT)m_lPage; FileInfoCgbw.lppalette_table = NULL; FileInfoCgbw.palette_entries = 0; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, &FileInfoCgbw, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETCOMPRESSTYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // map O/i compression types to our compression types switch(FileInfoCgbw.compress_type) { case FIO_0D: CompressionType = NO_COMPRESSION; break; case FIO_1D: if (FileInfoCgbw.compress_info1 & (FIO_PREFIXED_EOL | FIO_EOL)) CompressionType = GROUP3_1D_FAX; else CompressionType = GROUP3_MODIFIED_HUFFMAN; break; case FIO_2D: CompressionType = GROUP4_2D; break; case FIO_PACKED: CompressionType = PACKED_BITS; break; case FIO_TJPEG: CompressionType = JPEG_COMPRESSION; break; // 9602.22 jar adding new types for reading only case FIO_LZW: CompressionType = LZW; break; case FIO_1D2D: CompressionType = GROUP3_2D_FAX; break; default: CompressionType = UNKNOWN; // unknown for now, might be error later break; // m_lStatusCode = (long)1000; // unknown compression type, return error // ThrowError(m_lStatusCode, "", 0); // return 0; } // end switch m_lStatusCode = SUCCESS; return CompressionType; } //*************************************************************************** // // GetFileType // //*************************************************************************** short CImgEditCtrl::GetFileType() { int RetCode; FIO_INFORMATION FileInfo; short FileType; BOOL RunMode; CString szErr; UINT HelpIdDef; PARM_FILE_STRUCT ParmFile; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get file type in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0; } if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { // get the name of the displayed file and compare it with image property. If the names // are the same then get the file type from display buffer and not from file. RetCode = IMGGetParmsCgbw(m_hWnd, PARM_FILE, &ParmFile, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETFILETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // set if property and display are the same if (_mbscmp((const unsigned char *)m_strImage.GetBuffer(MAXFILESPECLENGTH), (const unsigned char *)ParmFile.szFileName) == 0) { // the same file, return file type from display buffer switch(ParmFile.nFileType) { case FIO_TIF: FileType = TIFF; break; case FIO_AWD: FileType = AWD; break; case FIO_BMP: FileType = BMP; break; case FIO_PCX: FileType = PCX; break; case FIO_DCX: FileType = DCX; break; case FIO_JPG: FileType = JPEG; break; // 9602.26 jar added XIF //#ifdef WITH_XIF case FIO_XIF: FileType = XIF; break; //#endif //WITH_XIF default: FileType = 0; // Unknown - should this be an error break; } // end switch m_lStatusCode = SUCCESS; return FileType; } } // get file type from file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = 1; // all pages have same file type so default to page 1 RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, NULL, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETFILETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // return to user our file type define switch(FileInfo.file_type) { case FIO_TIF: FileType = TIFF; break; case FIO_AWD: FileType = AWD; break; case FIO_BMP: FileType = BMP; break; case FIO_PCX: FileType = PCX; break; case FIO_DCX: FileType = DCX; break; case FIO_JPG: FileType = JPEG; break; // 9602.26 jar added XIF //#ifdef WITH_XIF case FIO_XIF: FileType = XIF; break; //#endif //WITH_XIF default: FileType = 0; // Unknown - should this be an error break; } // end switch m_lStatusCode = SUCCESS; return FileType; } BOOL CImgEditCtrl::GetScrollShortcutsEnabled() { m_lStatusCode = SUCCESS; return m_bScrollShortcutsEnabled; } void CImgEditCtrl::SetScrollShortcutsEnabled(BOOL bNewValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_bScrollShortcutsEnabled != bNewValue) { m_bScrollShortcutsEnabled = bNewValue; SetModifiedFlag(TRUE); } } BOOL CImgEditCtrl::GetSelectionRectangle() { m_lStatusCode = SUCCESS; return m_bSelectionRectEnabled; } void CImgEditCtrl::SetSelectionRectangle(BOOL bNewValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_bSelectionRectEnabled != bNewValue) { m_bSelectionRectEnabled = bNewValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetPageType() { BOOL RunMode; int RetCode; PARM_FILE_STRUCT ParmFile; FIO_INFORMATION FileInfo; FIO_INFO_CGBW FileInfoCgbw; UINT ImageType,HelpIdDef; CString szErr; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) return 0; // return 0 in design time // if name and page the same then get image type from display if (m_bImageInWindow == FALSE) m_bImageInWindow = ImageInWindow(); if (m_bImageInWindow == TRUE) { // get the name and page of current image RetCode = IMGGetParmsCgbw(m_hWnd, PARM_FILE, &ParmFile, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETPAGETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } if (_mbscmp((const unsigned char *)m_strImage.GetBuffer(MAXFILESPECLENGTH), (const unsigned char *)ParmFile.szFileName) == 0) { // get image type from display RetCode = IMGGetParmsCgbw(m_hWnd, PARM_IMAGE_TYPE, &ImageType, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETPAGETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } } else { // get image type from file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT)m_lPage; FileInfoCgbw.lppalette_table = NULL; FileInfoCgbw.palette_entries = 0; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, &FileInfoCgbw, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETPAGETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } ImageType = FileInfoCgbw.image_type; } } else { // get image type from file FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT)m_lPage; FileInfoCgbw.lppalette_table = NULL; FileInfoCgbw.palette_entries = 0; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, &FileInfoCgbw, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETPAGETYPE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } ImageType = FileInfoCgbw.image_type; } // give back image type to user switch(ImageType) { case ITYPE_BI_LEVEL: ImageType = BLACK_AND_WHITE; break; case ITYPE_PAL4: ImageType = PAL_4; break; case ITYPE_PAL8: ImageType = PAL_8; break; case ITYPE_GRAY4: ImageType = GRAY_4; break; case ITYPE_GRAY8: ImageType = GRAY_8; break; case ITYPE_RGB24: ImageType = RGB_24; break; case ITYPE_BGR24: ImageType = BGR_24; break; default: break; } // end switch m_lStatusCode = SUCCESS; return (short)ImageType; } long CImgEditCtrl::GetCompressionInfo() { int RetCode; FIO_INFORMATION FileInfo; FIO_INFO_CGBW FileInfoCgbw; long CompressionInfo; UINT HelpIdDef; BOOL RunMode; CString szErr; //9603.14 jar added init m_lStatusCode = 0L; // find out if design mode or run mode RunMode = AmbientUserMode(); if (RunMode == FALSE) { // can't get compression info in design mode because 1st time the image // property will not be set and therefore an error would be returned return 0L; } FileInfo.filename = m_strImage.GetBuffer(MAXFILESPECLENGTH); FileInfo.page_number = (UINT)m_lPage; FileInfoCgbw.lppalette_table = NULL; FileInfoCgbw.palette_entries = 0; RetCode = IMGFileGetInfo(NULL, m_hWnd, &FileInfo, &FileInfoCgbw, NULL); if (RetCode != 0) { szErr.LoadString(IDS_BADPROP_GETCOMPRESSINFO); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(RetCode,szErr,HelpIdDef,__FILE__, __LINE__ ); ThrowError(m_lStatusCode, szErr, HelpIdDef); return 0; } // map O/i compression info to our bit-wise compression info CompressionInfo = 0; // initialize to no compression // if jpeg compression type then only check for jpeg compression bits if (FileInfoCgbw.compress_type == FIO_TJPEG) { UINT JpegCompressResolution,JpegCompression,JpegQuality; // compress_info1 is a 16 bit field // bits 14 and 15 are compression/resolution bits // bits 7 - 13 are quality bits - value between 2 and 100 // bits 0 - 6 are unused JpegCompressResolution = FileInfoCgbw.compress_info1 & 0xc000; // get compression/resolution if (JpegCompressResolution == 0) JpegCompression = HI_COMPRESSION; else if (JpegCompressResolution == 0x4000) JpegCompression = MEDIUM_COMPRESSION; else JpegCompression = LOW_COMPRESSION; /* get image quality value */ JpegQuality = FileInfoCgbw.compress_info1; JpegQuality &= 0x3f80; JpegQuality = (JpegQuality >> 7); // JpegQuality now contains value between 2 and 100, now map to our settings if (JpegQuality > JPEG_MED_QUALITY) { if (JpegCompression == HI_COMPRESSION) CompressionInfo = HI_COMPRESSION_HI_QUALITY; else if (JpegCompression == MEDIUM_COMPRESSION) CompressionInfo = MED_COMPRESSION_HI_QUALITY; else CompressionInfo = LOW_COMPRESSION_HI_QUALITY; } else if (JpegQuality > JPEG_LOW_QUALITY) { if (JpegCompression == HI_COMPRESSION) CompressionInfo = HI_COMPRESSION_MED_QUALITY; else if (JpegCompression == MEDIUM_COMPRESSION) CompressionInfo = MED_COMPRESSION_MED_QUALITY; else CompressionInfo = LOW_COMPRESSION_MED_QUALITY; } else { if (JpegCompression == HI_COMPRESSION) CompressionInfo = HI_COMPRESSION_LOW_QUALITY; else if (JpegCompression == MEDIUM_COMPRESSION) CompressionInfo = MED_COMPRESSION_LOW_QUALITY; else CompressionInfo = LOW_COMPRESSION_LOW_QUALITY; } } else { // set all other non-jpeg compression bits as necessary if (FileInfoCgbw.compress_info1 & FIO_EOL) CompressionInfo |= EOL; if (FileInfoCgbw.compress_info1 & FIO_PACKED_LINES) CompressionInfo |= PACKED_LINES; if (FileInfoCgbw.compress_info1 & FIO_PREFIXED_EOL) CompressionInfo |= PREFIXED_EOL; if (FileInfoCgbw.compress_info1 & FIO_COMPRESSED_LTR) CompressionInfo |= COMPRESSED_LTR; if (FileInfoCgbw.compress_info1 & FIO_EXPAND_LTR) CompressionInfo |= EXPAND_LTR; // Do not report the Negate Bit as being on since all OPEN/image files will // report this bit as being on, even if the user did not explicitly request this option // to be included. // if (FileInfoCgbw.compress_info1 & FIO_NEGATE) // CompressionInfo |= NEGATE; } m_lStatusCode = SUCCESS; return CompressionInfo; } long CImgEditCtrl::GetStatusCode() { return m_lStatusCode; } LPPICTUREDISP CImgEditCtrl::GetMouseIcon() { m_lStatusCode = SUCCESS; return m_MouseIcon.GetPictureDispatch(); } void CImgEditCtrl::SetMouseIcon(LPPICTUREDISP newValue) { //9604.29 jar added init m_lStatusCode = 0L; m_MouseIcon.SetPictureDispatch(newValue); SetModifiedFlag(TRUE); } BOOL CImgEditCtrl::GetAutoRefresh() { m_lStatusCode = SUCCESS; return m_bAutoRefresh; } void CImgEditCtrl::SetAutoRefresh(BOOL bNewValue) { //9604.29 jar added init m_lStatusCode = 0L; if (m_bAutoRefresh != bNewValue) { m_bAutoRefresh = bNewValue; SetModifiedFlag(TRUE); } } short CImgEditCtrl::GetBorderStyle() { m_lStatusCode = SUCCESS; return m_sBorderStyle; } void CImgEditCtrl::SetBorderStyle(short nNewValue) { CString szErr; UINT HelpIdDef; m_lStatusCode = SUCCESS; if ( AmbientUserMode() != 0 ) { // Set to appropriate error status... // retreive infor for this standard error... szErr.LoadString(IDS_BADPROP_NORUNTIMEBORDERSTYLE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_SETNOTSUPPORTEDATRUNTIME, szErr, HelpIdDef, __FILE__, __LINE__); // And throw the resultant error, string and help ID... ThrowError(m_lStatusCode, szErr, HelpIdDef); return; } if (m_sBorderStyle == nNewValue) return; // Validate new value... if ( (nNewValue < CTL_WCOMMON_NOBORDER) || (nNewValue > CTL_WCOMMON_FIXEDSINGLE) ) { // Set to appropriate error status... // retreive infor for this standard error... szErr.LoadString(IDS_BADPROP_BORDERSTYLE); HelpIdDef = 0; m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, szErr, HelpIdDef, __FILE__, __LINE__); // And throw the resultant error, string and help ID... ThrowError(m_lStatusCode, szErr, IDH_PROP_EDIT_BORDERSTYLE); } // Save the property's new value and flag modification... m_sBorderStyle = nNewValue; SetModifiedFlag(); // invalidate control so it is redisplay accordingly. InvalidateControl(); } BOOL CImgEditCtrl::GetEnabled() { m_lStatusCode = SUCCESS; return m_bEnabled; } void CImgEditCtrl::SetEnabled(BOOL bNewValue) { //9603.14 jar added init m_lStatusCode = 0L; if (m_bEnabled == bNewValue) return; // Save the property's new value and flag modification... m_bEnabled = bNewValue; SetModifiedFlag(); // Enable/disable the window... if (m_hWnd != NULL) EnableWindow(m_bEnabled); // If the control is UI Active and the Enabled property changed to FALSE, // then UI Deactivate the control. if (m_bUIActive && !bNewValue) m_xOleInPlaceObject.UIDeactivate(); m_lStatusCode = SUCCESS; // If we are to Refresh when the property is modified, invalidate now... - ALEX STUFF // if ( m_bAutoRefresh ) // InvalidateControl(); } OLE_HANDLE CImgEditCtrl::GetHWnd() { m_lStatusCode = SUCCESS; return (OLE_HANDLE)((m_bInPlaceActive || m_bOpen) ? m_hWnd : NULL); } /* void CImgEditCtrl::DisplayError(SCODE scode, LPCTSTR lpszDescription, LPCTSTR lpszSource, LPCTSTR lpszHelpFile, UINT nHelpID) { // display my message box instead of mfc DisplayError message box ONLY when // The m_hWnd value is == to NULL. Default implementation will show message // box which might cause the system to hang with ole server application. if (m_hWnd == NULL) ::MessageBox(NULL, lpszDescription, "", MB_OK | MB_SYSTEMMODAL); } */ // Custom FIREERROR event for the Image Edit Control void CImgEditCtrl::FireErrorEdit(SCODE scode, LPCTSTR lpszDescription, UINT nHelpID) { ExternalAddRef(); // "Insurance" addref -- keeps control alive. BSTR bstrDescription = ::SysAllocString((BSTR)lpszDescription); LPCTSTR lpszSource = AfxGetAppName(); LPCTSTR lpszHelpFile = _T(""); if (nHelpID != 0) lpszHelpFile = AfxGetApp()->m_pszHelpFilePath; if (lpszHelpFile == NULL) lpszHelpFile = _T(""); VARIANT_BOOL bCancelDisplay = FALSE; // 9602.23 jar fire drill du jour int nCancelDisplay = ( int)FALSE; //FireError((WORD)SCODE_CODE(scode),&bstrDescription, scode, lpszSource, // lpszHelpFile, (DWORD)nHelpID,(INT*)&bCancelDisplay); FireError((WORD)SCODE_CODE(scode),&bstrDescription, scode, lpszSource, lpszHelpFile, (DWORD)nHelpID,(INT*)&nCancelDisplay); if (! bCancelDisplay) DisplayError(scode, (LPCTSTR)bstrDescription, lpszSource, lpszHelpFile, nHelpID); ::SysFreeString(bstrDescription); ExternalRelease(); } void CImgEditCtrl::OnSetFocus(CWnd* pOldWnd) { //9603.14 jar added init m_lStatusCode = 0L; COleControl::OnSetFocus(pOldWnd); if (m_bPaletteChanged == TRUE) { IMGRepaintDisplay(m_hWnd, (LPRECT)-1); m_bPaletteChanged = FALSE; } } void CImgEditCtrl::OnPaletteChanged(CWnd* pFocusWnd) { //9603.14 jar added init m_lStatusCode = 0L; COleControl::OnPaletteChanged(pFocusWnd); IMGRepaintDisplay(m_hWnd, (LPRECT)-1); m_bPaletteChanged = TRUE; } // 25jun96 paj From thumbnail>>>jar added for cursor processing //*************************************************************************** // // OnSetCursor // //*************************************************************************** BOOL CImgEditCtrl::OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message) { // Only if its in the client area set it to the current cursor if ( nHitTest == HTCLIENT ) { ::SetCursor( m_LittleOldCursor); return TRUE; } else return (COleControl::OnSetCursor(pWnd, nHitTest, message)); } // 25jun96 paj From thumbnail>>>jar added for cursor processing