CWavPlayerCtrl是控件
我建立app winzard,注册控件后生成接口类CWavPlayer
建立窗口类ActiveXDlg包含CWavPlayer的对象m_WavPlayer
我的目的是在不改动控件的前提下动态的设置接口参数使声码器播放我需要的文件
但现在的问题在于控件的操作在ActiveXDlg::ActiveXDlg后ActiveXDlg::OnInitDialog之前就进行了
那么我需要怎么样才能保证控件在接口参数设置在控件操作前就完成
ActiveXDlg必须生成对象才可能调用接口,但是CWavPlayer一旦有对象生成,就马上进行操作了
好像是不可能完成的任务
由衷的请教各位

解决方案 »

  1.   

    获取控件的handle然后获取控件对应的接口指针!不明白的话明天给你点代码看看!hoho!下班了!
      

  2.   

    CWnd wnd = GetDlgItem(IDC_WAVPLAYER);
    LPUNKNOWN pIUnk = wnd.GetControlUnknown();
    IWavPlayer *pIWav = NULL;
    HRESULT hr = pIUnk->QueryInterface(__uuidof(CWavPlayer),&pIWav);
    if(FAILED(hr))
    {
    pIUnk->Release();
    }
    .....//处理你的代码
      

  3.   

    谢谢
    不过这段代码应该加到哪儿?
    CWavPlayer,ActiveXDlg, or CMyWavPlayerView
    最好是具体到函数级
    另外这段代码的目的是什么
      

  4.   

    代码加道窗口初始化如果是dlg模式就加到OnInitDialog中,如果是doc/view模式那就加到view的OnInitialUpdate中!
    代码的目的获取控件的接口对象然后设置你所想的!
      

  5.   

    我在OnInitialUpdate中加上上面的代码
    稍作修改如下
    CWnd *wnd = GetDlgItem(IDC_WAVPLAYERCTRL1);
    LPUNKNOWN pIUnk = wnd->GetControlUnknown();
    CWavPlayer *pWav = NULL;
    HRESULT hr = pIUnk->QueryInterface(__uuidof(CWavPlayer),&pWav);
    if(FAILED(hr))
    {
    pIUnk->Release();
    }
    出现如下错误
    error C2787: 'CWavPlayer' : no GUID has been associated with this object
    请问这是不是说需要控件接口没定义?msdn上说iid  [in] The identifier of the interface being requested.但我看到控件上源码上好像有接口
    onst IID BASED_CODE IID_DWavPlayer =
    { 0x6242d748, 0xcf96, 0x11d6, { 0xab, 0, 0, 0x80, 0xc7, 0xcf, 0x22, 0x27 } };
    const IID BASED_CODE IID_DWavPlayerEvents =
    { 0x6242d749, 0xcf96, 0x11d6, { 0xab, 0, 0, 0x80, 0xc7, 0xcf, 0x22, 0x27 } };
    很疑惑,不知道怎么解决
    请赐教,感谢!!