请教用CHtmlView视图时,能否交替显示网页和文本框

nongfuxu 2014-02-05 07:10:14
请教,使用CHtmlView视图后,
能不能由工具条控制,使它既可以显示百度地图网页,又可以切换到平常桌面应用程序中常见的文本编辑框、列表等。
若是可以实现的话,请教怎么构思程序框架结构。
...全文
83 点赞 收藏 9
写回复
9 条回复
nongfuxu 2014年02月06日
引用
创建两个view,一个CHtmlView,一个CFormView,根据条件显示不同的view
嗯,我就是想这样做。只是不知道在哪里插入 视图切换代码。 比方在工具条上有二个互斥按键,在响应函数中怎么进行“视图切换”
回复 点赞
sryteawrt 2014年02月06日
这个不是很轻了
回复 点赞
worldy 2014年02月06日
1,应该就是这样 2,参考下面例子
h文件
#pragma once

#ifdef _WIN32_WCE
#error "Windows CE 不支持 CMDIChildWnd。"
#endif 

// 带有拆分器的 CxChildFrameX 框架

class CxViewA : public CView
{
	DECLARE_DYNCREATE(CxViewA)

protected:
	CxViewA();           // 动态创建所使用的受保护的构造函数
	virtual ~CxViewA();

public:
	virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图
#ifdef _DEBUG
	virtual void AssertValid() const;
#ifndef _WIN32_WCE
	virtual void Dump(CDumpContext& dc) const;
#endif
#endif

protected:
	DECLARE_MESSAGE_MAP()
};

class CxViewB : public CView
{
	DECLARE_DYNCREATE(CxViewB)

protected:
	CxViewB();           // 动态创建所使用的受保护的构造函数
	virtual ~CxViewB();

public:
	virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图
#ifdef _DEBUG
	virtual void AssertValid() const;
#ifndef _WIN32_WCE
	virtual void Dump(CDumpContext& dc) const;
#endif
#endif

protected:
	DECLARE_MESSAGE_MAP()
};


class CxChildFrameX : public CMDIChildWnd
{
	DECLARE_DYNCREATE(CxChildFrameX)
public:
	CxChildFrameX();           // 动态创建所使用的受保护的构造函数
	virtual ~CxChildFrameX();

protected:
	CSplitterWnd m_wndSplitter;

protected:
	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);

	DECLARE_MESSAGE_MAP()
};

cpp文件
// xChildFrameX.cpp : 实现文件
//

#include "stdafx.h"
#include "OpenCV_MFC.h"
#include "xChildFrameX.h"

// CxViewA

IMPLEMENT_DYNCREATE(CxViewA, CView)

CxViewA::CxViewA()
{

}

CxViewA::~CxViewA()
{
}

BEGIN_MESSAGE_MAP(CxViewA, CView)
END_MESSAGE_MAP()


// CxViewA 绘图

void CxViewA::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: 在此添加绘制代码

	CRect rx;
	GetClientRect(&rx);
	CString cs="This is ViewA";
	CSize sz=pDC->GetTextExtent(cs);
	pDC->TextOut((rx.Width()-sz.cx)/2,(rx.Height()-sz.cy)/2,cs);
}


// CxViewA 诊断

#ifdef _DEBUG
void CxViewA::AssertValid() const
{
	CView::AssertValid();
}

#ifndef _WIN32_WCE
void CxViewA::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif
#endif

// CxViewB

IMPLEMENT_DYNCREATE(CxViewB, CView)

CxViewB::CxViewB()
{

}

CxViewB::~CxViewB()
{
}

BEGIN_MESSAGE_MAP(CxViewB, CView)
END_MESSAGE_MAP()


// CxViewB 绘图

void CxViewB::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: 在此添加绘制代码

	CRect rx;
	GetClientRect(&rx);
	CString cs="This is ViewB";
	CSize sz=pDC->GetTextExtent(cs);
	pDC->TextOut((rx.Width()-sz.cx)/2,(rx.Height()-sz.cy)/2,cs);

}


// CxViewB 诊断

#ifdef _DEBUG
void CxViewB::AssertValid() const
{
	CView::AssertValid();
}

#ifndef _WIN32_WCE
void CxViewB::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif
#endif //_DEBUG
// CxViewB 消息处理程序

// CxChildFrameX

IMPLEMENT_DYNCREATE(CxChildFrameX, CMDIChildWnd)

CxChildFrameX::CxChildFrameX()
{

}

CxChildFrameX::~CxChildFrameX()
{
}

BOOL CxChildFrameX::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
	//return m_wndSplitter.Create(this,
	//	2, 2,       // TODO: 调整行数和列数
	//	CSize(10, 10),  // TODO: 调整最小窗格大小
	//	pContext);
	m_wndSplitter.CreateStatic(this,2,1);
	m_wndSplitter.SetRowInfo(0,300,100);
	m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CxViewA),CSize(0,200),pContext);
	m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CxViewB),CSize(0,0),pContext);
	return TRUE;
}

BEGIN_MESSAGE_MAP(CxChildFrameX, CMDIChildWnd)
END_MESSAGE_MAP()


// CxChildFrameX 消息处理程序
回复 点赞
nongfuxu 2014年02月06日
感谢回复。 您说的是不是在框架窗体的同一个位置区域上,先同时生成二个View,然后用SetWindowPos()来具体决定显示哪一个吗? 如果用了分割窗,左边是TREE控件,右边是这二个VIEW,那么在框架生成上述二个VIEW,怎样实现(可以实现嘛)?
回复 点赞
worldy 2014年02月06日
SetWindowPos
回复 点赞
worldy 2014年02月05日
另外,你还可以使用一个本地简单的html代码其中含文本输入标签用于输入,在不同的时候加载本地文件或远程文件,这样只需要HtmlView即可
回复 点赞
worldy 2014年02月05日
窗口中创建一个HTMLView,一个普通View根据需要将不同的View置前,应该就是你要的效果
回复 点赞
oyljerry 2014年02月05日
创建两个view,一个CHtmlView,一个CFormView,根据条件显示不同的view
回复 点赞
nongfuxu 2014年02月05日
现在用VC向导生成的程序中,显示网页和代码如下: IMPLEMENT_DYNCREATE(CTEST5View, CHtmlView) void CTEST5View::OnInitialUpdate() //CHtmlView类派生 { CHtmlView::OnInitialUpdate(); Navigate2(_T("http://www.msdn.microsoft.com/visualc/"),NULL,NULL); } 请教: 怎样修改能实现“交替显示网页和文本框”?
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7889

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告