Как правильно получить доступ к элементу управления ATL из диалога ATL?

У меня есть решение MSVC 2010, которое содержит 2 проекта:

  • Проект ATL DLL, содержащий элемент управления DHTML (с именем DHTMLControl, который в значительной степени создается мастером). Я думаю, что мог бы поместить этот элемент управления во второй проект.
  • Проект ATL EXE, содержащий основной диалог (CMainDialog), также созданный мастером.

Мне удалось добавить DHTMLControl в диалог:

  1. добавлен DHTMLControl в Toolbox
  2. перетащил его в основной диалог в режиме просмотра ресурсов
  3. удален DHTMLControl из Toolbox (чтобы избежать отказа в доступе при сборке)

Однако моя проблема в том, что я не знаю, как использовать этот элемент управления!

Предполагая, что я нахожусь в рамках MainDialog, скажите:

LRESULT CMainDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

Как правильно вызывать методы DHTMLControl? Скажем, я хотел бы перейти к другому URL-адресу или тому подобное после нажатия кнопки в основном диалоговом окне.

Как я могу получить указатель / ссылку на DHTMLControl (CDHTMLControl? IDHTMLControl?), Находящийся внутри класса CMainDialog?

Извините, если это звучит немного запутанно, но я действительно борюсь с ATL.

Спасибо.


person Alex    schedule 08.05.2013    source источник


Ответы (1)


Включите сгенерированный _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);
person Alex    schedule 12.05.2013