riched20: Added tom typelib.

I had to duplicate idl unfortunately, because typelib in riched20 is not
compatible with interfaces from tom.idl - method names are different,
while vtables are identical.
This commit is contained in:
Nikolay Sivov 2015-05-17 17:30:56 +03:00 committed by Alexandre Julliard
parent f0959dc175
commit c8362ec3b8
5 changed files with 755 additions and 2 deletions

2
configure vendored
View File

@ -17527,7 +17527,7 @@ wine_fn_config_test dlls/rasapi32/tests rasapi32_test
wine_fn_config_dll rasdlg enable_rasdlg implib
wine_fn_config_dll regapi enable_regapi
wine_fn_config_dll resutils enable_resutils implib
wine_fn_config_dll riched20 enable_riched20 implib
wine_fn_config_dll riched20 enable_riched20 clean,implib
wine_fn_config_test dlls/riched20/tests riched20_test
wine_fn_config_dll riched32 enable_riched32
wine_fn_config_test dlls/riched32/tests riched32_test

View File

@ -3217,7 +3217,7 @@ WINE_CONFIG_TEST(dlls/rasapi32/tests)
WINE_CONFIG_DLL(rasdlg,,[implib])
WINE_CONFIG_DLL(regapi)
WINE_CONFIG_DLL(resutils,,[implib])
WINE_CONFIG_DLL(riched20,,[implib])
WINE_CONFIG_DLL(riched20,,[clean,implib])
WINE_CONFIG_TEST(dlls/riched20/tests)
WINE_CONFIG_DLL(riched32)
WINE_CONFIG_TEST(dlls/riched32/tests)

View File

@ -25,3 +25,6 @@ C_SRCS = \
writer.c
RC_SRCS = version.rc
IDL_SRCS = \
riched_tom.idl

View File

@ -0,0 +1,710 @@
/*
* Copyright 2006 Juan Lang
* Copyright 2015 Nikolay Sivov for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
import "unknwn.idl";
import "objidl.idl";
import "oaidl.idl";
#pragma makedep regtypelib
cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef FindText")
cpp_quote("#endif")
[
uuid(8cc497c9-a1df-11ce-8098-00aa0047be5d),
version(1.0)
]
library tom
{
importlib("stdole2.tlb");
typedef enum tagTomConstants
{
tomFalse = 0,
tomTrue = -1,
tomUndefined = -9999999,
tomToggle = -9999998,
tomAutoColor = -9999997,
tomDefault = -9999996,
tomSuspend = -9999995,
tomResume = -9999994,
tomApplyNow = 0,
tomApplyLater = 1,
tomTrackParms = 2,
tomCacheParms = 3,
tomBackward = 0xc0000001,
tomForward = 0x3fffffff,
tomMove = 0,
tomExtend = 1,
tomNoSelection = 0,
tomSelectionIP = 1,
tomSelectionNormal = 2,
tomSelectionFrame = 3,
tomSelectionColumn = 4,
tomSelectionRow = 5,
tomSelectionBlock = 6,
tomSelectionInlineShape = 7,
tomSelectionShape = 8,
tomSelStartActive = 1,
tomSelAtEOL = 2,
tomSelOvertype = 4,
tomSelActive = 8,
tomSelReplace = 16,
tomEnd = 0,
tomStart = 32,
tomCollapseEnd = 0,
tomCollapseStart = 1,
tomClientCoord = 256,
tomNone = 0,
tomSingle = 1,
tomWords = 2,
tomDouble = 3,
tomDotted = 4,
tomDash = 5,
tomDashDot = 6,
tomDashDotDot = 7,
tomWave = 8,
tomThick = 9,
tomHair = 10,
tomLineSpaceSingle = 0,
tomLineSpace1pt5 = 1,
tomLineSpaceDouble = 2,
tomLineSpaceAtLeast = 3,
tomLineSpaceExactly = 4,
tomLineSpaceMultiple = 5,
tomAlignLeft = 0,
tomAlignCenter = 1,
tomAlignRight = 2,
tomAlignJustify = 3,
tomAlignDecimal = 3,
tomAlignBar = 4,
tomAlignInterWord = 3,
tomAlignInterLetter = 4,
tomAlignScaled = 5,
tomAlignGlyphs = 6,
tomAlignSnapGrid = 7,
tomSpaces = 0,
tomDots = 1,
tomDashes = 2,
tomLines = 3,
tomThickLines = 4,
tomEquals = 5,
tomTabBack = -3,
tomTabNext = -2,
tomTabHere = -1,
tomListBullet = 1,
tomListNumberAsArabic = 2,
tomListNumberAsLCLetter = 3,
tomListNumberAsUCLetter = 4,
tomListNumberAsLCRoman = 5,
tomListNumberAsUCRoman = 6,
tomListNumberAsSequence = 7,
tomListParentheses = 0x10000,
tomListPeriod = 0x20000,
tomListPlain = 0x30000,
tomCharacter = 1,
tomWord = 2,
tomSentence = 3,
tomParagraph = 4,
tomLine = 5,
tomStory = 6,
tomScreen = 7,
tomSection = 8,
tomColumn = 9,
tomRow = 10,
tomWindow = 11,
tomCell = 12,
tomCharFormat = 13,
tomParaFormat = 14,
tomTable = 15,
tomObject = 16,
tomMatchWord = 2,
tomMatchCase = 4,
tomMatchPattern = 8,
tomUnknownStory = 0,
tomMainTextStory = 1,
tomFootnotesStory = 2,
tomEndnotesStory = 3,
tomCommentsStory = 4,
tomTextFrameStory = 5,
tomEvenPagesHeaderStory = 6,
tomPrimaryHeaderStory = 7,
tomEvenPagesFooterStory = 8,
tomPrimaryFooterStory = 9,
tomFirstPageHeaderStory = 10,
tomFirstPageFooterStory = 11,
tomNoAnimation = 0,
tomLasVegasLights = 1,
tomBlinkingBackground = 2,
tomSparkleText = 3,
tomMarchingBlackAnts = 4,
tomMarchingRedAnts = 5,
tomShimmer = 6,
tomWipeDown = 7,
tomWipeRight = 8,
tomAnimationMax = 8,
tomLowerCase = 0,
tomUpperCase = 1,
tomTitleCase = 2,
tomSentenceCase = 4,
tomToggleCase = 5,
tomReadOnly = 0x100,
tomShareDenyRead = 0x200,
tomShareDenyWrite = 0x400,
tomPasteFile = 0x1000,
tomCreateNew = 0x10,
tomCreateAlways = 0x20,
tomOpenExisting = 0x30,
tomOpenAlways = 0x40,
tomTruncateExisting = 0x50,
tomRTF = 0x1,
tomText = 0x2,
tomHTML = 0x3,
tomWordDocument = 0x4,
tomBold = 0x80000001,
tomItalic = 0x80000002,
tomUnderline = 0x80000004,
tomStrikeout = 0x80000008,
tomProtected = 0x80000010,
tomLink = 0x80000020,
tomSmallCaps = 0x80000040,
tomAllCaps = 0x80000080,
tomHidden = 0x80000100,
tomOutline = 0x80000200,
tomShadow = 0x80000400,
tomEmboss = 0x80000800,
tomImprint = 0x80001000,
tomDisabled = 0x80002000,
tomRevised = 0x80004000,
tomNormalCaret = 0,
tomKoreanBlockCaret = 0x1,
tomIncludeInset = 0x1,
tomIgnoreCurrentFont = 0,
tomMatchFontCharset = 0x1,
tomMatchFontSignature = 0x2,
tomCharset = 0x80000000,
tomRE10Mode = 0x1,
tomNoIME = 0x80000,
tomSelfIME = 0x40000
} tomConstants;
interface ITextRange;
interface ITextSelection;
interface ITextStoryRanges;
[
uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextDocument : IDispatch
{
[propget, id(DISPID_VALUE)]
HRESULT Name([retval, out] BSTR *name);
[propget]
HRESULT Selection([retval, out] ITextSelection **selection);
[propget]
HRESULT StoryCount([retval, out] LONG *count);
[propget]
HRESULT StoryRanges([retval, out] ITextStoryRanges **ranges);
[propget]
HRESULT Saved([retval, out] LONG *value);
[propput]
HRESULT Saved([in] LONG value);
[propget]
HRESULT DefaultTabStop([retval, out] float *value);
[propput]
HRESULT DefaultTabStop([in] float value);
HRESULT New();
HRESULT Open([in] VARIANT *var, [in] LONG flags, [in] LONG codepage);
HRESULT Save([in] VARIANT *var, [in] LONG flags, [in] LONG codepage);
HRESULT Freeze([retval, out] LONG *count);
HRESULT Unfreeze([retval, out] LONG *count);
HRESULT BeginEditCollection();
HRESULT EndEditCollection();
HRESULT Undo([in] LONG count, [retval, out] LONG *prop);
HRESULT Redo([in] LONG count, [retval, out] LONG *prop);
HRESULT Range([in] LONG start, [in] LONG end, [retval, out] ITextRange **range);
HRESULT RangeFromPoint([in] LONG x, [in] LONG y, [retval, out] ITextRange **range);
}
interface ITextFont;
interface ITextPara;
[
uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextRange : IDispatch
{
[propget, id(DISPID_VALUE)]
HRESULT Text([retval, out] BSTR *text);
[propput, id(DISPID_VALUE)]
HRESULT Text([in] BSTR text);
[propget]
HRESULT Char([retval, out] LONG *ch);
[propput]
HRESULT Char([in] LONG ch);
[propget]
HRESULT Duplicate([retval, out] ITextRange **range);
[propget]
HRESULT FormattedText([retval, out] ITextRange **range);
[propput]
HRESULT FormattedText([in] ITextRange *range);
[propget]
HRESULT Start([retval, out] LONG *start);
[propput]
HRESULT Start([in] LONG start);
[propget]
HRESULT End([retval, out] LONG *end);
[propput]
HRESULT End([in] LONG end);
[propget]
HRESULT Font([retval, out] ITextFont **font);
[propput]
HRESULT Font([in] ITextFont *font);
[propget]
HRESULT Para([retval, out] ITextPara **para);
[propput]
HRESULT Para([in] ITextPara *para);
[propget]
HRESULT StoryLength([retval, out] LONG *len);
[propget]
HRESULT StoryType([retval, out] LONG *value);
HRESULT Collapse([in] LONG start);
HRESULT Expand([in] LONG unit, [retval, out] LONG *delta);
HRESULT GetIndex([in] LONG unit, [retval, out] LONG *index);
HRESULT SetIndex([in] LONG unit, [in] LONG index, [in] LONG extend);
HRESULT SetRange([in] LONG active, [in] LONG other);
HRESULT InRange([in] ITextRange *range, [retval, out] LONG *pb);
HRESULT InStory([in] ITextRange *range, [retval, out] LONG *pb);
HRESULT IsEqual([in] ITextRange *range, [retval, out] LONG *pb);
HRESULT Select();
HRESULT StartOf([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
HRESULT EndOf([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
HRESULT Move([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveStart([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveEnd([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveStartWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveEndWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveStartUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT MoveEndUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
HRESULT FindText([in] BSTR str, [in] LONG ch, [in] LONG flags, [retval, out] LONG *len);
HRESULT FindTextStart([in] BSTR str, [in] LONG cch, [in] LONG flags, [retval, out] LONG *len);
HRESULT FindTextEnd([in] BSTR str, [in] LONG ch, [in] LONG flags, [retval, out] LONG *len);
HRESULT Delete([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
HRESULT Cut([out] VARIANT *var);
HRESULT Copy([out] VARIANT *var);
HRESULT Paste([in] VARIANT *var, [in] LONG format);
HRESULT CanPaste([in] VARIANT *var, [in] LONG format, [retval, out] LONG *pb);
HRESULT CanEdit([retval, out] LONG *pb);
HRESULT ChangeCase([in] LONG type);
HRESULT GetPoint([in] LONG type, [out] LONG *cx, [out] LONG *cy);
HRESULT SetPoint([in] LONG x, [in] LONG y, [in] LONG type, [in] LONG extend);
HRESULT ScrollIntoView([in] LONG value);
HRESULT GetEmbeddedObject([retval, out] IUnknown **ppv);
}
[
uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextSelection : ITextRange
{
[propget]
HRESULT Flags([retval, out] LONG *flags);
[propput]
HRESULT Flags([in] LONG flags);
[propget]
HRESULT Type([retval, out] LONG *type);
HRESULT MoveLeft([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
HRESULT MoveRight([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
HRESULT MoveUp([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
HRESULT MoveDown([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
HRESULT HomeKey([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
HRESULT EndKey([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
HRESULT TypeText([in] BSTR str);
}
[
uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextFont : IDispatch
{
[propget, id(DISPID_VALUE)]
HRESULT Duplicate([retval, out] ITextFont **font);
[propput, id(DISPID_VALUE)]
HRESULT Duplicate([in] ITextFont *font);
HRESULT CanChange([out] LONG *pB);
HRESULT IsEqual([in] ITextFont *font, [retval, out] LONG *pB);
HRESULT Reset([in] LONG value);
[propget]
HRESULT GetStyle([retval, out] LONG *value);
[propput]
HRESULT SetStyle([in] LONG value);
[propget]
HRESULT AllCaps([retval, out] LONG *value);
[propput]
HRESULT AllCaps([in] LONG value);
[propget]
HRESULT Animation([retval, out] LONG *value);
[propput]
HRESULT Animation([in] LONG value);
[propget]
HRESULT BackColor([retval, out] LONG *value);
[propput]
HRESULT BackColor([in] LONG value);
[propget]
HRESULT Bold([retval, out] LONG *value);
[propput]
HRESULT Bold([in] LONG value);
[propget]
HRESULT Emboss([retval, out] LONG *value);
[propput]
HRESULT Emboss([in] LONG value);
[propget]
HRESULT ForeColor([retval, out] LONG *value);
[propput]
HRESULT ForeColor([in] LONG value);
[propget]
HRESULT Hidden([retval, out] LONG *value);
[propput]
HRESULT Hidden([in] LONG value);
[propget]
HRESULT Engrave([retval, out] LONG *value);
[propput]
HRESULT Engrave([in] LONG value);
[propget]
HRESULT Italic([retval, out] LONG *value);
[propput]
HRESULT Italic([in] LONG value);
[propget]
HRESULT Kerning([retval, out] float *value);
[propput]
HRESULT Kerning([in] float value);
[propget]
HRESULT LanguageID([retval, out] LONG *value);
[propput]
HRESULT LanguageID([in] LONG value);
[propget]
HRESULT Name([retval, out] BSTR *value);
[propput]
HRESULT Name([in] BSTR value);
[propget]
HRESULT Outline([retval, out] LONG *value);
[propput]
HRESULT Outline([in] LONG value);
[propget]
HRESULT Position([retval, out] float *value);
[propput]
HRESULT Position([in] float value);
[propget]
HRESULT Protected([retval, out] LONG *value);
[propput]
HRESULT Protected([in] LONG value);
[propget]
HRESULT Shadow([retval, out] LONG *value);
[propput]
HRESULT Shadow([in] LONG value);
[propget]
HRESULT Size([retval, out] float *value);
[propput]
HRESULT Size([in] float value);
[propget]
HRESULT SmallCaps([retval, out] LONG *value);
[propput]
HRESULT SmallCaps([in] LONG value);
[propget]
HRESULT Spacing([retval, out] float *value);
[propput]
HRESULT Spacing([in] float value);
[propget]
HRESULT StrikeThrough([retval, out] LONG *value);
[propput]
HRESULT StrikeThrough([in] LONG value);
[propget]
HRESULT Subscript([retval, out] LONG *value);
[propput]
HRESULT Subscript([in] LONG value);
[propget]
HRESULT Superscript([retval, out] LONG *value);
[propput]
HRESULT Superscript([in] LONG value);
[propget]
HRESULT Underline([retval, out] LONG *value);
[propput]
HRESULT Underline([in] LONG value);
[propget]
HRESULT Weight([retval, out] LONG *value);
[propput]
HRESULT Weight([in] LONG value);
}
[
uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextPara : IDispatch
{
[propget, id(DISPID_VALUE)]
HRESULT Duplicate([retval, out] ITextPara **para);
[propput, id(DISPID_VALUE)]
HRESULT Duplicate([in] ITextPara *para);
HRESULT CanChange([out, retval] LONG *pB);
HRESULT IsEqual([in] ITextPara *para, [retval, out] LONG *pB);
HRESULT Reset([in] LONG value);
[propget]
HRESULT Style([retval, out] LONG *value);
[propput]
HRESULT Style([in] LONG value);
[propget]
HRESULT Alignment([retval, out] LONG *value);
[propput]
HRESULT Alignment([in] LONG value);
[propget]
HRESULT Hyphenation([retval, out]LONG *value);
[propput]
HRESULT Hyphenation([in] LONG value);
[propget]
HRESULT FirstLineIndent([retval, out] float *value);
[propget]
HRESULT KeepTogether([retval, out] LONG *value);
[propput]
HRESULT KeepTogether([in] LONG value);
[propget]
HRESULT KeepWithNext([retval, out] LONG *value);
[propput]
HRESULT KeepWithNext([in] LONG value);
[propget]
HRESULT LeftIndent([retval, out] float *value);
[propget]
HRESULT LineSpacing([retval, out] float *value);
[propget]
HRESULT LineSpacingRule([retval, out] LONG *value);
[propget]
HRESULT ListAlignment([retval, out] LONG *value);
[propput]
HRESULT ListAlignment([in] LONG value);
[propget]
HRESULT ListLevelIndex([retval, out] LONG *value);
[propput]
HRESULT ListLevelIndex([in] LONG value);
[propget]
HRESULT ListStart([retval, out] LONG *value);
[propput]
HRESULT ListStart([in] LONG value);
[propget]
HRESULT ListTab([retval, out] float *value);
[propput]
HRESULT ListTab([in] float value);
[propget]
HRESULT ListType([retval, out] LONG *value);
[propput]
HRESULT ListType([in] LONG value);
[propget]
HRESULT NoLineNumber([retval, out] LONG *value);
[propput]
HRESULT NoLineNumber([in] LONG value);
[propget]
HRESULT PageBreakBefore([retval, out] LONG *value);
[propput]
HRESULT PageBreakBefore([in] LONG value);
[propget]
HRESULT RightIndent([retval, out] float *value);
[propput]
HRESULT RightIndent([in] float value);
HRESULT SetIndents([in] float StartIndent, [in] float LeftIndent, [in] float RightIndent);
HRESULT SetLineSpacing([in] LONG LineSpacingRule, [in] float LineSpacing);
[propget]
HRESULT SpaceAfter([retval, out] float *value);
[propput]
HRESULT SpaceAfter([in] float value);
[propget]
HRESULT SpaceBefore([retval, out] float *value);
[propput]
HRESULT SpaceBefore([in] float value);
[propget]
HRESULT WidowControl([retval, out] LONG *value);
[propput]
HRESULT WidowControl([in] LONG value);
[propget]
HRESULT TabCount([retval, out] LONG *count);
HRESULT AddTab([in] float tbPos, [in] LONG tbAlign, [in] LONG tbLeader);
HRESULT ClearAllTabs();
HRESULT DeleteTab([in] float tbPos);
HRESULT GetTab([in] LONG iTab, [out] float *ptbPos, [out] LONG *ptbAlign, [out] LONG *ptbLeader);
}
[
uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d),
object,
dual,
oleautomation
]
interface ITextStoryRanges : IDispatch
{
[restricted, hidden, id(DISPID_NEWENUM)]
HRESULT _NewEnum([retval, out] IUnknown **ppEnum);
[id(DISPID_VALUE)]
HRESULT Item([in] LONG index, [retval, out] ITextRange **range);
[propget]
HRESULT Count([retval, out] LONG *count);
}
} /* Library tom */

View File

@ -35,6 +35,8 @@
static HMODULE hmoduleRichEdit;
DEFINE_GUID(GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
#define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
static void _expect_ref(IUnknown* obj, ULONG ref, int line)
{
@ -1308,6 +1310,43 @@ static void test_GetPara(void)
release_interfaces(&hwnd, &reOle, &doc, NULL);
}
static void test_dispatch(void)
{
static const WCHAR testnameW[] = {'G','e','t','T','e','x','t',0};
static const WCHAR testname2W[] = {'T','e','x','t',0};
IRichEditOle *reOle = NULL;
ITextDocument *doc = NULL;
ITextRange *range = NULL;
WCHAR *nameW;
DISPID dispid;
HRESULT hr;
HWND hwnd;
create_interfaces(&hwnd, &reOle, &doc, NULL);
range = NULL;
hr = ITextDocument_Range(doc, 0, 0, &range);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(range != NULL, "got %p\n", range);
dispid = 123;
nameW = (WCHAR*)testnameW;
hr = ITextRange_GetIDsOfNames(range, &IID_NULL, &nameW, 1, LOCALE_USER_DEFAULT, &dispid);
todo_wine {
ok(hr == DISP_E_UNKNOWNNAME, "got 0x%08x\n", hr);
ok(dispid == DISPID_UNKNOWN, "got %d\n", dispid);
}
dispid = 123;
nameW = (WCHAR*)testname2W;
hr = ITextRange_GetIDsOfNames(range, &IID_NULL, &nameW, 1, LOCALE_USER_DEFAULT, &dispid);
todo_wine {
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(dispid == DISPID_VALUE, "got %d\n", dispid);
}
ITextRange_Release(range);
release_interfaces(&hwnd, &reOle, &doc, NULL);
}
START_TEST(richole)
{
/* Must explicitly LoadLibrary(). The test has no references to functions in
@ -1331,4 +1370,5 @@ START_TEST(richole)
test_IOleInPlaceSite_GetWindow();
test_GetFont();
test_GetPara();
test_dispatch();
}