201 lines
4.7 KiB
C++
201 lines
4.7 KiB
C++
|
//
|
||
|
// TEXTOBJ.HPP
|
||
|
// Text object
|
||
|
//
|
||
|
// Copyright Microsoft 1998-
|
||
|
//
|
||
|
#ifndef __TEXTOBJ_HPP_
|
||
|
#define __TEXTOBJ_HPP_
|
||
|
|
||
|
#include <common.h>
|
||
|
|
||
|
#define NonStandardTextID "Text2\0"
|
||
|
|
||
|
void GetTextDestinationAddress(SINonStandardPDU *destinationAddress, PUINT workspaceHandle, PUINT planeID);
|
||
|
|
||
|
//
|
||
|
// Definitions for text objects
|
||
|
//
|
||
|
#define LAST_LINE -1
|
||
|
#define LAST_CHAR -2
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define DBG_UNINIT -1
|
||
|
#endif // _DEBUG
|
||
|
|
||
|
//
|
||
|
// Definitions for debug stuff
|
||
|
//
|
||
|
typedef struct tagVARIABLE_STRING_HEADER
|
||
|
{
|
||
|
ULONG len; // length of this structure + string length
|
||
|
POINT start; // starting X(column) Y(line) inside the previous text
|
||
|
}VARIABLE_STRING_HEADER;
|
||
|
|
||
|
typedef struct tagVARIABLE_STRING
|
||
|
{
|
||
|
VARIABLE_STRING_HEADER header;
|
||
|
CHAR string;
|
||
|
} VARIABLE_STRING;
|
||
|
|
||
|
typedef struct tagTEXTPDU_HEADER
|
||
|
{
|
||
|
UINT nonStandardPDU;
|
||
|
UINT textHandle;
|
||
|
UINT workspaceHandle;
|
||
|
}TEXTPDU_HEADER;
|
||
|
|
||
|
typedef struct tagTEXTPDU_ATTRIB {
|
||
|
DWORD attributesFlag; // flag with the attributes that changed
|
||
|
COLORREF textPenColor;
|
||
|
COLORREF textFillColor;
|
||
|
UINT textViewState;
|
||
|
UINT textZOrder;
|
||
|
POINT textAnchorPoint;
|
||
|
LOGFONT textFont;
|
||
|
UINT numberOfLines;
|
||
|
VARIABLE_STRING textString;
|
||
|
} TEXTPDU_ATTRIB;
|
||
|
|
||
|
|
||
|
typedef struct tagMSTextPDU
|
||
|
{
|
||
|
TEXTPDU_HEADER header;
|
||
|
TEXTPDU_ATTRIB attrib;
|
||
|
}MSTextPDU;
|
||
|
|
||
|
|
||
|
typedef struct tagMSTextDeletePDU
|
||
|
{
|
||
|
TEXTPDU_HEADER header;
|
||
|
}MSTextDeletePDU;
|
||
|
|
||
|
|
||
|
class TextObj : public T126Obj
|
||
|
{
|
||
|
|
||
|
// Friend declaration for text editing
|
||
|
friend class WbTextEditor;
|
||
|
|
||
|
|
||
|
public:
|
||
|
|
||
|
TextObj (void);
|
||
|
void TextEditObj (TEXTPDU_ATTRIB* pEditPDU );
|
||
|
|
||
|
~TextObj( void );
|
||
|
|
||
|
void Draw(HDC hDC = NULL, BOOL bForcedDraw = FALSE, BOOL bPrinting = FALSE);
|
||
|
void UnDraw(void);
|
||
|
BOOL CheckReallyHit(LPCRECT pRectHit){return RectangleHit(FALSE, pRectHit);}
|
||
|
void SetViewHandle(UINT viewHandle){};
|
||
|
|
||
|
//
|
||
|
// PDU stuff
|
||
|
//
|
||
|
void CreateTextPDU(ASN1octetstring_t*, UINT);
|
||
|
void SetTextAttrib(TEXTPDU_ATTRIB * pattributes);
|
||
|
void GetTextAttrib(TEXTPDU_ATTRIB * pattributes);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Get/set pen Color
|
||
|
//
|
||
|
void SetPenColor(COLORREF rgb, BOOL isPresent);
|
||
|
BOOL GetPenColor(COLORREF * pcr);
|
||
|
BOOL GetPenColor(RGBTRIPLE* rgb);
|
||
|
|
||
|
//
|
||
|
// Get/set fill Color
|
||
|
//
|
||
|
BOOL HasFillColor(void){return m_bIsFillColorPresent;}
|
||
|
void SetFillColor(COLORREF rgb, BOOL isPresent);
|
||
|
BOOL GetFillColor(COLORREF * rgb);
|
||
|
BOOL GetFillColor(RGBTRIPLE* rgb);
|
||
|
|
||
|
//
|
||
|
// Set the text of the object
|
||
|
//
|
||
|
void SetText(TCHAR * strText);
|
||
|
void SetText(const StrArray& strTextArray);
|
||
|
|
||
|
//
|
||
|
// Get/Set the font for drawing the text
|
||
|
//
|
||
|
virtual void SetFont(HFONT hFont);
|
||
|
virtual void SetFont(LOGFONT *pLogFont, BOOL bReCalc=TRUE );
|
||
|
HFONT GetFont(void) {return m_hFont;};
|
||
|
HFONT GetFontThumb(void){return m_hFontThumb;}
|
||
|
|
||
|
|
||
|
//
|
||
|
// Get the UI tool from a drawing pdu
|
||
|
//
|
||
|
void SetUIToolType(void);
|
||
|
|
||
|
//
|
||
|
// Mask 0x0000001F
|
||
|
//
|
||
|
void ChangedPenColor(void){m_dwChangedAttrib |= 0x00000001;}
|
||
|
void ChangedFillColor(void){m_dwChangedAttrib |= 0x00000002;}
|
||
|
void ChangedViewState(void){m_dwChangedAttrib |= 0x00000004;}
|
||
|
void ChangedZOrder(void){m_dwChangedAttrib |= 0x00000008;}
|
||
|
void ChangedAnchorPoint(void) { m_dwChangedAttrib |= 0x00000010;}
|
||
|
void ChangedFont(void) { m_dwChangedAttrib |= 0x00000020;}
|
||
|
void ChangedText(void) { m_dwChangedAttrib |= 0x00000040;}
|
||
|
|
||
|
BOOL HasPenColorChanged(void){return (m_dwChangedAttrib & 0x00000001);}
|
||
|
BOOL HasFillColorChanged(void){return (m_dwChangedAttrib & 0x00000002);}
|
||
|
BOOL HasViewStateChanged(void){return (m_dwChangedAttrib & 0x00000004);}
|
||
|
BOOL HasZOrderChanged(void){return (m_dwChangedAttrib & 0x00000008);}
|
||
|
BOOL HasAnchorPointChanged(void) { return (m_dwChangedAttrib & 0x00000010);}
|
||
|
BOOL HasFontChanged(void) { return m_dwChangedAttrib & 0x00000020;}
|
||
|
BOOL HasTextChanged(void) { return m_dwChangedAttrib & 0x00000040;}
|
||
|
|
||
|
DWORD GetPresentAttribs(void){return (m_dwChangedAttrib & 0x0000007F);}
|
||
|
void ResetAttrib(void){m_dwChangedAttrib = 0;}
|
||
|
void SetAllAttribs(void){m_dwChangedAttrib = 0x0000007F;}
|
||
|
|
||
|
void ChangedPenThickness(void){};
|
||
|
|
||
|
void CalculateBoundsRect(void);
|
||
|
void CalculateRect(int iStartX, int iStartY, int iStopX, int iStopY, LPRECT lprcResult);
|
||
|
ABC GetTextABC( LPCTSTR pText, int iStartX, int iStopX);
|
||
|
void GetTextRectangle(int iStartY, int iStartX, int iStopX, LPRECT lprc);
|
||
|
|
||
|
void SendTextPDU(UINT choice);
|
||
|
void OnObjectEdit(void);
|
||
|
void OnObjectDelete(void);
|
||
|
void SendNewObjectToT126Apps(void);
|
||
|
void GetEncodedCreatePDU(ASN1_BUF *pBuf);
|
||
|
|
||
|
TEXTMETRIC m_textMetrics;
|
||
|
|
||
|
//
|
||
|
// Array for storing text
|
||
|
//
|
||
|
StrArray strTextArray;
|
||
|
HFONT m_hFont;
|
||
|
|
||
|
|
||
|
protected:
|
||
|
|
||
|
DWORD m_dwChangedAttrib;
|
||
|
BOOL m_bIsPenColorPresent;
|
||
|
BOOL m_bIsFillColorPresent;
|
||
|
RGBTRIPLE m_penColor;
|
||
|
RGBTRIPLE m_fillColor;
|
||
|
|
||
|
//
|
||
|
// Font details
|
||
|
//
|
||
|
HFONT m_hFontThumb;
|
||
|
BOOL m_bFirstSetFontCall;
|
||
|
LONG m_nKerningOffset;
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif // __TEXTOBJ_HPP_
|
||
|
|