ATL в диалоге, созданном ::DialogBoxParam
От: koktik  
Дата: 20.10.04 17:33
Оценка:
Кто-нибудь сталкивался с ситуацией:
в VC++ 6.0 создается ATL (Composite Control), который, затем, в редакторе ресурсов кладется на обычный Dialog (Insert ActiveX Control). Последний создается вызовом ::DialogBoxParam с MAKEINTRESOURCE() из ресурсов. В общем, в функцию диалога не приходит ничего, даже WM_INIT.
Re: ATL в диалоге, созданном ::DialogBoxParam
От: Alexey Goncharov Россия  
Дата: 20.10.04 18:21
Оценка:
Здравствуйте, koktik, Вы писали:

K>Кто-нибудь сталкивался с ситуацией:

K>в VC++ 6.0 создается ATL (Composite Control), который, затем, в редакторе ресурсов кладется на обычный Dialog (Insert ActiveX Control). Последний создается вызовом ::DialogBoxParam с MAKEINTRESOURCE() из ресурсов. В общем, в функцию диалога не приходит ничего, даже WM_INIT.

Вместо DialogBoxParam лучше использовать CAxDialogImpl из ATL — в нем есть должная поддержка ActiveX контролов в диалоге.
Одного лишь DialogBoxParam недостаточно.
Re[2]: ATL в диалоге, созданном ::DialogBoxParam
От: koktik  
Дата: 21.10.04 10:13
Оценка:
Здравствуйте, Alexey Goncharov, Вы писали:

AG>Здравствуйте, koktik, Вы писали:


K>>Кто-нибудь сталкивался с ситуацией:

K>>в VC++ 6.0 создается ATL (Composite Control), который, затем, в редакторе ресурсов кладется на обычный Dialog (Insert ActiveX Control). Последний создается вызовом ::DialogBoxParam с MAKEINTRESOURCE() из ресурсов. В общем, в функцию диалога не приходит ничего, даже WM_INIT.

AG>Вместо DialogBoxParam лучше использовать CAxDialogImpl из ATL — в нем есть должная поддержка ActiveX контролов в диалоге.

AG>Одного лишь DialogBoxParam недостаточно.

Можно, кусок кода посмотреть ?..
Re[3]: ATL в диалоге, созданном ::DialogBoxParam
От: Alexey Goncharov Россия  
Дата: 21.10.04 10:42
Оценка:
Здравствуйте, koktik, Вы писали:

AG>>Вместо DialogBoxParam лучше использовать CAxDialogImpl из ATL — в нем есть должная поддержка ActiveX контролов в диалоге.

AG>>Одного лишь DialogBoxParam недостаточно.

K>Можно, кусок кода посмотреть ?..


AboutDlg, на шаблон диалога которого вставлен Microsoft WebBrowser control с идентификатором IDC_WEBBROWSER:
class CAboutDlg : public CAxDialogImpl<CAboutDlg>
{
public:
  enum { IDD = IDD_ABOUTBOX };

  BEGIN_MSG_MAP(CAboutDlg)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
    COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
  END_MSG_MAP()

  LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
  {
    CenterWindow(GetParent());

    CAxWindow IE = GetDlgItem( IDC_WEBBROWSER ) ;
    IWebBrowser2 *pBrowser = NULL ;
    HRESULT hr = IE.QueryControl( IID_IWebBrowser2, ( void ** )&pBrowser ) ;
    if( SUCCEEDED( hr ) && pBrowser )
    {
      pBrowser->Navigate2( &CComVariant( "http://www.rsdn.ru" ), NULL, NULL, NULL, NULL ) ;
      pBrowser->Release() ;
    }

    return TRUE;
  }

  LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
  {
    EndDialog(wID);
    return 0;
  }
};
Re[4]: ATL в диалоге, созданном ::DialogBoxParam
От: koktik  
Дата: 21.10.04 12:31
Оценка:
Здравствуйте, Alexey Goncharov, Вы писали:

AG>Здравствуйте, koktik, Вы писали:


AG>>>Вместо DialogBoxParam лучше использовать CAxDialogImpl из ATL — в нем есть должная поддержка ActiveX контролов в диалоге.

AG>>>Одного лишь DialogBoxParam недостаточно.

K>>Можно, кусок кода посмотреть ?..


AG>AboutDlg, на шаблон диалога которого вставлен Microsoft WebBrowser control с идентификатором IDC_WEBBROWSER:

AG>
AG>class CAboutDlg : public CAxDialogImpl<CAboutDlg>
AG>{
AG>public:
AG>  enum { IDD = IDD_ABOUTBOX };

AG>  BEGIN_MSG_MAP(CAboutDlg)
AG>    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
AG>    COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
AG>    COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
AG>  END_MSG_MAP()

AG>  LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
AG>  {
AG>    CenterWindow(GetParent());

AG>    CAxWindow IE = GetDlgItem( IDC_WEBBROWSER ) ;
AG>    IWebBrowser2 *pBrowser = NULL ;
AG>    HRESULT hr = IE.QueryControl( IID_IWebBrowser2, ( void ** )&pBrowser ) ;
AG>    if( SUCCEEDED( hr ) && pBrowser )
AG>    {
AG>      pBrowser->Navigate2( &CComVariant( "http://www.rsdn.ru" ), NULL, NULL, NULL, NULL ) ;
AG>      pBrowser->Release() ;
AG>    }

AG>    return TRUE;
AG>  }

AG>  LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
AG>  {
AG>    EndDialog(wID);
AG>    return 0;
AG>  }
AG>};
AG>


Да, задышало. Спасибо за помощь !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.