CHtmlView in Dialog
-
Hallo,
ich brauche einen Dialog der mir eine HTML-Seite anzeigt. Es gibt
ja bereits eien entsprechende Klasse CHtmlView.Ehrlich gesagt habe ich keine Ahnung von der MFC Programmierung und die Verwendung von KlickBuntiAssistenten bin ich nicht gewohnt. Nichts desto trotz habe ich mal folgendes Versucht.
class CHelpCtrlDlg : public CDialog { public: CHelpCtrlDlg(){CDialog::CDialog();} CHelpCtrlDlg(UINT nIDTemplate,CWnd* pParentWnd = NULL) : CDialog(nIDTemplate,pParentWnd){} virtual ~CHelpCtrlDlg(); void SetAddress(LPWSTR wStrDir); void SetPosition(RECT rectPos); afx_msg BOOL OnInitDialog(); protected: // html view element CHelpCtrlView* m_pHtmlView; // address string wchar_t m_wcAddr[255]; RECT m_rectPos; }; BOOL CHelpCtrlDlg::OnInitDialog() { BOOL bRetval; bRetval = CDialog::OnInitDialog(); RECT rectClient; // get a new html view object m_pHtmlView = new CHelpCtrlView(); this->MoveWindow(&m_rectPos); GetClientRect(&rectClient); m_pHtmlView->Create(NULL,(LPTSTR)_T("Title"),WS_BORDER | WS_VISIBLE | WS_CHILD ,rectClient,this,1234); m_pHtmlView->Navigate2((LPCTSTR) m_wcAddr); //this->SetCapture(); return bRetval; }
Verwunderlicherweise wird der Dialog korrekt angezeigt. Dazu musste ich eine Dialogresource anlegen. Mein herrliches VS08 verabschiedet sich jedoch beim Versuch direkt eine Klasse zu erstellen weshalb ich versucht habe diese selbst zu "erstellen" (oben).
Sobald ich innerhalb der HtmlView einen Mausklick ausführe steigt das Programm aus.
Und zwar hier: (viewcore.cpp CView::OnMouseActivate)
// eat it if this will cause activation ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame));
Zunächst hatte ich versucht diese Methode einfach zu überschreiben. Dies scheint jedoch niemanden zu beeindrucken da immer noch dieselbe Methode aufgerufen wird.
Ich weiß dass das alles sehr dilletantisch aussieht. Ich hoffe dass mir trotzdem jemand helfen kann.
Gruß Holger
ps.: Über ein vernünftige MFC Buche welches nicht von Frank Budszuhn ist, wäre ich auch sehr dankbar.
-
Views kann man nicht in Dialoge einbetten.
View leben immer in CFrameWnd abgeleiteten Klassen.
Dialoge haben mikt der Doc/View Architektur nichts am Hut.Das Sample ist zwar etwas blöd aber zeogt die Grundlagen:
http://www.codeproject.com/KB/shell/IE_BrowserControl.aspxAnsonsten gibt es noch tausendfach Code dazu auf www.codeproject.com