从编辑框中获取控件文本
一般常用的方法是,
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: ¬e[0]*/, length + 1); note.resize(length); }
请注意,从技术上讲,这是C ++ 11之前的未定义行为,因为不能保证wstring
的data()
和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); }