C++ 如何从ATL对话框正确访问ATL控件?

C++ 如何从ATL对话框正确访问ATL控件?,c++,controls,atl,dhtml,C++,Controls,Atl,Dhtml,我有一个MSVC 2010解决方案,包含两个项目: ATL DLL项目,其中包含DHTML控件(名为DHTMLControl,基本上由向导构建)。我想我可以把这个控制放到第二个项目中 ATL EXE项目,其中包含主对话框(CMIndialog),也由向导创建 我已成功将DHTMLControl添加到对话框中: 将DHTMLControl添加到工具箱 将其拖到资源视图中的主对话框中 已从工具箱中删除DHTMLControl(以避免生成时拒绝访问) 然而,我的问题是我不知道如何使用这个控件 假设

我有一个MSVC 2010解决方案,包含两个项目:

  • ATL DLL项目,其中包含DHTML控件(名为DHTMLControl,基本上由向导构建)。我想我可以把这个控制放到第二个项目中
  • ATL EXE项目,其中包含主对话框(CMIndialog),也由向导创建
我已成功将DHTMLControl添加到对话框中:

  • 将DHTMLControl添加到工具箱
  • 将其拖到资源视图中的主对话框中
  • 已从工具箱中删除DHTMLControl(以避免生成时拒绝访问)
  • 然而,我的问题是我不知道如何使用这个控件

    假设我在MainDialog的范围内,比如:

    LRESULT CMainDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    
    调用DHTMLControl方法的正确方法是什么?比如说,我想在按下主对话框上的按钮后导航到另一个url或类似的内容

    如何获取CMIndialog类中DHTMLControl(CDHTMLontrol?IDHTMLontrol?)的指针/引用

    对不起,如果这听起来有点混乱,但我真的与ATL斗争


    谢谢。

    将生成的i.h包含到对话框的标题中(不要包含实际控件的标题-它不应该包含在内)

    然后使用类似的方法:

    CComPtr<IDHTMLControl> ptr;
    HRESULT hr = GetDlgControl(IDC_DHTML_CONTROL, IID_IDHTMLControl, (void**)&ptr);
    
    BSTR url = SysAllocString(L"http://example.com/");
    // Call control's prop method
    ptr->put_Url(url);
    SysFreeString(url);
    
    CComPtr ptr;
    HRESULT hr=GetDlgControl(IDC\U DHTML\U控制、IID\U IDHTMLControl(无效**)和ptr);
    BSTR url=SysAllocString(L)http://example.com/");
    //调用控件的prop方法
    ptr->put_Url(Url);
    SysFreeString(url);