win32- GetWindowText

摘要:
只能保证c_Str()以NULL结尾。

从编辑框中获取控件文本

一般常用的方法是,

wchar_t buffer[100];
GetWindowText(hWnd, buffer, sizeof(buffer) / sizeof(buffer[0]));

但是这样浪费了数组空间, 所以一般使用GetWindowTextLengthW获取控件文本的长度,前提是以string声明字符串

wstring note;
int length = GetWindowTextLengthW(hWnd);
if (length > 0)
{
    note.resize(length);
    length = GetWindowTextW(hWnd, note.data()/*or: &note[0]*/, length + 1);
    note.resize(length);
}

请注意,从技术上讲这是C ++ 11之前的未定义行为,因为不能保证wstringdata()operator[]成员返回指向连续内存中数据的指针,并且不能保证缓冲区以null结尾。只有c_str()可以保证以NULL结尾。所以我们常常可以使用const_cast<wchar_t*>移除const属性

wstring note;
int length = GetWindowTextLengthW(hWnd);
if (length > 0)
{
    note.resize(length);
    length = GetWindowTextW(hWnd, const_cast<wchar_t*>(note.c_str()), length + 1);
    note.resize(length);
}

如果您想对其合法,则在C ++ 11之前使用单独的缓冲区,然后将其复制到wstring之后,例如:

wstring note;
int length = GetWindowTextLengthW(hWnd);
if (length > 0)
{
    ++length;
    vector<wchar_t> buf(length);
    length = GetWindowTextW(hWnd, &buf[0], length);
    note.assign(&buf[0], length);
}

免责声明:文章转载自《win32- GetWindowText》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dataframe 针对列条件赋值VMware安装虚拟机及网络配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')

转:http://blog.sina.com.cn/s/blog_9ffcd5dc01014nw9.html 前面的几天一直都在复习着被实习落下的C++基础知识。今天在复习着上次创建的窗口程序时,出现了一个错误,百思不得其解。因为是同样的代码,上次的都能顺利的通过编译,这次自己新建了一个工程结果就有一个错误出现,是在调用Create()函数时,传参数出现问...

Ansi,UTF8,Unicode编码(续)

1.三种编码的回顾 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件。 Unicode字符串,每个字符(汉字、英文字母)都占2个字节;在VC++的世界里,Microsoft比较鼓励使用Unicode,如wchar_t。 UTF8是Unicode一种压缩形式,英文A在unicode中表示为0x0041,英语中这种存...

Windows 程序支持 Unicode

宽字符 阅读了 UTF-8 Everywhere 一文,推荐在程序中对于字符串都使用 UTF-8 编码。Unix-like 系统默认是支持 UTF-8 编码的Unicode字符串,标准库函数也默认支持 UTF-8 字符串,如 fopen 等。但在 Windows 系统,由于历史原因,其对需要输入宽字符的函数提供了另外以 w 开头的标准库扩展函数,如 _wf...

wchar_t,char,string,wstring等的总结

一、LPSTR LPCSTR LPTSTR LPCTSTR等 确定的类型: LPSTR = CHAR * = char *LPCSTR = const CHAR * = char * //c意为const  不确定类型(可变型): LPTSTR = LPWSTR = WCHAR * = wchar_t * //(Unicode编码) = LPSTR =...

wchar_t引发的思考

思考是由wchar_t引发的,干嘛要用wchar_t?我用char[]可以顺利的输出汉字啊!char是一个字节,wchar_t是2个字节或者4个字节的。 1.unicode字符集一开始概念很混乱,发了几个帖子,和别人讨论了几天,自己理顺了下概念。我简单用我的话概括一下:unicode字符集,什么是字符集,字符集就是一个映射表计算机通过它找到对应的字符;un...

Aery的UE4 C++游戏开发之旅(5)字符&amp;amp;字符串

目录 TCHAR 字符 使用TEXT()宏包裹字符串字面量 转换字符编码 FString 字符串 FString 剖析 FString 使用 FName 字符串 FName 剖析 FName 使用 FText 字符串 FText 剖析 FText 使用 总结 参考 TCHAR 字符 C++支持两种字符集:即常见的ANSI编...