更新标题栏Winapi

时间:2014-11-01 01:12:53

标签: 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

1 个答案:

答案 0 :(得分:4)

如前所述,问题似乎是edit_handle的实际价值。

请记住,每次窗口收到消息时,Windows都会调用您的窗口过程。因此,处理上一条消息时分配的局部变量的值将消失...

如果你需要"记住"与窗口关联的数据会查看WIN API函数SetWindowLongPtr(hwnd, GWLP_USERDATA, ...)GetWindowLongPtr(hwnd, GWLP_USERDATA)。这些函数设置和查询"变量"窗口的大小足以容纳指向某些数据的指针。

在您的情况下,解决方案更简单。由于每个窗口都分配了一个唯一的id,因此您可以使用以下语句获取编辑控件的窗口句柄:

edit_handle = GetDlgItem(hwnd, ... ); 

您必须将...替换为编辑控件的ID。如果您通过调用CreateWindow(..)自行创建编辑控件,则这是hMenu属性的值。如果使用来自资源的对话框,则它只是控件的ID。