将 TaskDialogConfig 与 std::string 一起使用

Posted

技术标签:

【中文标题】将 TaskDialogConfig 与 std::string 一起使用【英文标题】:Using TaskDialogConfig with std::string 【发布时间】:2014-01-22 20:20:31 【问题描述】:

我正在尝试使用TASKDIALOGCONFIG 结构创建一个任务对话框。我的应用程序使用 Unicode。这是我的代码:

string error_text = get_error_text();
string error_code = get_error_code();

TASKDIALOGCONFIG tdc =  sizeof(TASKDIALOGCONFIG) ;
tdc.dwCommonButtons = TDCBF_OK_BUTTON;
tdc.pszMainIcon = TD_ERROR_ICON;
tdc.pszWindowTitle = _T("Error");
tdc.pszContent = error_text.c_str(); /* of course this will give a 
                                        const char* instead of a wchar_t* */
tdc.pszExpandedInformation = error_code.c_str(); // here is the same thing
tdc.hwndParent = m_wndParent;

TaskDialogIndirect(&tdc, NULL, NULL, NULL);

我已经对这个问题进行了一些研究,但我还没有找到解决方案。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

你有两个选择:

    使用 ANSI 文本。使用TASKDIALOGCONFIGATaskDialogIndirectA 这样做。 使用 Unicode 文本。将您的字符串从 std::string 切换到 std::wstring

我个人会推荐后一种选择。

我还建议您不要使用tchar.h,并停止使用_T(...)。由于您只针对 Unicode,您应该编写 L"Error" 而不是 _T("Error")。如果您正在编写必须为 MBCS 和 Unicode 目标编译的代码,则使用 tchar.h 才有意义。在我们需要为 Win 95/98 和 Win NT/2000 编译的日子里,这是一个必要的坏事。但那些日子早已一去不复返了。

【讨论】:

这两种方法中的哪一种推荐用于我的一般编程?我的意思是,哪一个对我的 unicode 应用程序更有效? 从这里很难说。就个人而言,我倾向于对所有 UTF-16 进行 Windows 编程。所以我使用std::wstring 和目标UNICODE 构建。 好的。我将用wstrings 替换strings。谢谢!

以上是关于将 TaskDialogConfig 与 std::string 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 std::find 与 std::string 数组一起使用时出现问题

将 std::thread 与 std::mutex 一起使用

将 std::unique_ptr 的子类与 std::variant 一起使用

将 std::sort 与并行执行策略一起使用时,我必须考虑啥?

如何将 std::sort() 与 std::unique_ptr<[]> 一起使用?

将 std::copysign 与 g++ 一起使用