MFC单文档中嵌入CEF(Chromium Embedded Framework)使用多进程
来源:互联网 发布:苹果手机写作软件 编辑:程序博客网 时间:2024/06/14 21:51
闲言碎语一大堆,大家见谅。。。
最开始我是用单文档嵌入CEF,但是后来发现单文档的MFC程序使用多进程,ShellExecute(this->m_hWnd, TEXT("open"), strPath, addr, NULL, SW_SHOWNORMAL);本行代码执行错误,strPath是我MFC可执行文件的路径,而addr则是我要传给的http地址,但是在运行时发现,MFC把addr的路径当作了一个文档,提示不能打开,不得已放弃使用单文档,改用Dlg程序嵌入。
Dlg程序中可以很好的实现参数的传递,也成功运行出了网站中的内容,但是后面出现了一个更大的问题:拖动窗口移动后,窗口花屏,吐血啊。。。
但是用单文档的嵌入却不会出现花屏,这就坑了,最后攻克点只能放在单文档MFC传递命令行参数上。
1.单文档MFC命令行参数传递:
添加一个类命名为:CMyCommandLineInfo
MyCommandLineInfo.h如下:
#pragma once
#include "afxwin.h"
class CMyCommandLineInfo :
public CCommandLineInfo
{
public:
void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast);
CMyCommandLineInfo(void);
~CMyCommandLineInfo(void);
};
MyCommandLineInfo.cpp如下:
#include "StdAfx.h"
#include "MyCommandLineInfo.h"
#include "CEF_MFC.h"
CMyCommandLineInfo::CMyCommandLineInfo(void)
{
}
CMyCommandLineInfo::~CMyCommandLineInfo(void)
{
}
void CMyCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
{
static int num = 0;
//CMyCommandLineInfo::ParseParam(lpszParam, bFlag, bLast);
switch(num)
{
case 0:
theApp.urlPath = CString(lpszParam);
break;
}
num++;
}
找到你的应用程序中的CCommandLineInfo cmdInfo;将其注销,添加上述头文件,使用:
CMyCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
这时在你的程序中使用:CString addr = AfxGetApp()->m_lpCmdLine;便可得到命令行参数信息。
2.上篇文章《CEF嵌入到单文档mfc》中提到的方法:
void CCEF_MFCView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(m_cWebClient.get())
{
CefRefPtr<CefBrowser> browser = m_cWebClient->GetBrowser();
if(browser)
{
CefWindowHandle hwnd = browser->GetWindowHandle();
RECT rect;
this->GetClientRect(&rect);
::SetWindowPos(hwnd, HWND_TOP, rect.left, rect.top, cx, cy, SWP_NOZORDER);
}
}
}
//该方法在OnCreate()中使用
int CCEF_MFCView::CreateFCView(void)
{
CefRefPtr<WebClient2> client(new WebClient2());
m_cWebClient = client;
CString addr = AfxGetApp()->m_lpCmdLine;
CefSettings cSettings;
CefSettingsTraits::init( &cSettings);
cSettings.multi_threaded_message_loop = true;
CefString(&cSettings.cache_path).FromASCII("./cache");//"C:\\temp\\cache"
CefRefPtr<CefApp> spApp;
CefInitialize( cSettings, spApp);
CefWindowInfo info;
CRect rect;
this->GetClientRect(&rect);
info.SetAsChild( m_hWnd, rect/*CRect(0, 0, 1000, 800)*/);
CefBrowserSettings browserSettings;
CefString addStr(addr);
CefBrowser::CreateBrowser( info, static_cast<CefRefPtr<CefClient> >(client),
addStr, browserSettings);
return 0;
}
2.通过上述方法,实现了单文档MFC的命令行参数传递,但是发现打开传递网站的地址后,网页没有充满整个对话框,不过还是让哥找到了解决办法:
在刚才添加cmdInfo的函数中添加:
//设置对话框初始大小
CRect temprect(0,0,1000,800);
m_pMainWnd->SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
成功解决。。。,。。。
- MFC单文档中嵌入CEF(Chromium Embedded Framework)使用多进程
- CEF Chromium Embedded Framework
- 如何将Chromium Embedded Framework (CEF) 嵌入到你自己的程序中
- 如何将Chromium Embedded Framework (CEF) 嵌入到你自己的程序中
- The Chromium Embedded Framework (CEF)
- CEF嵌入到单文档mfc
- 客户端内嵌页 基于Chromium Embedded Framework (CEF)
- Chromium Embedded Framework 中文文档(简介)
- Chromium Embedded Framework 中文文档(简介)
- MFC嵌入CEF
- 多文档嵌入Chrome CEF求教
- Chromium Embedded Framework 3
- Chromium Embedded Framework
- MFC单文档嵌入对话框
- 在mfc中使用cef
- CEF架构(Chromium嵌入框架)小结
- Chromium与CEF的多进程模型及相关参数
- MFC应用程序中嵌入一个谷歌cef浏览器
- 黑马程序员-枚举
- hdu4528
- hdu 不容易系列之(3)—— LELE的RPG难题
- 利用PIL生成水印图片或文字
- 消除“Android NDK: WARNING: APP_PLATFORM”的方法
- MFC单文档中嵌入CEF(Chromium Embedded Framework)使用多进程
- 我的知识管理工具列表
- Aspose Word模板使用总结
- WINCE Activesync 同步问题
- 使用connect by、Sys_Connect_By_Path实现的SQL
- uva112 Tree Summing(二叉树 + 栈)
- web aria 例子
- java中常用的时间处理类TimeUtil
- Unity3D 碰撞