需要做一个unicode的编辑器;但是用Cview下太麻烦了!我想用CEditview,不知道行不行?
行的话,在doc下的那里对文件数据进行unicode处理,是重载OnopenDocument下,还是Serialize下,还是别的地方!
处理的数据放到哪能让数据自动输出?先谢谢各位!麻烦大家帮帮我!

解决方案 »

  1.   

    如果可以的话数据怎样处理,在OnopenDocument下,还是Serialize下?
    我还想让数据输出按原来的输出!好在输出上做一些操作:比如复制,粘贴等等!
    怎样让处理后数据按原有的方式输出?
      

  2.   

    文本编辑设计Unicode不Unicode的问题么?
      

  3.   

    不懂撒,现在的windows都是UNICODE内核的,好像你就算用ANSI编译,edit控件内部依旧会以UNICODE
    形式存储字符串。你指的是读取和保存为磁盘文件时用UNICODE编码吧?
      

  4.   

    工程设置为Unicode版本。
    使用Unicode版的字串,以及字串处理函数。 
      

  5.   

    重载OnopenDocument 和Serialize都可以哈
      

  6.   

    我找到方法了:
    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);

    }
    还是要谢谢大家!
    结贴!