在vs2005中,我在添加的资源对话框中插入了activeX控件(WindowsMediaPlayer)
然后将控件生成为MFC的类。但是生成的类是class CWMPPlayer : public COleDispatchDriver,而不是从CWnd继承而来,对于这种情况应如何根据此activex控件的资源id得到其指针?得到的指针是什么类型的?我得到这个指针后如何才能像操作CWnd类一样进行一般的操作诸如移动窗口等?请高手指点!
然后将控件生成为MFC的类。但是生成的类是class CWMPPlayer : public COleDispatchDriver,而不是从CWnd继承而来,对于这种情况应如何根据此activex控件的资源id得到其指针?得到的指针是什么类型的?我得到这个指针后如何才能像操作CWnd类一样进行一般的操作诸如移动窗口等?请高手指点!
解决方案 »
- 1e-10这样的数如何表示
- VC2005 与 Windows 7 SDK 结合
- 一个类如何调用另一个类中的数据?
- 请教各位大侠,想设定一个横坐标为20-50,纵坐标为70-135的坐标系,坐标原点在屏幕左下角,在Ondraw里面应该怎样设置非常感谢
- 将bmp文件数据存入oracle数据库
- 请教高手:如何从一个MFC扩展DLL中倒出函数?
- 诚凭高手做软件
- 分多了,散,几个问题过来看看吧
- MFC ODBC 数据访问问题
- 学习过COM的前辈请进
- ArcGIS Engine Developer Kit
- excel LPDISPATCH _Application::GetNames() 返回的是什么呀?
如:
HWND GetDlgItem(
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);
::FindWindowEx, ::MoveWindow,::SetWindowPos
这些我都看了,我所需要的仅仅是能够从对话框中得到一个 CWMPPlayer* 的指针,因为CWMPPlayer不是从CWnd继承的,而是从COleDispatchDriver继承而来的,那么我如何从对话框中得到一个COleDispatchDriver*的指针而不是CWnd*的指针呢?得到了COleDispatchDriver*的指针可以对MediaPlayer进行操作,但是如何对其进行MoveWindow,ShowWindow之类的操作呢?这又得需要一个MediaPlayer的hwnd才可以,但是COleDispatchDriver好像是没有hwnd的,这让我非常的困扰,请指教。
我的程序设计上就是不关联变量的,而且在2005中如果放入realplayer的插件然后再关联一个变量就会出问题,比较郁闷。
{
.....
}
{
public:
CWMPPlayer() {} // 调用 COleDispatchDriver 默认构造函数
CWMPPlayer(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
CWMPPlayer(const CWMPPlayer& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}// 属性
public:// 操作
public: void close()
{
InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
CString get_URL()
{
CString result;
InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
void put_URL(LPCTSTR newValue)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
long get_openState()
{
long result;
InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
long get_playState()
{
long result;
InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
LPDISPATCH get_controls()
{
LPDISPATCH result;
InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_settings()
{
LPDISPATCH result;
InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_currentMedia()
{
LPDISPATCH result;
InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
void put_currentMedia(LPDISPATCH newValue)
{
static BYTE parms[] = VTS_DISPATCH ;
InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
LPDISPATCH get_mediaCollection()
{
LPDISPATCH result;
InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_playlistCollection()
{
LPDISPATCH result;
InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
CString get_versionInfo()
{
CString result;
InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
void launchURL(LPCTSTR bstrURL)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms, bstrURL);
}
LPDISPATCH get_network()
{
LPDISPATCH result;
InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_currentPlaylist()
{
LPDISPATCH result;
InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
void put_currentPlaylist(LPDISPATCH newValue)
{
static BYTE parms[] = VTS_DISPATCH ;
InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
LPDISPATCH get_cdromCollection()
{
LPDISPATCH result;
InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_closedCaption()
{
LPDISPATCH result;
InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
BOOL get_isOnline()
{
BOOL result;
InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
LPDISPATCH get_Error()
{
LPDISPATCH result;
InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
CString get_status()
{
CString result;
InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
BOOL get_enabled()
{
BOOL result;
InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_enabled(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_fullScreen()
{
BOOL result;
InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_fullScreen(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_enableContextMenu()
{
BOOL result;
InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_enableContextMenu(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
void put_uiMode(LPCTSTR newValue)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
CString get_uiMode()
{
CString result;
InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
};class COleDispatchDriver
{
// Constructors
public:
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);// Attributes
LPDISPATCH m_lpDispatch;
BOOL m_bAutoRelease;// Operations
BOOL CreateDispatch(REFCLSID clsid, COleException* pError = NULL);
BOOL CreateDispatch(LPCTSTR lpszProgID, COleException* pError = NULL); void AttachDispatch(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
LPDISPATCH DetachDispatch();
// detach and get ownership of m_lpDispatch
void ReleaseDispatch(); // helpers for IDispatch::Invoke
void AFX_CDECL InvokeHelper(DISPID dwDispID, WORD wFlags,
VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...);
void AFX_CDECL SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
void GetProperty(DISPID dwDispID, VARTYPE vtProp, void* pvProp) const; // special operators
operator LPDISPATCH();
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);// Implementation
public:
~COleDispatchDriver();
void InvokeHelperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, va_list argList);
};看了类的声明,就不知道应该怎么办了!
你看看CWMPPlayer4 这个类class CWMPPlayer4 : public CWnd
{
.....
}
为什么我的CWMPPlayer4是从COleDispatchDriver继承过来的?
m_player = (CWMPPlayer4 *)this->GetDlgItem(IDC_OCX1);这样可以吧
把COleDispatchDriver换成CWnd呢?或者把VC6.0生成的相关文件添加到Project中....
CWnd m_wmp;
m_wmp.CreateControl(。);LPUNKNOWN lpUnknown = m_wmp.GetControlUnknown();
LPDISPATCH lpDispatch;
lpUnknown->QueryInterface(IID_IDispatch, (void**)&lpDispatch);然后,CWMPPlayer构造函数
获得句柄的方法就是用GetDlgItem(...),这样可以用获得的句柄来进行窗口的操作。CWMPPlayer是从COleDispatchDriver继承过来的。对于COleDispatchDriver对象,其所有的属性以及方法绑定于其中的COleDispatchDriver::m_lpDispatch成员,即依附于COleDispatchDriver的IDispatch interface,而IDispatch是从IUnknown继承来的。
CWnd中有这样一个方法LPUNKNOWN GetControlUnknown( ),这就是CWnd中包含的OLE控件。使用COleDispatchDriver的COleDispatchDriver::AttachDispatch(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE)将这个从CWnd获得的IUnknow对象依附于COleDispathcDriver即可。