c - 更新标题栏 Winapi

标签 c windows winapi

我正在更新窗口的标题栏:

/* 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 控件的句柄。

之前(当窗口刚刚加载时):

Before I edited the EDIT

按下 OK 按钮后 After Pressing the 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/

相关文章:

c - 使用 # 和 ## 运算符的嵌套宏实现

c - 为什么被调用函数的指针不返回值给调用函数?

c++ - 等待线程结束 (C++)

c++ - 资源图像不工作 C++

c# - 多次按 Tab 键后不再调用线程 Hook 程序。为什么?

c - 如果未初始化变量的值不应该影响表达式的值,它仍然是 UB 吗?

php - 在 PHP 中从用户输入自动加载所需的类

windows - 如何使用 Perl 在 Windows 中获取没有文件名的路径?

windows - LogicalBytesPerSector 与 PhysicalBytesPerSector

c++ - Windows 中的串行通信 - ClearCommError 在读取缓冲区中找不到数据