我正在更新窗口的标题栏:
/* 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 按钮后
最佳答案
如前所述,问题似乎出在 edit_handle
的实际值上。
请记住,每次您的窗口收到一条消息时,Windows 都会调用您的窗口过程。因此,在处理上一条消息时分配的局部变量值消失了......
如果您需要“记住”与窗口关联的数据,请查看 WIN API 函数 SetWindowLongPtr(hwnd, GWLP_USERDATA, ...)
和 GetWindowLongPtr(hwnd, GWLP_USERDATA)
。这些函数设置和查询窗口的“变量”,该变量足够大以保存指向某些数据的指针以供内存。
在您的情况下,解决方案更简单。由于每个窗口都有一个分配给它的唯一 ID,您可以使用以下语句获取编辑控件的窗口句柄:
edit_handle = GetDlgItem(hwnd, ... );
您必须将 ...
替换为您的编辑控件的 ID。如果您通过调用 CreateWindow(..)
自己创建编辑控件,这是 hMenu
属性的值。如果使用来自资源的对话框,它只是控件的 ID。
关于c - 更新标题栏 Winapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685389/