Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
1b75d79e
Commit
1b75d79e
authored
Apr 18, 2005
by
Damien Fouilleul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- source cleanup
- few bugs fixed - added suport to Ole Extent measurments to improve compatibilty
parent
ad67acad
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
261 additions
and
92 deletions
+261
-92
AUTHORS
AUTHORS
+6
-0
activex/README.TXT
activex/README.TXT
+1
-1
activex/oleobject.cpp
activex/oleobject.cpp
+52
-0
activex/persistpropbag.cpp
activex/persistpropbag.cpp
+1
-1
activex/plugin.cpp
activex/plugin.cpp
+98
-52
activex/plugin.h
activex/plugin.h
+12
-4
activex/utils.cpp
activex/utils.cpp
+32
-0
activex/utils.h
activex/utils.h
+3
-0
activex/viewobject.cpp
activex/viewobject.cpp
+37
-22
activex/viewobject.h
activex/viewobject.h
+6
-2
activex/vlccontrol.cpp
activex/vlccontrol.cpp
+13
-10
No files found.
AUTHORS
View file @
1b75d79e
...
...
@@ -344,3 +344,9 @@ D: SSL/TLS support (core, HTTP server, HTTP input)
D: VOC files demultiplexer
S: France
N: Damien Fouilleul
E: Damien.Fouilleul@laposte.net
C: Quovodis
D: ActiveX control
S: Germany
activex/README.TXT
View file @
1b75d79e
...
...
@@ -67,7 +67,7 @@ make sure that the plugin path is set in the registry as per following example:
[HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC]
InstallDir="C:\Program Files\VideoLAN\VLC"
The InstallDir must
contain
the 'plugins' directory.
The InstallDir must
be the parent directory of
the 'plugins' directory.
WARNING: Both control and plugins must come from the same build source tree.
Otherwise, at best, the control will not play any content, at worse
...
...
activex/oleobject.cpp
View file @
1b75d79e
...
...
@@ -225,6 +225,16 @@ STDMETHODIMP VLCOleObject::GetClipboardData(DWORD dwReserved, LPDATAOBJECT *ppDa
STDMETHODIMP
VLCOleObject
::
GetExtent
(
DWORD
dwDrawAspect
,
SIZEL
*
pSizel
)
{
if
(
NULL
==
pSizel
)
return
E_POINTER
;
if
(
dwDrawAspect
&
DVASPECT_CONTENT
)
{
*
pSizel
=
_p_instance
->
getExtent
();
return
S_OK
;
}
pSizel
->
cx
=
0L
;
pSizel
->
cy
=
0L
;
return
E_NOTIMPL
;
};
...
...
@@ -314,6 +324,48 @@ STDMETHODIMP VLCOleObject::SetColorScheme(LOGPALETTE *pLogpal)
STDMETHODIMP
VLCOleObject
::
SetExtent
(
DWORD
dwDrawAspect
,
SIZEL
*
pSizel
)
{
if
(
NULL
==
pSizel
)
return
E_POINTER
;
if
(
dwDrawAspect
&
DVASPECT_CONTENT
)
{
_p_instance
->
setExtent
(
*
pSizel
);
if
(
_p_instance
->
isInPlaceActive
()
)
{
LPOLEINPLACESITE
p_inPlaceSite
;
if
(
SUCCEEDED
(
_p_clientsite
->
QueryInterface
(
IID_IOleInPlaceSite
,
(
void
**
)
&
p_inPlaceSite
))
)
{
LPOLECONTROLSITE
p_controlSite
;
RECT
posRect
=
_p_instance
->
getPosRect
();
if
(
SUCCEEDED
(
_p_clientsite
->
QueryInterface
(
IID_IOleControlSite
,
(
void
**
)
&
p_controlSite
))
)
{
// use HIMETRIC to container transform
POINTL
extent
=
{
pSizel
->
cx
,
pSizel
->
cy
};
POINTF
container
;
if
(
SUCCEEDED
(
p_controlSite
->
TransformCoords
(
&
extent
,
&
container
,
XFORMCOORDS_SIZE
|
XFORMCOORDS_HIMETRICTOCONTAINER
))
)
{
posRect
.
right
=
((
LONG
)
container
.
x
)
+
posRect
.
left
;
posRect
.
bottom
=
((
LONG
)
container
.
y
)
+
posRect
.
top
;
}
p_controlSite
->
Release
();
}
else
{
// use HIMETRIC to display transform
HDC
hDC
=
CreateDevDC
(
NULL
);
posRect
.
right
=
(
pSizel
->
cx
*
GetDeviceCaps
(
hDC
,
LOGPIXELSX
)
/
2540L
)
+
posRect
.
left
;
posRect
.
bottom
=
(
pSizel
->
cy
*
GetDeviceCaps
(
hDC
,
LOGPIXELSY
)
/
2540L
)
+
posRect
.
top
;
DeleteDC
(
hDC
);
}
p_inPlaceSite
->
OnPosRectChange
(
&
posRect
);
p_inPlaceSite
->
Release
();
}
}
return
S_OK
;
}
return
E_NOTIMPL
;
};
...
...
activex/persistpropbag.cpp
View file @
1b75d79e
...
...
@@ -116,7 +116,7 @@ STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErr
return
_p_instance
->
onLoad
();
};
STDMETHODIMP
VLCPersistPropertyBag
::
Save
(
LPPROPERTYBAG
pPropBag
,
BOOL
fClearDiry
,
BOOL
fSaveAllProperties
)
STDMETHODIMP
VLCPersistPropertyBag
::
Save
(
LPPROPERTYBAG
pPropBag
,
BOOL
fClearDir
t
y
,
BOOL
fSaveAllProperties
)
{
if
(
NULL
==
pPropBag
)
return
E_POINTER
;
...
...
activex/plugin.cpp
View file @
1b75d79e
...
...
@@ -250,6 +250,12 @@ VLCPlugin::VLCPlugin(VLCPluginClass *p_class) :
vlcObjectSafety
=
new
VLCObjectSafety
(
this
);
vlcControl
=
new
VLCControl
(
this
);
vlcViewObject
=
new
VLCViewObject
(
this
);
// set default/preferred size (320x240) pixels in HIMETRIC
HDC
hDC
=
CreateDevDC
(
NULL
);
_extent
.
cx
=
(
320
*
2540L
)
/
GetDeviceCaps
(
hDC
,
LOGPIXELSX
);
_extent
.
cy
=
(
240
*
2540L
)
/
GetDeviceCaps
(
hDC
,
LOGPIXELSY
);
DeleteDC
(
hDC
);
};
VLCPlugin
::~
VLCPlugin
()
...
...
@@ -383,6 +389,12 @@ STDMETHODIMP VLCPlugin::QueryInterface(REFIID riid, void **ppv)
*
ppv
=
reinterpret_cast
<
LPVOID
>
(
vlcViewObject
);
return
NOERROR
;
}
else
if
(
IID_IViewObject2
==
riid
)
{
AddRef
();
*
ppv
=
reinterpret_cast
<
LPVOID
>
(
vlcViewObject
);
return
NOERROR
;
}
*
ppv
=
NULL
;
...
...
@@ -407,29 +419,30 @@ STDMETHODIMP_(ULONG) VLCPlugin::Release(void)
//////////////////////////////////////
/*
** we use a
n in-place child
window to represent plugin viewport,
** whose
size
is limited by the clipping rectangle
** all drawing within this window must follow
**
cartesian coordinate system represented by _bounds.
** we use a window to represent plugin viewport,
** whose
geometry
is limited by the clipping rectangle
** all drawing within this window must follow
must
**
follow coordinates system described in lprPosRect
*/
void
VLCPlugin
::
calcPositionChange
(
LPRECT
lprPosRect
,
LPCRECT
lprc
ClipRect
)
static
void
getViewportCoords
(
LPRECT
lprPosRect
,
LPRECT
lpr
ClipRect
)
{
_bounds
.
right
=
lprPosRect
->
right
-
lprPosRect
->
left
;
RECT
bounds
;
bounds
.
right
=
lprPosRect
->
right
-
lprPosRect
->
left
;
if
(
lpr
c
ClipRect
->
left
<=
lprPosRect
->
left
)
if
(
lprClipRect
->
left
<=
lprPosRect
->
left
)
{
// left side is not clipped out
_
bounds
.
left
=
0
;
bounds
.
left
=
0
;
if
(
lpr
c
ClipRect
->
right
>=
lprPosRect
->
right
)
if
(
lprClipRect
->
right
>=
lprPosRect
->
right
)
{
// right side is not clipped out, no change
}
else
if
(
lpr
c
ClipRect
->
right
>=
lprPosRect
->
left
)
else
if
(
lprClipRect
->
right
>=
lprPosRect
->
left
)
{
// right side is clipped out
lprPosRect
->
right
=
lpr
c
ClipRect
->
right
;
lprPosRect
->
right
=
lprClipRect
->
right
;
}
else
{
...
...
@@ -440,36 +453,36 @@ void VLCPlugin::calcPositionChange(LPRECT lprPosRect, LPCRECT lprcClipRect)
else
{
// left side is clipped out
_bounds
.
left
=
lprPosRect
->
left
-
lprc
ClipRect
->
left
;
_bounds
.
right
+=
_
bounds
.
left
;
bounds
.
left
=
lprPosRect
->
left
-
lpr
ClipRect
->
left
;
bounds
.
right
+=
bounds
.
left
;
lprPosRect
->
left
=
lpr
c
ClipRect
->
left
;
if
(
lpr
c
ClipRect
->
right
>=
lprPosRect
->
right
)
lprPosRect
->
left
=
lprClipRect
->
left
;
if
(
lprClipRect
->
right
>=
lprPosRect
->
right
)
{
// right side is not clipped out
}
else
{
// right side is clipped out
lprPosRect
->
right
=
lpr
c
ClipRect
->
right
;
lprPosRect
->
right
=
lprClipRect
->
right
;
}
}
_
bounds
.
bottom
=
lprPosRect
->
bottom
-
lprPosRect
->
top
;
bounds
.
bottom
=
lprPosRect
->
bottom
-
lprPosRect
->
top
;
if
(
lpr
c
ClipRect
->
top
<=
lprPosRect
->
top
)
if
(
lprClipRect
->
top
<=
lprPosRect
->
top
)
{
// top side is not clipped out
_
bounds
.
top
=
0
;
bounds
.
top
=
0
;
if
(
lpr
c
ClipRect
->
bottom
>=
lprPosRect
->
bottom
)
if
(
lprClipRect
->
bottom
>=
lprPosRect
->
bottom
)
{
// bottom side is not clipped out, no change
}
else
if
(
lpr
c
ClipRect
->
bottom
>=
lprPosRect
->
top
)
else
if
(
lprClipRect
->
bottom
>=
lprPosRect
->
top
)
{
// bottom side is clipped out
lprPosRect
->
bottom
=
lpr
c
ClipRect
->
bottom
;
lprPosRect
->
bottom
=
lprClipRect
->
bottom
;
}
else
{
...
...
@@ -479,20 +492,22 @@ void VLCPlugin::calcPositionChange(LPRECT lprPosRect, LPCRECT lprcClipRect)
}
else
{
_bounds
.
top
=
lprPosRect
->
top
-
lprc
ClipRect
->
top
;
_bounds
.
bottom
+=
_
bounds
.
top
;
bounds
.
top
=
lprPosRect
->
top
-
lpr
ClipRect
->
top
;
bounds
.
bottom
+=
bounds
.
top
;
lprPosRect
->
top
=
lpr
c
ClipRect
->
top
;
if
(
lpr
c
ClipRect
->
bottom
>=
lprPosRect
->
bottom
)
lprPosRect
->
top
=
lprClipRect
->
top
;
if
(
lprClipRect
->
bottom
>=
lprPosRect
->
bottom
)
{
// bottom side is not clipped out
}
else
{
// bottom side is clipped out
lprPosRect
->
bottom
=
lpr
c
ClipRect
->
bottom
;
lprPosRect
->
bottom
=
lprClipRect
->
bottom
;
}
}
*
lprClipRect
=
*
lprPosRect
;
*
lprPosRect
=
bounds
;
};
HRESULT
VLCPlugin
::
onInit
(
BOOL
isNew
)
...
...
@@ -522,7 +537,7 @@ HRESULT VLCPlugin::onInit(BOOL isNew)
RegCloseKey
(
h_key
);
}
#if
0
#if
1
ppsz_argv
[
0
]
=
"C:
\\
cygwin
\\
home
\\
Damien_Fouilleul
\\
dev
\\
videolan
\\
vlc-trunk
\\
vlc"
;
#endif
...
...
@@ -610,16 +625,30 @@ BOOL VLCPlugin::isInPlaceActive(void)
HRESULT
VLCPlugin
::
onActivateInPlace
(
LPMSG
lpMesg
,
HWND
hwndParent
,
LPCRECT
lprcPosRect
,
LPCRECT
lprcClipRect
)
{
RECT
posRect
=
*
lprcPosRect
;
RECT
clipRect
=
*
lprcClipRect
;
calcPositionChange
(
&
posRect
,
lprcClipRect
);
/*
** record keeping of control geometry within container
*/
_posRect
=
posRect
;
/*
** convert posRect & clipRect to match control viewport coordinates
*/
getViewportCoords
(
&
posRect
,
&
clipRect
);
/*
** Create a window for in place activated control.
** the window geometry represents the control viewport
** so that embedded video is always properly clipped.
*/
_inplacewnd
=
CreateWindow
(
_p_class
->
getInPlaceWndClassName
(),
"VLC Plugin In-Place Window"
,
WS_CHILD
|
WS_CLIPCHILDREN
|
WS_TABSTOP
,
pos
Rect
.
left
,
pos
Rect
.
top
,
posRect
.
right
-
pos
Rect
.
left
,
posRect
.
bottom
-
pos
Rect
.
top
,
clip
Rect
.
left
,
clip
Rect
.
top
,
clipRect
.
right
-
clip
Rect
.
left
,
clipRect
.
bottom
-
clip
Rect
.
top
,
hwndParent
,
0
,
_p_class
->
getHInstance
(),
...
...
@@ -631,13 +660,18 @@ HRESULT VLCPlugin::onActivateInPlace(LPMSG lpMesg, HWND hwndParent, LPCRECT lprc
SetWindowLongPtr
(
_inplacewnd
,
GWLP_USERDATA
,
reinterpret_cast
<
LONG_PTR
>
(
this
));
/*
** VLC embedded video geometry automatically matches parent window.
** hence create a child window so that video position and size
** is always correct relative to the viewport bounds
*/
_videownd
=
CreateWindow
(
_p_class
->
getVideoWndClassName
(),
"VLC Plugin Video Window"
,
WS_CHILD
|
WS_CLIPCHILDREN
|
WS_VISIBLE
,
_bounds
.
left
,
_bounds
.
top
,
_bounds
.
right
-
_bounds
.
left
,
_bounds
.
bottom
-
_bounds
.
top
,
posRect
.
left
,
posRect
.
top
,
posRect
.
right
-
posRect
.
left
,
posRect
.
bottom
-
posRect
.
top
,
_inplacewnd
,
0
,
_p_class
->
getHInstance
(),
...
...
@@ -763,36 +797,48 @@ void VLCPlugin::onPaint(HDC hdc, const RECT &bounds, const RECT &pr)
void
VLCPlugin
::
onPositionChange
(
LPCRECT
lprcPosRect
,
LPCRECT
lprcClipRect
)
{
RECT
posRect
=
*
lprcPosRect
;
RECT
clipRect
=
*
lprcClipRect
;
RECT
posRect
=
*
lprcPosRect
;
/*
** record keeping of control geometry within container
*/
_posRect
=
posRect
;
calcPositionChange
(
&
posRect
,
lprcClipRect
);
/*
** convert posRect & clipRect to match control viewport coordinates
*/
getViewportCoords
(
&
posRect
,
&
clipRect
);
/*
** change in-place window geometry to match clipping region
*/
MoveWindow
(
_inplacewnd
,
pos
Rect
.
left
,
pos
Rect
.
top
,
posRect
.
right
-
pos
Rect
.
left
,
posRect
.
bottom
-
pos
Rect
.
top
,
clip
Rect
.
left
,
clip
Rect
.
top
,
clipRect
.
right
-
clip
Rect
.
left
,
clipRect
.
bottom
-
clip
Rect
.
top
,
FALSE
);
/*
** change video window geometry to match object bounds within clipping region
*/
MoveWindow
(
_videownd
,
_bounds
.
left
,
_bounds
.
top
,
_bounds
.
right
-
_bounds
.
left
,
_bounds
.
bottom
-
_bounds
.
top
,
posRect
.
left
,
posRect
.
top
,
posRect
.
right
-
posRect
.
left
,
posRect
.
bottom
-
posRect
.
top
,
FALSE
);
RECT
updateRect
;
updateRect
.
left
=
-
_bounds
.
left
;
updateRect
.
top
=
-
_bounds
.
top
;
updateRect
.
right
=
_bounds
.
right
-
_bounds
.
left
;
updateRect
.
bottom
=
_bounds
.
bottom
-
_bounds
.
top
;
/*
** force a full refresh of control content
*/
RECT
updateRect
;
updateRect
.
left
=
-
posRect
.
left
;
updateRect
.
top
=
-
posRect
.
top
;
updateRect
.
right
=
posRect
.
right
-
posRect
.
left
;
updateRect
.
bottom
=
posRect
.
bottom
-
posRect
.
top
;
ValidateRect
(
_videownd
,
NULL
);
InvalidateRect
(
_videownd
,
&
updateRect
,
FALSE
);
...
...
activex/plugin.h
View file @
1b75d79e
...
...
@@ -116,6 +116,7 @@ public:
void
setVisible
(
BOOL
fVisible
);
BOOL
getVisible
(
void
)
{
return
_b_visible
;
};
// container events
void
onPositionChange
(
LPCRECT
lprcPosRect
,
LPCRECT
lprcClipRect
);
void
onPaint
(
HDC
hdc
,
const
RECT
&
bounds
,
const
RECT
&
pr
);
...
...
@@ -126,14 +127,19 @@ public:
void
fireOnPauseEvent
(
void
);
void
fireOnStopEvent
(
void
);
// control size in HIMETRIC
const
SIZEL
&
getExtent
(
void
)
{
return
_extent
;
};
void
setExtent
(
const
SIZEL
&
extent
)
{
_extent
=
extent
;
};
// control geometry within container
RECT
getPosRect
(
void
)
{
return
_posRect
;
};
protected:
virtual
~
VLCPlugin
();
private:
void
calcPositionChange
(
LPRECT
lprPosRect
,
LPCRECT
lprcClipRect
);
//implemented interfaces
class
VLCOleObject
*
vlcOleObject
;
class
VLCOleControl
*
vlcOleControl
;
...
...
@@ -152,7 +158,6 @@ private:
HWND
_inplacewnd
;
// video window (Drawing window)
HWND
_videownd
;
RECT
_bounds
;
VLCPluginClass
*
_p_class
;
ULONG
_i_ref
;
...
...
@@ -163,7 +168,10 @@ private:
BOOL
_b_loopmode
;
BOOL
_b_visible
;
BOOL
_b_sendevents
;
int
_i_vlc
;
int
_i_vlc
;
SIZEL
_extent
;
RECT
_posRect
;
};
#endif
...
...
activex/utils.cpp
View file @
1b75d79e
...
...
@@ -98,4 +98,36 @@ HRESULT GetObjectProperty(LPUNKNOWN object, DISPID dispID, VARIANT& v)
return
hr
;
};
HDC
CreateDevDC
(
DVTARGETDEVICE
*
ptd
)
{
HDC
hdc
=
NULL
;
LPDEVNAMES
lpDevNames
;
LPDEVMODE
lpDevMode
;
LPTSTR
lpszDriverName
;
LPTSTR
lpszDeviceName
;
LPTSTR
lpszPortName
;
if
(
ptd
==
NULL
)
{
hdc
=
CreateDC
(
TEXT
(
"DISPLAY"
),
NULL
,
NULL
,
NULL
);
goto
errReturn
;
}
lpDevNames
=
(
LPDEVNAMES
)
ptd
;
// offset for size field
if
(
ptd
->
tdExtDevmodeOffset
==
0
)
{
lpDevMode
=
NULL
;
}
else
{
lpDevMode
=
(
LPDEVMODE
)
((
LPTSTR
)
ptd
+
ptd
->
tdExtDevmodeOffset
);
}
lpszDriverName
=
(
LPTSTR
)
lpDevNames
+
ptd
->
tdDriverNameOffset
;
lpszDeviceName
=
(
LPTSTR
)
lpDevNames
+
ptd
->
tdDeviceNameOffset
;
lpszPortName
=
(
LPTSTR
)
lpDevNames
+
ptd
->
tdPortNameOffset
;
hdc
=
CreateDC
(
lpszDriverName
,
lpszDeviceName
,
lpszPortName
,
lpDevMode
);
errReturn:
return
hdc
;
};
activex/utils.h
View file @
1b75d79e
...
...
@@ -34,6 +34,9 @@ extern BSTR BSTRFromCStr(int codePage, const char *s);
// properties
extern
HRESULT
GetObjectProperty
(
LPUNKNOWN
object
,
DISPID
dispID
,
VARIANT
&
v
);
// properties
extern
HDC
CreateDevDC
(
DVTARGETDEVICE
*
ptd
);
// enumeration
template
<
class
T
>
class
VLCEnum
:
IUnknown
{
...
...
activex/viewobject.cpp
View file @
1b75d79e
...
...
@@ -23,7 +23,7 @@
#include "plugin.h"
#include "viewobject.h"
#include
<iostream>
#include
"utils.h"
using
namespace
std
;
...
...
@@ -31,25 +31,18 @@ STDMETHODIMP VLCViewObject::Draw(DWORD dwAspect, LONG lindex, PVOID pvAspect,
DVTARGETDEVICE
*
ptd
,
HDC
hicTargetDev
,
HDC
hdcDraw
,
LPCRECTL
lprcBounds
,
LPCRECTL
lprcWBounds
,
BOOL
(
CALLBACK
*
pfnContinue
)(
DWORD
),
DWORD
dwContinue
)
{
switch
(
dwAspect
)
if
(
dwAspect
&
DVASPECT_CONTENT
)
{
case
DVASPECT_CONTENT
:
if
(
_p_instance
->
getVisible
()
)
{
RECT
bounds
;
bounds
.
left
=
lprcBounds
->
left
;
bounds
.
top
=
lprcBounds
->
top
;
bounds
.
right
=
lprcBounds
->
right
;
bounds
.
bottom
=
lprcBounds
->
bottom
;
_p_instance
->
onPaint
(
hdcDraw
,
bounds
,
bounds
);
}
return
S_OK
;
case
DVASPECT_THUMBNAIL
:
break
;
case
DVASPECT_ICON
:
break
;
case
DVASPECT_DOCPRINT
:
break
;
if
(
_p_instance
->
getVisible
()
)
{
RECT
bounds
;
bounds
.
left
=
lprcBounds
->
left
;
bounds
.
top
=
lprcBounds
->
top
;
bounds
.
right
=
lprcBounds
->
right
;
bounds
.
bottom
=
lprcBounds
->
bottom
;
_p_instance
->
onPaint
(
hdcDraw
,
bounds
,
bounds
);
}
return
S_OK
;
}
return
E_NOTIMPL
;
};
...
...
@@ -60,19 +53,28 @@ STDMETHODIMP VLCViewObject::Freeze(DWORD dwAspect, LONG lindex,
if
(
NULL
!=
pvAspect
)
return
E_INVALIDARG
;
return
OLE_E_BLANK
;
return
E_NOTIMPL
;
};
STDMETHODIMP
VLCViewObject
::
GetAdvise
(
LPDWORD
pdwAspect
,
LPDWORD
padvf
,
LPADVISESINK
*
ppAdviseSink
)
{
return
E_NOTIMPL
;
if
(
NULL
!=
pdwAspect
)
*
pdwAspect
=
0
;
if
(
NULL
!=
padvf
)
*
padvf
=
0
;
if
(
NULL
!=
ppAdviseSink
)
*
ppAdviseSink
=
NULL
;
return
S_OK
;
};
STDMETHODIMP
VLCViewObject
::
GetColorSet
(
DWORD
dwAspect
,
LONG
lindex
,
PVOID
pvAspect
,
DVTARGETDEVICE
*
ptd
,
HDC
hicTargetDev
,
LPLOGPALETTE
*
ppColorSet
)
{
return
E_NOTIMPL
;
return
S_FALSE
;
};
STDMETHODIMP
VLCViewObject
::
SetAdvise
(
DWORD
dwAspect
,
DWORD
advf
,
...
...
@@ -86,3 +88,16 @@ STDMETHODIMP VLCViewObject::Unfreeze(DWORD dwFreeze)
return
E_NOTIMPL
;
};
STDMETHODIMP
VLCViewObject
::
GetExtent
(
DWORD
dwAspect
,
LONG
lindex
,
DVTARGETDEVICE
*
ptd
,
LPSIZEL
lpSizel
)
{
if
(
dwAspect
&
DVASPECT_CONTENT
)
{
*
lpSizel
=
_p_instance
->
getExtent
();
return
S_OK
;
}
lpSizel
->
cx
=
0L
;
lpSizel
->
cy
=
0L
;
return
E_NOTIMPL
;
};
activex/viewobject.h
View file @
1b75d79e
...
...
@@ -25,7 +25,7 @@
#include <oleidl.h>
class
VLCViewObject
:
public
IViewObject
class
VLCViewObject
:
public
IViewObject
2
{
public:
...
...
@@ -39,7 +39,8 @@ public:
if
(
(
NULL
!=
ppv
)
&&
(
IID_IUnknown
==
riid
)
&&
(
IID_IPersist
==
riid
)
&&
(
IID_IViewObject
==
riid
)
)
{
&&
(
IID_IViewObject
==
riid
)
&&
(
IID_IViewObject2
==
riid
)
)
{
AddRef
();
*
ppv
=
reinterpret_cast
<
LPVOID
>
(
this
);
return
NOERROR
;
...
...
@@ -58,6 +59,9 @@ public:
STDMETHODIMP
SetAdvise
(
DWORD
,
DWORD
,
LPADVISESINK
);
STDMETHODIMP
Unfreeze
(
DWORD
);
// IViewObject2 methods
STDMETHODIMP
GetExtent
(
DWORD
,
LONG
,
DVTARGETDEVICE
*
,
LPSIZEL
);
private:
VLCPlugin
*
_p_instance
;
...
...
activex/vlccontrol.cpp
View file @
1b75d79e
...
...
@@ -54,6 +54,9 @@ HRESULT VLCControl::getTypeInfo(void)
STDMETHODIMP
VLCControl
::
GetTypeInfoCount
(
UINT
*
pctInfo
)
{
if
(
NULL
==
pctInfo
)
return
E_INVALIDARG
;
if
(
SUCCEEDED
(
getTypeInfo
())
)
*
pctInfo
=
1
;
else
...
...
@@ -102,7 +105,7 @@ STDMETHODIMP VLCControl::Invoke(DISPID dispIdMember, REFIID riid,
STDMETHODIMP
VLCControl
::
get_Value
(
VARIANT
*
pvarValue
)
{
if
(
NULL
==
pvarValue
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
V_VT
(
pvarValue
)
=
VT_BOOL
;
return
get_Playing
(
&
V_BOOL
(
pvarValue
));
...
...
@@ -127,7 +130,7 @@ STDMETHODIMP VLCControl::put_Value(VARIANT pvarValue)
STDMETHODIMP
VLCControl
::
get_Visible
(
VARIANT_BOOL
*
isVisible
)
{
if
(
NULL
==
isVisible
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
*
isVisible
=
_p_instance
->
getVisible
();
...
...
@@ -180,7 +183,7 @@ STDMETHODIMP VLCControl::stop(void)
STDMETHODIMP
VLCControl
::
get_Playing
(
VARIANT_BOOL
*
isPlaying
)
{
if
(
NULL
==
isPlaying
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -215,7 +218,7 @@ STDMETHODIMP VLCControl::put_Playing(VARIANT_BOOL isPlaying)
STDMETHODIMP
VLCControl
::
get_Position
(
float
*
position
)
{
if
(
NULL
==
position
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -241,7 +244,7 @@ STDMETHODIMP VLCControl::put_Position(float position)
STDMETHODIMP
VLCControl
::
get_Time
(
int
*
seconds
)
{
if
(
NULL
==
seconds
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -289,7 +292,7 @@ STDMETHODIMP VLCControl::fullscreen(void)
STDMETHODIMP
VLCControl
::
get_Length
(
int
*
seconds
)
{
if
(
NULL
==
seconds
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -326,7 +329,7 @@ STDMETHODIMP VLCControl::playSlower(void)
STDMETHODIMP
VLCControl
::
get_Volume
(
int
*
volume
)
{
if
(
NULL
==
volume
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -557,7 +560,7 @@ static HRESULT createTargetOptions(int codePage, VARIANT *options, char ***cOpti
STDMETHODIMP
VLCControl
::
addTarget
(
BSTR
uri
,
VARIANT
options
,
enum
VLCPlaylistMode
mode
,
int
position
)
{
if
(
NULL
==
uri
)
if
(
0
==
SysStringLen
(
uri
)
)
return
E_INVALIDARG
;
HRESULT
hr
=
E_UNEXPECTED
;
...
...
@@ -588,7 +591,7 @@ STDMETHODIMP VLCControl::addTarget( BSTR uri, VARIANT options, enum VLCPlaylistM
STDMETHODIMP
VLCControl
::
get_PlaylistIndex
(
int
*
index
)
{
if
(
NULL
==
index
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
int
i_vlc
=
_p_instance
->
getVLCObject
();
if
(
i_vlc
)
...
...
@@ -647,7 +650,7 @@ STDMETHODIMP VLCControl::playlistClear(void)
STDMETHODIMP
VLCControl
::
get_VersionInfo
(
BSTR
*
version
)
{
if
(
NULL
==
version
)
return
E_
INVALIDARG
;
return
E_
POINTER
;
const
char
*
versionStr
=
VLC_Version
();
if
(
NULL
!=
versionStr
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment