概述
《VC Web打印解决方案概述》这篇博文里面,简单介绍了在windows下html离线、在线网页打印解决方案,针对的是特殊需求。经过好几周的研究终于完整的实现与应用配合进行打印的功能。实际应用的时候没用这种方式,用的是基于对话框模式。
这里记录一下实现的一些功能,权当学习、熟悉一下MFC编程。实现的功能有以下几点:
- View界面拆分
- 各界面功能实现
- 隐藏界面为后台进程
拆分界面
先看一下效果图:
就是一个非常简陋的界面,先拆分为两行,然后第二行再拆分为两列。
ComBox控件可输入网址或者从下拉列表里面选择历史记录,从文件菜单打开一个URL之后,会将URL添加到ComBox的下拉列表里面,点击【go】按钮,即可在左下方显示网页内容。粗陋的界面先这样。
粗陋界面拆分实现:
在CMainFrame类里面添加如下定义,用于拆分界面:
CSplitterWnd m_wndSplitCols;
CSplitterWnd m_wndSplitRows;
插入两个MFC类,分别为CTopView、CLeftView,基类均为CView,连着新建工程时的view,总共3个view,在CMainFrame类的OnCreateClient方法里面实现窗口的拆分:
// create splitter window
//创建两行一列
if (!m_wndSplitRows.CreateStatic(this, 2, 1))
return FALSE;
//创建第一行view
if (!m_wndSplitRows.CreateView(0,0,RUNTIME_CLASS(CTopView),CSize(0,20),pContext))
{
return FALSE;
}
//在第二行创建两列
if (!m_wndSplitCols.CreateStatic(&m_wndSplitRows, 1, 2,WS_CHILD| WS_VISIBLE,m_wndSplitRows.IdFromRowCol(1,0)))
return FALSE;
//添加view
if (!m_wndSplitCols.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 0), pContext) ||
!m_wndSplitCols.CreateView(0, 1, RUNTIME_CLASS(CWebBrowserDocumentView), CSize(0, 0), pContext))
{
m_wndSplitCols.DestroyWindow();
return FALSE;
}
在CMainFrame类中定义三个view的对象,方便后续使用:
CWebBrowserDocumentView *pWebView;
CTopView *pTopView;
CLeftView *pLeftView;
在OnCreateClient方法中赋值如下:
pWebView = (CWebBrowserDocumentView*)this->m_wndSplitCols.GetPane(0,