这是"现代"消息框UI在Qt中可用?或者它是纯Windows API?

时间:2017-04-06 07:18:37

标签: c++ windows qt mfc

现代Windows版本(我想说7+)拥有我经常看到的这个漂亮的用户界面:

enter image description here

它似乎不是从头开始设计的。在我看来,它已经在Windows API中可用。

可以在Qt中加载吗?小部件名称是什么?或者它只是MFC还是什么?

2 个答案:

答案 0 :(得分:3)

这称为TaskDialog,从Windows Vista开始提供。它是纯粹的Win API。

我不知道是否有可用的Qt包装器(编辑@thomiels answer指向Qt小部件的链接)。

以下是一些本机代码,用于创建类似于屏幕截图中显示的对话框:

#include <Windows.h>
#include <CommCtrl.h>
#pragma comment(lib,"comctl32.lib")
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

int main(int argc, char* argv[])
{   
    TASKDIALOGCONFIG cfg{ sizeof(cfg) };
    const TASKDIALOG_BUTTON buttons[] = {
        { IDOK, L"Do something" },
        { IDCANCEL, L"Do another something" },
    };
    cfg.hInstance                    = ::GetModuleHandle( nullptr );
    cfg.dwCommonButtons              = 0;
    cfg.pszMainIcon                  = TD_INFORMATION_ICON;
    cfg.pszMainInstruction           = L"Here you can do awesome stuff";
    cfg.pszContent                   = L"What do you want to do?";
    cfg.pButtons                     = buttons;
    cfg.cButtons                     = ARRAYSIZE(buttons);
    cfg.dwFlags                      = TDF_USE_COMMAND_LINKS;

    HRESULT hr = TaskDialogIndirect( &cfg, nullptr, nullptr, nullptr );
}

答案 1 :(得分:3)

这三个按钮称为命令按钮或Command Link Control。它最初是作为Windows XP API的一部分引入的。我认为自Windows Vista以来,图片中的表格(在命令链接下有解释文字)可用。

如果您想要便携式代码,则无法在Qt中使用它。 Wine甚至不能显示命令按钮。 (在Wine 2.0中,它们是不可见的,但它们可以被点击)。

更新:Qt中有一个QCommandLinkButton课程。