繁体   English   中英

我如何从其回调 function 中更改 TaskDialogIndirect 的页脚文本?

[英]How would I change the footer text of a TaskDialogIndirect from inside its callback function?

我目前正在制作响应时间有限的 TaskDialogIndirect。 唯一的问题是,我无法在创建 TaskDialogIndirect 后更改它的页脚文本。

我已经设置了一个计时器并想更改页脚的文本以显示计时器的进度。 唯一的问题是我更改文本的代码不起作用。

这是我用来更改文本的代码。 (hwnd 由回调函数提供):

HWND MainBody = GetWindow(hwnd, GW_CHILD);  // Getting the DirectUIHWND window

switch (msg) {
    case TDN_DIALOG_CONSTRUCTED:
        //SetDlgItemText(hwnd, 3, L"Test");  // Does not work
        SetWindowText(GetDlgItem(MainBody, 3), L"TEST"); // Google told me that 3 is the common footer definition
        break;
}

不要试图自己挖掘内部结构和操纵组成元素。 相反,请使用记录的 API。 这始终是 Windows 编程中应遵循的良好做法。

具体来说,向任务对话框 window 发送一条TDM_SET_ELEMENT_TEXT消息,其中WPARAM参数设置为TDE_FOOTERLPARAM参数设置为指向包含新文本的字符串的指针(或字符串资源的 ID,使用MAKEINTRESOURCE宏创建)。

switch (msg) {
    case TDN_DIALOG_CONSTRUCTED:
        SendMessage(hwnd,
                    TDM_SET_ELEMENT_TEXT,
                    static_cast<WPARAM>(TDE_FOOTER),
                    reinterpret_cast<LPARAM>(L"Construction complete!"));
        break;
}

或者,如果您不希望任务对话框调整自身大小以适应新文本,请改为发送TDM_UPDATE_ELEMENT_TEXT消息 其他参数相同。 请参阅链接文档的“备注”部分,了解这两个相似消息之间行为差异的解释。

这适用于回调 function 的内部或外部。您所需要的只是任务对话框 window 的句柄。(当然,如果任务对话框是模态的,除非您安装了某种类型的挂钩,否则您基本上必须这样做这来自回调 function 的内部,因为当任务对话框可见时,这是您的代码将执行的唯一位置。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM