CHtmlView или WebBrowser на чарте (и другие features) - страница 3

 

В Вашем случае перед ретурном необходимо организовать цикл выборки сообщений

   MSG msg
   while(::GetMessage(&msg,0,0,0))
     {
      if(!::IsDialogMessage(dlg->m_hWnd,&msg))
        {
         ::TranslateMessage(&msg);
         ::DispatchMessage(&msg);
        }
     }
 

Либо создавать модальный диалог

 

:) чудес оказывается не бывает... открылся


 

Так и вставить в диалог контрол браузера, проинициализировав его в OnInitDialog

Совершенно без разницы, кто будет выступать поставщиком окна

 

а дальше интерсесная вещь.

добавил обработку OnCreate. В нём создание окна CHtmlView. Это вполне нормально работает в обычном приложении, но здесь приводит к падению терминала - и как обычно на строке Navigate.

int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CDialog::OnCreate(lpCreateStruct) == -1) return -1;
   
  pView = (CHtmlView*)RUNTIME_CLASS(CHtmlView)->CreateObject();
  pView->Create(NULL, "TEST", WS_VISIBLE|WS_CHILD, CRect(1,1,400,400), this, 6510);
  pView->ShowWindow(SW_SHOW); // показали кнопку
  pView->UpdateWindow();
  CString st; st.Format("%i", int(pView));
  MessageBox(st); // проверяем хендл pView.  всё гут.

  pView->Navigate("about:blank"); // тут креш

   return 0;
}

Причина какая-то вообще неясная. Он не хочет создаваться ни в интерфейсе IWebBrowser2 ни в виде класса CHtmlView

снова застрял...

 
stringo:

Так и вставить в диалог контрол браузера, проинициализировав его в OnInitDialog

переместил в OnInitDialog создание интерфейса

BOOL CTestDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  HRESULT hr = CComObject<CHtm>::CreateInstance(&pWebBrowserHost);
  if (SUCCEEDED(hr))
  {
    RECT rcClient = { 0, 0, 640, 480 };
    pWebBrowserHost->Create(this->m_hWnd, rcClient, NULL, WS_POPUP|WS_VISIBLE|WS_THICKFRAME); // ошибка в этой функции
    IWebBrowser2 * pWebBrowser = pWebBrowserHost->m_spBrowser;
                
    VARIANT vEmpty; VariantInit(&vEmpty);
    BSTR bstrURL=SysAllocString(L"about:blank");
//  hr=pWebBrowser->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
  }

  return TRUE;  // return TRUE unless you set the focus to a control
  // Исключение: страница свойств OCX должна возвращать значение FALSE
}

Как и вчера всё повторилось - ошибка возникает именно при создании хоста.

LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
  CAxWindow wnd(m_hWnd);
  HRESULT hr = wnd.CreateControl(IDH_HTM); // вот здесь не создаётся и выходит
  if (!SUCCEEDED(hr)) return (-1);

где же профит ? :)
 

в результате создаётся диалог, но без контрола.


Кстати, при помещении на диалог компонента (Microsoft Web Browser) с панели инструментов - терминал падает (стабильно).

 

проконсультируйте пожалуйста - какой технологией помещен Internet Explorer_Server на окно чарта.

News container
|--Shell Embedding
|--Shell DocObject View
|--Internet Explorer_Server

Это сделано с помощью IWebBrowser2 как я пытаюсь прикрутить через ATL - HTML Control или иным способом?




И вопрос второй - спасёт ли от падений терминала создание отдельного потока CWinThread для контрола IWebBrowser2 ?

 
sergeev:

но здесь приводит к падению терминала - и как обычно на строке Navigate.

А под контрол создано отдельное окно и отдельный поток?
Я бы сказал, для начала надо открыть отдельным окном-
и попробовать сделать навигацию там.
.
Цикл обработки сообщений должен быть в своем потоке.

 
jartmailru:

А под контрол создано отдельное окно и отдельный поток?

Я бы сказал, для начала надо открыть отдельным окном и попробовать сделать навигацию там.

да. это всё происходит в окне диалога как на скрине.
но наверно окно диалога находится в потоке терминала.

Цикл обработки сообщений должен быть в своем потоке.
наверно. есть случаи что так стоит сделать ?
Причина обращения: