mfc多文档重载onfilenew_【专题3:电子工程师 之 上位机】 之 【1.嵌入式工作中qt用得多吗?】...

希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路....原创不易,文章会持续更新,感谢您的关注

1.qt是什么?
百度百科:qt是一个跨平台C++图形用户界面应用程序开发框架。

qt也是一个软件,利用这个软件加上c++语言,可以很容易开发出一些带界面的程序。理论上你看到的带界面的程序,都可以用qt开发,譬如下面的这些。

c87322923eed697d79b3e0da0786385c.png

21e8e3b3c1ee03ad1dfade05ffab06b2.png

完全可以用qt开发一个pc端的腾讯会议出来。用什么语言开发呢?用c++语言。开发出来的软件开发运行在哪里?可以运行在windows电脑上,也可以运行在苹果电脑上,也可以运行在跑linux系统的嵌入式设备中。这就是跨平台。对于跨平台的理解,可以看文章【专题1:电子工程师 之 软件】 之 【2.对CPU架构的一些理解】。

和qt对等关系的还是微软的MFC,但不是很好用,并且不开源。

2.qt的优点

(1)用c++开发。因为嵌入式工程师用得比较熟悉的是C语言。而c++完全兼容c,所以即使你没学过c++,仅仅依靠c的知识,也完全可以开发出一个带界面的程序。

(2)qt开发工具非常简洁,它的帮助文档非常强大,基本不用看任何资料,直接看帮助文档就可以用得非常溜。

726db31f3cfb537399a68fa982774b98.png

(3)子模块非常全:所谓的框架是指,我们写程序需要按照qt的规则来写代码。蓝牙,各种总线以及网络,数据库应有尽有。


(4)跨平台:几乎可以不用改一行代码就可以到处编译到处运行。

(5)开源免费:不仅免费,连源码都可以看和自己改。


(6)可以真正做到界面与业务逻辑完全分离,MFC是做不到这么彻底的。

正因为有这些优点,在电脑端以及嵌入式端带界面的软件解决方案中,qt还是用得很多的。

a937d8fbfe6583a0badc2195d7b320a1.png

专注于 嵌入式 qt知识分享

欢迎扫码关注
“嵌入式工程师成长之路”

a51729b556c3995a8f571e75d542f794.gif

a51729b556c3995a8f571e75d542f794.gif
以下是详细的cef3嵌入mfc文档视图的教程: 1. 创建MFC文档视图应用程序。 在Visual Studio创建一个MFC应用程序,选择MFC文档应用程序作为应用程序类型,接着按照向导的提示完成应用程序的创建。 2. 添加CEF3控件。 在应用程序的主框架窗口添加一个CEF3控件,可以使用MFC自带的WebBrowser控件,也可以使用第三方的CEF3控件。 使用MFC自带的WebBrowser控件,可以在主框架窗口的OnInitDialog函数添加以下代码: ``` CRect rect; GetClientRect(&rect); m_webBrowser.Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rect, this, IDC_EXPLORER); m_webBrowser.Navigate(_T("about:blank"), NULL, NULL, NULL, NULL); ``` 使用第三方的CEF3控件,可以在主框架窗口的OnInitDialog函数添加以下代码: ``` CRect rect; GetClientRect(&rect); m_cef3.Create(rect, this, 0); m_cef3.InitBrowser("http://www.baidu.com"); ``` 其,m_webBrowser和m_cef3分别是WebBrowser控件和CEF3控件的成员变量。 3. 创建文档类。 创建一个派生自CDocument的文档类,在其添加CEF3的初始化和销毁代码。可以在文档类的构造函数添加以下代码来初始化CEF3: ``` CefRefPtr<CefCommandLine> command_line = CefCommandLine::CreateCommandLine(); CefRefPtr<CefApp> app = new CCefApp; CefMainArgs args(::GetModuleHandle(NULL)); CefExecuteProcess(args, app.get(), NULL); CefSettings settings; CefInitialize(args, settings, app.get(), NULL); ``` 在文档类的析构函数添加以下代码来销毁CEF3: ``` CefShutdown(); ``` 4. 创建视图类。 创建一个派生自CView的视图类,在其添加CEF3的初始化和销毁代码。可以在视图类的构造函数添加以下代码来初始化CEF3: ``` CefRefPtr<CefRequestContext> request_context = CefRequestContext::CreateContext(CefRequestContextSettings(), NULL); CefRefPtr<CefBrowser> browser = CefBrowserHost::CreateBrowserSync(NULL, request_context, this, CefBrowserSettings(), NULL, NULL); CefWindowHandle hwnd = browser->GetHost()->GetWindowHandle(); ::SetParent(hwnd, GetSafeHwnd()); ``` 在视图类的析构函数添加以下代码来销毁CEF3: ``` CefRefPtr<CefBrowserHost> host = browser->GetHost(); host->CloseBrowser(true); browser = NULL; ``` 其,browser是CEF3的浏览器对象。 5. 添加消息处理函数和事件处理函数。 在视图类添加CEF3控件的消息处理函数和事件处理函数。 消息处理函数的代码如下: ``` void CMyView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if (browser && browser->GetHost()) { CefRect rect(0, 0, cx, cy); browser->GetHost()->WasResized(); browser->GetHost()->SetFocus(true); } } ``` 事件处理函数的代码如下: ``` bool CMyView::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser, CefProcessId source_process, CefRefPtr<CefProcessMessage> message) { if (message->GetName() == "custom_message") { // 处理自定义消息 return true; } return false; } ``` 6. 注册文档类型。 在应用程序的主框架窗口,使用相应的文档类和视图类注册一个新的文档类型。可以在主框架窗口的InitInstance函数添加以下代码来注册文档类型: ``` CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate(IDR_MFCApplicationTYPE, RUNTIME_CLASS(CMFCApplicationDoc), RUNTIME_CLASS(CChildFrame), // 自定义框架窗口类 RUNTIME_CLASS(CMFCApplicationView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); ``` 其,CChildFrame是自定义的框架窗口类,CMFCApplicationView是自定义的视图类。 7. 创建文档。 在应用程序的主框架窗口,使用相应的文档类和视图类创建一个新的文档。可以在主框架窗口的OnFileNew函数添加以下代码来创建文档: ``` CDocument* pDoc = NULL; CMultiDocTemplate* pTemplate = GetDocTemplate(RUNTIME_CLASS(CMFCApplicationDoc)); if (pTemplate != NULL) pDoc = pTemplate->CreateNewDocument(); if (pDoc != NULL) { AddDocument(pDoc); pDoc->SetTitle(_T("New Document")); pDoc->OnNewDocument(); CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDoc, NULL); if (pFrame != NULL) { pTemplate->InitialUpdateFrame(pFrame, pDoc); } } ``` 其,CMFCApplicationDoc是自定义的文档类。 8. 显示CEF3控件。 在新文档的视图,初始化并显示CEF3控件。可以在视图类的OnInitialUpdate函数添加以下代码来显示CEF3控件: ``` CRect rect; GetClientRect(&rect); browser->GetHost()->SetSize(PET_VIEW, rect.Width(), rect.Height()); browser->GetHost()->WasResized(); browser->GetHost()->SetFocus(true); ``` 其,browser是CEF3的浏览器对象。 以上就是cef3嵌入mfc文档视图的详细教程,希望能够对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值