1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#ifndef __mtext_h__
#define __mtext_h__
// Text control
#define MTEXTCONTROLCLASS "MTextControl"
#define MTM_SETUSER (WM_USER)
#define MTM_UPDATE (WM_USER+1)
// analog of calling MTextCreateEx
// wParam = MTEXT_FLG_*
// lParam = (void*)text
#define MTM_UPDATEEX (WM_USER+2)
// sets background color for a control
// wParam = (COLORREF)clBack
// lParam = 0 (ignored)
#define MTM_SETBKCOLOR (WM_USER+3)
typedef struct TextObject *HText;
#ifdef MTEXTCONTROL_EXPORTS
#define MTEXTCONTROL_EXPORT __declspec(dllexport)
#else
#define MTEXTCONTROL_EXPORT __declspec(dllimport)
#endif
#define MTEXTCONTROL_DLL(T) MTEXTCONTROL_EXPORT T __stdcall
#ifdef __cplusplus
extern "C" {
#endif
enum
{
// visual text options, used in MS_TEXT_REGISTER
MTEXT_FANCY_SMILEYS = 0x00000010, // SmileyAdd smileys
MTEXT_FANCY_BBCODES = 0x00000020, // [b], [u], [i]
MTEXT_FANCY_MATHMOD = 0x00000040, // enable math module formula parsing
MTEXT_FANCY_URLS = 0x00000080, // underline urls
MTEXT_FANCY_BBCODES2 = 0x00000100, // [color], [img], [url], not implemented yet
MTEXT_FANCY_SIMPLEFMT = 0x00000200, // simple formatting ("_", "/" and "*")
MTEXT_FANCY_MASK = 0x00007fff,
MTEXT_FANCY_DEFAULT = 0x00008000, // Use default options
// text options, used in MS_TEXT_REGISTER
MTEXT_SYSTEM_HICONS = 0x00010000, // [$handle=i<HICON as dword>$]
MTEXT_SYSTEM_HBITMAPS = 0x00010000, // [$handle=b<HBITMAP as dword>$], not implemented yet
MTEXT_SYSTEM_ESCAPED = 0x00020000, // passed text is escaped with slashes, not implemented yet
MTEXT_SYSTEM_MASK = 0x7fff0000,
MTEXT_SYSTEM_DEFAULT = 0x80000000, // Use default option -- just nothing system is used :)
// text object flags
MTEXT_FLG_CHAR = 0x00000000,
MTEXT_FLG_WCHAR = 0x00000001,
MTEXT_FLG_BIDI_RTL = 0x00000002,
MTEXT_FLG_RTF = 0x00000004,
};
// subscribe to MText services
MTEXTCONTROL_DLL(HANDLE) MTextRegister(const char *userTitle, uint32_t options);
// allocate text object (unicode)
MTEXTCONTROL_DLL(HText) MTextCreateW(HANDLE userHandle, const wchar_t *text);
// allocate text object (advanced)
MTEXTCONTROL_DLL(HText) MTextCreateEx(HANDLE userHandle, const void *text, uint32_t flags);
// allocate text object (advanced)
MTEXTCONTROL_DLL(HText) MTextCreateEx2(HWND hwnd, HANDLE userHandle, const void *text, uint32_t flags);
// destroys text object
MTEXTCONTROL_DLL(int) MTextDestroy(HText text);
// activates text object
MTEXTCONTROL_DLL(int) MTextActivate(HText text, bool bActivate = true);
// measures text object
// result = 1 (success), 0 (failure)
// sz->cx is interpreted as maximum width allowed.
// wrapped text size is stored in sz, text
MTEXTCONTROL_DLL(int) MTextMeasure(HDC dc, SIZE *sz, HText text);
// displays text object
// result = 1 (success), 0 (failure)
MTEXTCONTROL_DLL(int) MTextDisplay(HDC dc, POINT pos, SIZE sz, HText text);
// sets a contact & protocol (optionally, for hContact == 0) for text object (required for valid stickers' processing)
MTEXTCONTROL_DLL(int) MTextSetProto(HText text, MCONTACT hContact, const char *szProto = nullptr);
// sets parent window for text object (this is required for mouse handling, etc)
MTEXTCONTROL_DLL(int) MTextSetParent(HText text, HWND hwnd);
// send message to an object
MTEXTCONTROL_DLL(int) MTextSendMessage(HWND hwnd, HText text, UINT msg, WPARAM wParam, LPARAM lParam);
#ifdef __cplusplus
}
#endif
#endif // __mtext_h__
|