📄 subject_16605.htm
字号:
<p>
序号:16605 发表者:松鼠 发表日期:2002-09-30 05:52:22
<br>主题:(200分),请详细介绍一下 WCHAR
<br>内容:刚才用到一个函数,在一个地方被卡住了:WCHAR ,所以请明白人详细介绍一下。<BR> WCHAR *szWTextString = NULL;<BR> szWTextString = new WCHAR[ lTextLen + 1 ];<BR><BR>首先,怎样给WCHAR赋值?我用<BR>wcscpy(szWTextString , "93") 失败,error C2664: 'wcscpy' : cannot convert parameter 2 from 'char [3]' to 'const unsigned short *'<BR><BR>然后,想从文本框放字符到这个wchar中,也失败<BR> GetDlgItemText(IDC_EDITNUM, (LPTSTR)szWTextString, 255); 好像没有结果(调试的时候怎么看wchar中的数值?)<BR><BR>最后用<BR> GETTEXTEX GetText;<BR> <BR> GetText.cb = (lTextLen + 1) * sizeof( WCHAR );<BR> GetText.codepage = 1200;<BR> GetText.flags = GT_DEFAULT;<BR> GetText.lpDefaultChar = NULL;<BR> GetText.lpUsedDefChar = NULL;<BR> <BR> // Get the string in a unicode buffer<BR> SendDlgItemMessage( IDC_EDITNUM, EM_GETTEXTEX, (WPARAM)&GetText, (LPARAM)szWTextString );<BR>还是看不出来。<BR><BR>请多解释一些,因为我没有用过Unicode方面的经验。<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-09-30 08:31:32
<br>内容:wcscpy(szWTextString , "93")改为wcscpy(szWTextString , L"93")就可以了.<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Norton AntivVirus 回复日期:2002-09-30 08:43:38
<br>内容:char FilePath[MAX_PATH];<BR>WCHAR NewPath[MAX_PATH];<BR><BR>MultiByteToWideChar(CP_ACP, 0, FilePath, -1, NewPath, MAX_PATH);<BR><BR>可以用这个函数将普通字符串转换为WCHAR
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ylx 回复日期:2002-09-30 08:47:17
<br>内容:关于Unicode的详细资料,请参考 windows程序设计 一书的第2章,讲的非常详细。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:子龙 回复日期:2002-09-30 09:14:57
<br>内容:wcscpy(szWTextString , L"93")<BR>or<BR>wcscpy(szWTextString , _T("93"))<BR><BR><BR>参考资料一:<BR>若要利用 MFC 和 C 运行时对 Unicode 的支持,需要: <BR><BR>定义 _UNICODE。 <BR>在生成程序之前定义 _UNICODE 符号。 <BR><BR>指定入口点。 <BR>在项目的属性页对话框中“链接器”文件夹的“输出”页中,设置 wWinMainCRTStartup 的入口点符号。 <BR><BR>使用“可移植的”运行时函数和类型。 <BR>为 Unicode 字符串处理使用正确的 C 运行时函数。可以使用 wcs 函数族,但您可能更喜欢使用完全“可移植的”(支持国际化的)_TCHAR 宏。这些宏都以 _tcs 为前缀;它们一对一地替换 str 函数族。在“运行时库参考”的国际化节中对这些函数有详细介绍。有关更多信息,请参阅 TCHAR.H 中的一般文本映射。 <BR><BR>使用支持 Unicode 中描述的 _TCHAR 和相关的可移植数据类型。 <BR><BR>正确地处理字符串。 <BR>Visual C++ 编译器将编码的字符串解释为 <BR><BR>L"this is a literal string"<BR>指出这是 Unicode 字符的字符串。可以对文字字符使用相同的前缀。一般使用 _T 宏对字符串进行编码,因此在 Unicode 下字符串编译为 Unicode 字符串,不使用 Unicode 时字符串编译为 ANSI 字符串(包括 MBCS)。例如,不使用: <BR><BR>pWnd->SetWindowText( "Hello" );<BR>而使用: <BR><BR>pWnd->SetWindowText( _T("Hello") );<BR>使用已定义的 _UNICODE,_T 将字符串翻译为以 L 为前缀的格式;否则 _T 将字符串翻译为不带 L 前缀的格式。 <BR><BR>提示 _T 宏与 _TEXT 宏相同。<BR>将字符串长度传递给函数时要小心。 <BR>一些函数需要获取字符串的字符数;另一些函数需要获取字符串的字节数。例如,如果已定义 _UNICODE,则下列对 CArchive 对象的调用无效(str 属于 CString): <BR><BR>archive.Write( str, str.GetLength( ) ); // invalid<BR>在 Unicode 应用程序中,由于每个字符都是双字节宽,因此长度会给出字符数但不给出正确的字节数。所以必须使用: <BR><BR>archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid<BR>它指定要写入的正确字节数。 <BR><BR>但是,MFC 成员函数是面向字符而非面向字节的,因此无需此额外的编码: <BR><BR>pDC->TextOut( str, str.GetLength( ) );<BR>CDC::TextOut 采用字符数而非字节数。 <BR><BR>总之,MFC 和运行时库对 Windows 2000 下的 Unicode 编程提供下列支持: <BR><BR>除数据库类成员函数外,所有 MFC(包括 CString)函数都支持 Unicode。CString 还提供 Unicode/ANSI 转换函数。 <BR>运行时库提供所有字符串处理函数的 Unicode 版本。(运行时库还提供适合 Unicode 或 MBCS 的“可移植”版本。这些版本是 _tcs 宏。) <BR>TCHAR.H 提供可移植的数据类型以及翻译字符串和字符的 _T 宏。请参阅 TCHAR.H 中的一般文本映射。 <BR>运行时库提供 main 的宽字符版本。使用 wmain 使应用程序成为“Unicode 识别”。 <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:松鼠 回复日期:2002-09-30 10:40:01
<br>内容:谢各位。凯凯和绿猪的方法都很见效,可惜没有详细说,让我知其然而不知其所以然。ylx的方法该是鉴底抽薪的斩草除根之法,可惜我手头没有 windows程序设计 的书,能给个连接么? 子龙的帖子让我看得似懂非懂,但起码给了许多信息,我查了msdn中的tchar.h,跳到Generic-Text Mappings主题里,更是云里雾幛。我最怕就是把MFC和 Standard C/C++ 等混在一起,不知所从。另外我找不到你提到的“CString 还提供 Unicode/ANSI 转换函数”,到底是什么?<BR><BR>以上几个兄弟我会另外再开主题送分,现在能不能有哪位兄弟能举重若轻或举轻若重地介绍一下这个东东?<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:松鼠 回复日期:2002-09-30 11:25:26
<br>内容:问题一:在VC调试的时候怎样观察一个WCHAR的值?我用szWTextString一直是指针值,用szWTextString[0]能看出第一个字符来,但是始终不方便,不能看完整个字串。<BR><BR>问题二:采用绿猪的MultiByteToWideChar(CP_ACP, 0, text, -1, szWTextString, StringLength);<BR>如果text是16个字符串,char text[16],那么定义WCHAR szWTextString[]的时候也是16个么?或是32个?<BR>我看typedef unsigned short WCHAR;好像应该还是用 <BR>WCHAR szWTextString[16] 合适。<BR><BR>问题三:现在有CString strTemp="abc",怎样把这个值赋给szWTextString?<BR><BR>问题四:什么时候应该 #define UNICODE ? 我这个程序中用到有WCHAR的API,所以要用到WCHAR的转换,但是没有用#define UNICODE,也成功了。<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:ylx 回复日期:2002-09-30 11:27:47
<br>内容:ftp://pub:pub@pub.chinafsdu.net/%B5%E7%D7%D3%CD%BC%CA%E9/<BR>Programming Windows程式開發設計指南.zip<BR><BR>建议去买本看看,书价160元,我觉得值,经典著作!<BR>---------------------------------------------------------------------<BR>本来想贴出想关内容,可总是出错<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-09-30 17:39:04
<br>内容:建议去看看书,书上比较系统。这些基础的东西还是搞得比较透彻一些为好。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:毛新年 回复日期:2002-10-09 11:17:29
<br>内容:1:使用_bstr_t bstr = pszWText;能直接看pszWText文本<BR>2:使用Unicode编程注意两个问题<BR> 2.1:如果是Char和WChar混合编程,需要清楚整个系统的数据流,那些地方明确是Char,那些地方明确是WChar;<BR> 2.2:如果是完全的WChar,建议使用Unicode,_Unicode,程序入口为<BR>wWinMainCRTStartup.有同仁已经介绍啦.<BR>3: 如果编写国际化程序,最好使用TChar,可以编译成MBCS和UNICODE<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -