VC浏览器相关的学习(五)(在BHO中建立对话框)--解决CreateDialog的1813错误

1 添加一个资源Dialog IDD_DIALOG1
2 创建对话框
     MyRock.h

CMyRock():m_hwndDlg(0) { m_pMyRock = this; } private: void CreateDlg(); void DestroyDlg(); static INT_PTR CALLBACK CMyRock::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); static CMyRock* m_pMyRock; }; CMyRock* CMyRock::m_pMyRock = 0;

    MyRock.cpp

  INT_PTR CALLBACK CMyRock::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: m_pMyRock->DestroyDlg(); return TRUE; } case WM_CLOSE: m_pMyRock->DestroyDlg(); return TRUE; } //返回FALSE给缺省对话框函数DefDlgProc(),表示没有处理本消息 return FALSE; } void CMyRock::CreateDlg() { if(m_hwndDlg == 0) { // HINSTANCE在win32下与HMODULE是相同的东西,GetModuleHandle(NULL)是获得当前程序的句柄。在DLL中使用GetModuleHandle(NULL),是获得程序的句柄,而不是DLL的。GetModuleHandle("RockBHO.dll")才是获得DLL的(这里用的是全局变量)。 // 若是采用应程句柄创建对话框会出现无法找到对话框资源的1813错误。 // HINSTANCE hInst = GetModuleHandle(_T("RockBHO.dll")); HINSTANCE hInst = g_hInstance; m_hwndDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); ShowWindow(m_hwndDlg, SW_SHOW); } } void CMyRock::DestroyDlg() { if(m_hwndDlg != 0) { DestroyWindow(m_hwndDlg); m_hwndDlg = 0; } }

这样创建之后,就可以在对话框的消息回调里用m_pMyRock调用CMyRock对象,实现与IE的交互

你可能感兴趣的:(浏览器,command,null,dll,dialog,callback)