msscript: Implement GetExtent().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2016-06-08 07:47:27 +03:00 committed by Alexandre Julliard
parent 859d880b66
commit 03b06fb76b
4 changed files with 52 additions and 5 deletions

View File

@ -1,7 +1,7 @@
MODULE = msscript.ocx
RC_SRCS = msscript.rc
IDL_SRCS = msscript.idl
IMPORTS = ole32 oleaut32
IMPORTS = gdi32 user32 ole32 oleaut32
C_SRCS = \
msscript.c

View File

@ -35,6 +35,7 @@ struct ScriptControl {
IOleObject IOleObject_iface;
LONG ref;
IOleClientSite *site;
SIZEL extent;
};
static HINSTANCE msscript_instance;
@ -611,9 +612,13 @@ static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD aspect, SIZEL
{
ScriptControl *This = impl_from_IOleObject(iface);
FIXME("(%p)->(%d %p)\n", This, aspect, size);
TRACE("(%p)->(%d %p)\n", This, aspect, size);
return E_NOTIMPL;
if (aspect != DVASPECT_CONTENT)
return DV_E_DVASPECT;
*size = This->extent;
return S_OK;
}
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *sink, DWORD *connection)
@ -775,7 +780,9 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = {
static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
{
ScriptControl *script_control;
DWORD dpi_x, dpi_y;
HRESULT hres;
HDC hdc;
TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
@ -789,6 +796,14 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow
script_control->ref = 1;
script_control->site = NULL;
hdc = GetDC(0);
dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(0, hdc);
script_control->extent.cx = MulDiv(38, 2540, dpi_x);
script_control->extent.cy = MulDiv(38, 2540, dpi_y);
hres = IScriptControl_QueryInterface(&script_control->IScriptControl_iface, riid, ppv);
IScriptControl_Release(&script_control->IScriptControl_iface);
return hres;

View File

@ -1,5 +1,5 @@
TESTDLL = msscript.ocx
IMPORTS = ole32
IMPORTS = user32 gdi32 ole32
C_SRCS = \
msscript.c

View File

@ -96,10 +96,12 @@ static IOleClientSite testclientsite = { &OleClientSiteVtbl };
static void test_oleobject(void)
{
DWORD status, dpi_x, dpi_y;
IOleClientSite *site;
IOleObject *obj;
DWORD status;
SIZEL extent;
HRESULT hr;
HDC hdc;
hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IOleObject, (void**)&obj);
@ -131,6 +133,36 @@ static void test_oleobject(void)
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(site == NULL, "got %p\n", site);
/* extents */
hdc = GetDC(0);
dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(0, hdc);
memset(&extent, 0, sizeof(extent));
hr = IOleObject_GetExtent(obj, DVASPECT_CONTENT, &extent);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(extent.cx == MulDiv(38, 2540, dpi_x), "got %d\n", extent.cx);
ok(extent.cy == MulDiv(38, 2540, dpi_y), "got %d\n", extent.cy);
extent.cx = extent.cy = 0xdeadbeef;
hr = IOleObject_GetExtent(obj, DVASPECT_THUMBNAIL, &extent);
ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
extent.cx = extent.cy = 0xdeadbeef;
hr = IOleObject_GetExtent(obj, DVASPECT_ICON, &extent);
ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
extent.cx = extent.cy = 0xdeadbeef;
hr = IOleObject_GetExtent(obj, DVASPECT_DOCPRINT, &extent);
ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
IOleObject_Release(obj);
}