我如何改变一个TaskDialogIndirect的页脚文本从它的回调函数内部?



我目前正在制作一个响应时间有限的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编程中,这是一个很好的实践。

具体来说,向任务对话框窗口发送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消息代替。其他参数保持一致。见"备注"。这两个类似的消息之间的行为差异的解释的链接文档的部分。

可在回调函数内部或外部使用。您所需要的只是"任务对话框"窗口的句柄。(当然,如果任务对话框是模态的,除非你安装了某种类型的钩子,否则你基本上必须在回调函数内部执行此操作,因为当任务对话框可见时,这是唯一可以执行代码的地方。)

相关内容

  • 没有找到相关文章

最新更新