您的位置:首页 > 其它

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

2010-08-18 15:18 211 查看
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的交互
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐