ANSI时期的代码:
CSharedFile sf(GMEM_MOVEABLE | GMEM_SHARE | GMEM_ZEROINIT);
TCHAR sz[200];
/* 
   下面这句不要管,这个是RTF格式的字符串(用VC以2进制打开.rtf文件可见类似代码
   效果是字号为12 (fs24/2)的ABC, Arial字体
*/
_tcscpy(sz, _T("{\\rtf1{\\fonttbl{\\f0\\fnil Arial;}}\r\n\\f0\\fs24 ABC}"));sf.Write(sz, _tcslen(sz) * sizeof(TCHAR)); 
OpenClipboard();
EmptyClipboard();
/*
RICHEDIT.H, #define CF_RTF TEXT("Rich Text Format")
*/
SetClipboardData(::RegisterClipboardFormat(CF_RTF), sfRTF.Detach());
CloseClipboard();运行正常的很, 但是改成UNICODE后,在Word或WordPad下粘贴不出格式化的文本,只能粘贴出第一个"{".是不是往CSharedFile sf里写UNICODE字符的问题,该怎么修改?

解决方案 »

  1.   

    word2003现象和你的不一样
    建议往CSharedFile sf写前先将UNICODE转成ANSI
      

  2.   

    你能确定你的CSharedFile现在支持UNICODE么?
      

  3.   

    如果不能,就干脆用ANSI字符串
      

  4.   

    或者放弃普通方法,改用基于COM的OLE剪切板就可以支持UNICODE较好
      

  5.   

    CSharedFile是MFC基础类。CFile->CMemFile->CSharedFile
    哪位老大给个TCHAR sz[200];到ANSI字符串的带码,我现在有点混乱,看了看msdn好像用这个函数:WideCharToMultiByte 但是不明白WCHAR, TCHARyoushenme区别,以前ANSI一直是char sz[200]这样用,怎么突然冒出一个WCHAR??
      

  6.   

    USES_CONVERSION;
    szAnsi = W2A(sz);P.S.WCHAR就是宽字节wchar_t,Unicode用的
      

  7.   

    为什么用W2A而不用T2A?
    W (LPWSTR) 是wchar_t么?
    那T (LPTSTR)是什么?
    A (LPSTR)是char吧.
      

  8.   

    知道了,LPTSTR也是按_UNICODE变的宏阿