按钮我已经通过注册表加上去了,现在要实现我点击此按钮出现地对话框。我通过添加一对话框资源,关联一个类,然后在点击按钮的函数里创建对话框。下面是代码:
CXariosSignDlg *aXariosSignDlg = new CXariosSignDlg;
HRESULT hRes = S_OK;
CComPtr<IDispatch> pDocDisp;
CComQIPtr<IHTMLDocument2> pHtmlDoc2;
HWND hWndParent;
HWND hWnd;
HWND h;
hRes = m_spWebBrowser ->get_Document (&pDocDisp);
if (SUCCEEDED (hRes) && pDocDisp)
{
hRes = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc2);
if(SUCCEEDED(hRes) && pHtmlDoc2)
{
long nBrowser = 0;
m_spWebBrowser ->get_HWND (&nBrowser);
hWndParent = (HWND)nBrowser;
hWnd = GetWindow(hWndParent, GW_CHILD);
//h = ::FindWindow(_T("IEFrame"),NULL);
CWnd *pWnd = CWnd::FromHandle(hWnd);
aXariosSignDlg ->Create (IDD_DIALOGXARIOS, pWnd);
aXariosSignDlg ->ShowWindow (5);
}
}
在Create的时候出错,说是断言错误。调试指向AfxGetInstanceHandle()工程是ATL的工程,请问有谁用VC写过吗?
CXariosSignDlg *aXariosSignDlg = new CXariosSignDlg;
HRESULT hRes = S_OK;
CComPtr<IDispatch> pDocDisp;
CComQIPtr<IHTMLDocument2> pHtmlDoc2;
HWND hWndParent;
HWND hWnd;
HWND h;
hRes = m_spWebBrowser ->get_Document (&pDocDisp);
if (SUCCEEDED (hRes) && pDocDisp)
{
hRes = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc2);
if(SUCCEEDED(hRes) && pHtmlDoc2)
{
long nBrowser = 0;
m_spWebBrowser ->get_HWND (&nBrowser);
hWndParent = (HWND)nBrowser;
hWnd = GetWindow(hWndParent, GW_CHILD);
//h = ::FindWindow(_T("IEFrame"),NULL);
CWnd *pWnd = CWnd::FromHandle(hWnd);
aXariosSignDlg ->Create (IDD_DIALOGXARIOS, pWnd);
aXariosSignDlg ->ShowWindow (5);
}
}
在Create的时候出错,说是断言错误。调试指向AfxGetInstanceHandle()工程是ATL的工程,请问有谁用VC写过吗?
这样hWnd就是浏览器窗口的最上层子窗口,是哪个窗口不一定吧?
为何要以hWnd为父窗口创建你的aXariosSignDlg对话框呢?
直接用浏览器窗口,甚至以桌面为父窗口都行吧。另外你的对话框是子窗口风格吧?
而且你还在ATL里用到MFC了,确实挺乱的。_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
AfxGetInstanceHandle()只有这一句断言,当前实例句柄为空。
具体原因还有待看调试信息才能确定。
使用ATL里面的窗口类很容易就出来了..
总是用MFC里面的东西..有点糊涂了都...