需要做一个unicode的编辑器;但是用Cview下太麻烦了!我想用CEditview,不知道行不行?
行的话,在doc下的那里对文件数据进行unicode处理,是重载OnopenDocument下,还是Serialize下,还是别的地方!
处理的数据放到哪能让数据自动输出?先谢谢各位!麻烦大家帮帮我!
行的话,在doc下的那里对文件数据进行unicode处理,是重载OnopenDocument下,还是Serialize下,还是别的地方!
处理的数据放到哪能让数据自动输出?先谢谢各位!麻烦大家帮帮我!
我还想让数据输出按原来的输出!好在输出上做一些操作:比如复制,粘贴等等!
怎样让处理后数据按原有的方式输出?
形式存储字符串。你指的是读取和保存为磁盘文件时用UNICODE编码吧?
使用Unicode版的字串,以及字串处理函数。
void CxxxView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
//考虑到转换编码后保存文件时格式的变化,
//简单处理为允许只读
//GetEditCtrl().SetReadOnly(GetDocument()->m_bReadOnly);
//获取显示内容
HLOCAL hOldText = GetEditCtrl().GetHandle();
ASSERT(hOldText != NULL);
PSTR content=(PSTR)LocalLock(hOldText);
LocalUnlock(hOldText);
//检测当前打开的是否UNICODE 文件,如果是则取消后续操作
if(*((WCHAR*)content)==0XFEFF)
return;
//计算UNICODE编码所需空间大小
int nLenWide = MultiByteToWideChar(CP_ACP, 0, content, -1, NULL, 0);
//分配内存
LPVOID hText = LocalAlloc(LMEM_MOVEABLE, (nLenWide+1)*sizeof(WCHAR));
if (hText == NULL)
AfxThrowMemoryException();
PWSTR lpszText = (PWSTR)LocalLock(hText);
ASSERT(lpszText != NULL);
//将ANSI编码转换成UNICODE 编码
MultiByteToWideChar(CP_ACP, 0, content, -1, lpszText, nLenWide);
LocalUnlock(hText);
LocalFree(hOldText);
GetEditCtrl().SetHandle((HLOCAL)(UINT)(DWORD)hText);
Invalidate();
ASSERT_VALID(this);
}
还是要谢谢大家!
结贴!