win32- GetWindowText

从编辑框中获取控件文本

一般常用的方法是,

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);
}

 

原文链接: https://www.cnblogs.com/strive-sun/p/12893122.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    win32- GetWindowText

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404922

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月25日 下午4:47
下一篇 2023年4月25日 下午4:48

相关推荐