按钮我已经通过注册表加上去了,现在要实现我点击此按钮出现地对话框。我通过添加一对话框资源,关联一个类,然后在点击按钮的函数里创建对话框。下面是代码:
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写过吗?

解决方案 »

  1.   

    hWndParent是浏览器的窗口句柄,hWnd = GetWindow(hWndParent, GW_CHILD),
    这样hWnd就是浏览器窗口的最上层子窗口,是哪个窗口不一定吧?
    为何要以hWnd为父窗口创建你的aXariosSignDlg对话框呢?
    直接用浏览器窗口,甚至以桌面为父窗口都行吧。另外你的对话框是子窗口风格吧?
    而且你还在ATL里用到MFC了,确实挺乱的。_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
    { ASSERT(afxCurrentInstanceHandle != NULL);
    return afxCurrentInstanceHandle; }
    AfxGetInstanceHandle()只有这一句断言,当前实例句柄为空。
    具体原因还有待看调试信息才能确定。
      

  2.   

    呵呵..我已经弄出来了..最近一直没有进CSDN..
    使用ATL里面的窗口类很容易就出来了..
    总是用MFC里面的东西..有点糊涂了都...