对话框中 嵌入RICHEDITView视图 设置垂直文本

   

     这个垂直文本,网上很多人都询问过,可惜没有人能给出正确解决这个问题的方法。

     几经曲折,终于想出了解决垂直排列文字的策略。

 

 

     一开始我的想法 是使用VS2005中的  CRichEditCtrl 控件来做, 但是此控件是2.0版本,不支持垂直文本。

    后来,查了许多资料,谈到,RICHEDIT 4.1版本支持垂直版本

    因此,我就想找个4.1版本的CRichEditCtrl 控件, 可惜的事,找了很久,也没有找到,不得已放弃这个想法。

 

    网上,有很多将CRICHEDITVIEW 提升到4.1版本的方法,可以没有将CRICHEDITCTRL 提升到4.1版本的方法, 此控件是VS2005提供的,是使用2.0版本编写的,因此,除非自己写个4.1版本的控件,否则还真没有找到可行方法。

 

   问题还是要解决的,既然CRICHEDITVIEW 支持垂直文本,那就从这入手吧

  

   首先,测试4.1版本的cricheditview是否真的支持垂直文本

 

    继承CRichEditView  建一个自己的richeditview

 

    在PreCreateWindow()中 更改注册窗口名为4.1版本的窗口名RICHEDIT50W,并设置为垂直文本样式

 

 

BOOL CMyrichEditView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此添加专用代码和/或调用基类
	BOOL bRes = CRichEditView::PreCreateWindow(cs);
	cs.style |= ES_VERTICAL;
	cs.lpszClass =  TEXT("RICHEDIT50W");
	return bRes;
}


在APP的初始化函数中加载4.1版本的DLL------MSFTEDIT.DLL

BOOL CTestApp::InitInstance()
{
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	AfxEnableControlContainer();

	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
	if (LoadLibrary(_T("MSFTEDIT.DLL")) == NULL)
	{
		AfxMessageBox(_T("Could not load the RichControl Dll."), MB_OK|MB_ICONEXCLAMATION);
		return FALSE;
	}

	CTestDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此处放置处理何时用“确定”来关闭
		//  对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用“取消”来关闭
		//  对话框的代码
	}




#ifdef _DEBUG
	m_msOld.Checkpoint();
#endif  // _DEBUG

	return FALSE;
}


 

经测试, 可以实现垂直文本

 

好,既然这个View类可以实现垂直文本,那就以此为突破口

 

因此有了以下思路:

          既然视图view类可以实现这个功能,那么我如果能将这个视图嵌入到对话框中,不就也可以实现所要求的功能了吗?

 

         那么,下一步的工作就是,视图能不能嵌入对话框中,能不能嵌入

 

         经查资料,完全可以嵌入对话框  ,而且方法很简单

 

在对话框中,嵌入支持垂直文本的视图

 

方法如下: 在对话框初始化函数中添加如下语句

 

	CDialog::OnInitDialog();

	//m_pRichEditView=NULL;
	CCreateContext pContext;
	CWnd *pFrameWnd=this;
	pContext.m_pCurrentDoc=((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();// 若无文档 ,可以自己建一个文档类
	pContext.m_pNewViewClass=RUNTIME_CLASS(CMyRichEditView);
	CMyRichEditView *pView=(CMyRichEditView*)((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
	ASSERT(pView);
         m_pRichEditView=pView;
	pView->ShowWindow(SW_NORMAL);


 

然后通过 pView->MoveWindow()  确定视图的显示位置

 

经测试, 视图嵌入到了对话框中,并实现了垂直文本功能

 

效果图如下:

 

对话框中 嵌入RICHEDITView视图 设置垂直文本_第1张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(工作,测试,null,Class,文档)