Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

200 lines
4.7 KiB

//
// 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_