我正在更新窗口的标题栏:
/* inside the window procedure */
HWND edit_handle;
/* ... */
case WM_COMMAND: {
if (LOWORD(wParam) == 2) { /* 2 is the code for the button */
int len = GetWindowTextLengthW(edit_handle);
if (len > 0) {
wchar_t buf[len + 1];
GetWindowTextW(edit_handle, buf, len + 1);
SetWindowTextW(hwnd, buf);
}
}
break;
}
但是,当我拨打SetWindowTextW
时,标题栏不会改变:它仍然是以前的样式。
edit_handle
是EDIT控件的句柄。
之前(刚加载窗口时):
按OK按钮后
答案 0 :(得分:4)
如前所述,问题似乎是edit_handle
的实际价值。
请记住,每次窗口收到消息时,Windows都会调用您的窗口过程。因此,处理上一条消息时分配的局部变量的值将消失...
如果你需要"记住"与窗口关联的数据会查看WIN API函数SetWindowLongPtr(hwnd, GWLP_USERDATA, ...)
和GetWindowLongPtr(hwnd, GWLP_USERDATA)
。这些函数设置和查询"变量"窗口的大小足以容纳指向某些数据的指针。
在您的情况下,解决方案更简单。由于每个窗口都分配了一个唯一的id,因此您可以使用以下语句获取编辑控件的窗口句柄:
edit_handle = GetDlgItem(hwnd, ... );
您必须将...
替换为编辑控件的ID。如果您通过调用CreateWindow(..)
自行创建编辑控件,则这是hMenu
属性的值。如果使用来自资源的对话框,则它只是控件的ID。