LPTSTR解释

 与char*等价,表示普通字符/ 字符串变量,指向字符/字符串的指针。
  LP:长指针(long pointer)。
  T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。
  STR:表示这个变量是一个字符串。
  /* LPTSTR 转换成 CString */
  (1)直接赋值
  CString strText;
  LPTSTR lpszText = _T("LPTSTR >> CString");
  strText = lpszText;
  ::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
  (2)CString::Format()格式化
  CString strText;
  LPTSTR lpszText = _T("LPTSTR >> CString");
  strText.Format( _T("%s"), lpszText );
  ::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
  /* CString 转换成 LPTSTR */
  (1) 强制转换
  CString strText( _T("This is a test") );
  LPTSTR lpszText =(LPTSTR)(LPCTSTR)strText;
  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
  (2)使用lstrcpy()
  CString strText( "This is a test" );
  LPTSTR lpszText = new TCHAR[strText.GetLength()+1];
  lstrcpy( lpszText, strText );
  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
  (3)使用CString::GetBuffer()
  CString strText(_T("This is a test "));
  LPTSTR lpszText = strText.GetBuffer();
  strText.ReleaseBuffer();
  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
  /* char * 转换成 CString
  char chArray[] = "This is a test";
  char * p = "This is a test";
  CString theString = chArray;
  theString.Format(_T("%s"), chArray);
  theString = p;
  /* CString转换成char*
  1.
  CString theString( "This is a test" );
  LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
  _tcscpy(lpsz, theString);
  2.
  CString s(_T("Char test "));
  LPTSTR p = s.GetBuffer(); [1]
  LPTSTR dot = strchr(p, ''.'');
  // 在这里添加使用p的代码
  if(p != NULL)
  *p = _T('');

  s.ReleaseBuffer();

关于c++中LPTSTR  LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t区别

  L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。

  P表示这是一个指针。

  T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。

  STR表示这个变量是一个字符串。

  C表示是一个常量,const。

  LPTSTR:

  如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。typedef LPTSTR LPWSTR;

  否则LPTSTR被定义为LPSTR。 typedef LPTSTR LPSTR;

  下面列出一些常用的typedefs:

  类型 MBCS Unicode

  WCHAR wchar_t wchar_t

  LPSTR char* char*

  LPCSTR const char* const char*

  LPWSTR wchar_t* wchar_t*

  LPCWSTR const wchar_t* const wchar_t*

  TCHAR char wchar_t

  LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)

  LPCTSTR const TCHAR* const TCHAR*

  由于Win32 API文档的函数列表使用函数的常用名字(例如, SetWindowText"),所有的字符串都是用TCHAR来定义的。(除了XP中引入的只适用于Unicode的API)。所以结论,在VS2005系统中,为提高可移植性,定义字符串时用TCHAR,转化为UNICODE时用_T而不用L。

 

你可能感兴趣的:(c,windows,api,XP,null,文档)