2014-01-22 61 views
0

我想創建一個任務對話框,使用TASKDIALOGCONFIG strucutre。我的應用程序使用Unicode。這是我的代碼:使用TaskDialogConfig與std ::字符串

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); 

我已經研究了一下這個問題,但是我還沒有找到解決方案。有人能幫助我嗎?

回答

2

你有兩個選擇:

  1. 使用ANSI文本。通過使用TASKDIALOGCONFIGATaskDialogIndirectA來實現。
  2. 使用Unicode文本。將字符串從std::string切換爲std::wstring

我個人會推薦後者的選項。

我也建議你不要使用tchar.h,並停止使用_T(...)。由於您只定位到Unicode,因此您應該編寫L"Error"而不是_T("Error")。如果您正在編寫必須針對MBCS和Unicode目標進行編譯的代碼,則只有使用tchar.h纔有意義。當我們需要爲Win 95/98和Win NT/2000編譯時,這是一個必要的罪惡。但那些日子早已逝去。

+0

這兩種方法中的哪一種爲我的一般編程推薦?我的意思是,哪一個更適合我的unicode應用程序? – Victor

+0

很難從這裏說。就個人而言,我傾向於使用Windows編程所有UTF-16。所以我使用'std :: wstring'和目標'UNICODE'構建。 –

+0

好的。我將用'wstring'替換'string's。謝謝! – Victor

相關問題