[英]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_FOOTER
, LPARAM
参数设置为指向包含新文本的字符串的指针(或字符串资源的 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.