状态栏问题

cdm2179 2010-01-27 02:21:17
代码如下:

int pInt[] = { 150, -1 };
// 分栏
::SendMessage(hWndStatus, SB_SETPARTS, 2, (LPARAM)pInt);
// 设置各栏的文本
::SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)" Windows");

问题就是我要在状态栏显示" Windows"字符串,但是显示的是乱码?
我用的是UNICODE字符,应该(LPARAM)" Windows"这里转换出问题了!
...全文
51 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdm2179 2010-01-27
  • 打赏
  • 举报
回复
#define __T(x) L##x
明白了
谢谢各位了
快乐鹦鹉 2010-01-27
  • 打赏
  • 举报
回复
就是一个自动转换,加了L后,如果在UNICODE下,则自动转换。
wwgddx 2010-01-27
  • 打赏
  • 举报
回复
L就是把ASCII转换为UNICODE
wwgddx 2010-01-27
  • 打赏
  • 举报
回复
L 是根本,_T 只是形式。


看如下定义:


如果定义了_UNICODE标识符,那么一个称作__T的宏就定义如下:

#define __T(x) L##x


如果没有定义_UNICODE标识符,则__T宏只简单地定义如下:

#define __T(x) x

///////

举个例子,即可明白:

CString str = _T("12345");

在非 UNICODE 工程下等于:

CString str = "12345";

在 UNICODE 工程下等于:

CString str = L"12345";

这个在编译时就决定了,其实就是个宏替换。
cdm2179 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
::SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)L(" Windows")); 呢?
[/Quote]

搞定了!能解释下为什么码?
快乐鹦鹉 2010-01-27
  • 打赏
  • 举报
回复
::SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)L(" Windows")); 呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧