当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

STL字符串类与UNICODE及别的[VC/C++编程]

赞助商链接



  本文“STL字符串类与UNICODE及别的[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

我想让用户双击程序图标时按住 Control 键,以一种特别的方法来启动程序. 但::GetCommandLine 和__argc 均没有任何反映,用 MFC 中的 CCommandLineInfo 仿佛也是如此.有没有一种办法可以办理这个问题呢?

有,非常简单.你所要做的就是调用 GetKeyState.当你正在处理的当前消息被发送时, 该函数返回虚拟键的状况.这个状况大概是弹起,按下,大概套索钉.套索钉用于大写锁定( Caps)和转换锁(Shift Lock),它们可以转换状况.关于普通的 键,如掌握键(VK_CONTROL),假如键被按下,则其状况的高位标识位为 1.

很多的利用程序利用 Control+F8 作为特别键来启动恢复情势.比方,假如利用程序答应用户 定制工作间,那么Control+F8便可以将其恢复到初始的默许设置,只是在恢复之前一定要让用户举行确认.做的更好一点的话,你可以在单独的INI文件中保存用户的设置,这样用户 有机会恢复它们.不管怎样,要想在程序启动时查抄 Control 键,你可以像下面这样写:

if (GetKeyState(VK_CONTROL)<0)
{
// enter special mode
}

Figure 1 给出了一个基于 MFC 的示例程序代码段,你可以通过本文顶端的链接举行下载,假如用户在启动程序的时刻按下Ctrl+F8,它将显示一个消息框,并且 发出蜂鸣声.假如你只是想查抄 Control键,可以忽视对 VK_F8 键的测试.

我常常在 C++ 程序中利用尺度模板库(STL)的 std::string 类,但在 利用 Unicode 时碰到了问题.在利用通例 C 气势的字符串时,我可以利用 TCHAR 和 _T 宏,这样针对 Unicode 或 ASCII 都可以举行编译,但我 老是发现这种ASCII/Unicode的结合很难与 STL 的 string 类一同利用.你有什么好的倡议吗?

是的,一旦知道 TCHAR 和_T 是若何工作的,那么这个问题很简单.基本思惟是 TCHAR 要末是char,要末是 wchar_t,这取决于 _UNICODE 的值:

// abridged from tchar.h
#ifdef _UNICODE
typedef wchar_t TCHAR;
#define __T(x) L ## x
#else
typedef char TCHAR;
#define __T(x) x
#endif

当你在工程设置中挑选 Unicode 字符集时,编译器会用 _UNICODE 定义举行编译.假如你挑选MBCS(多字节字符集),则编译器将不会带 _UNICODE 定义 .一切取决于_UNICODE 的值.一样,每一个利用字符指针的 Windows API 函数会有一个 A(ASCII) 和一个 W(Wide/Unicode) 版本,这些版本的 实际定义也是按照 _UNICODE 的值来决意:

#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif

一样,_tprintf 和 _tscanf 对应于 printf 和 scanf.全部带"t"的版本利用 TCHARs 代替了chars.那么怎样把以上的这些利用到 std::string 上呢?很简单.STL已经有一个利用宽字符定义的wstring类 (在 xstring 头文件中定义).string 和 wstring 均是利用 typedef 定义的模板类,基于 basic_string, 用它可以成立任何字符范例的字符串类.以下就是 STL 定义的 string 和 wstring:

// (from include/xstring)
typedef basic_string< char,
char_traits< char >, allocator< char > >
string;
typedef basic_string< wchar_t,
char_traits< wchar_t >, allocator< wchar_t > >
wstring;

模板被潜在的字符范例(char 或 wchar_t)参数化,因此,关于 TCHAR 版本,所要做的就是利用 TCHAR 来模拟定义.

typedef basic_string< TCHAR,
char_traits< TCHAR >,
allocator< TCHAR > >
tstring;


  以上是“STL字符串类与UNICODE及别的[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • STL字符串类与UNICODE及别的
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .