无法在基于 MFC 对话框的应用程序中使用 SetDlgItemTextW() 设置对话框的标题

Posted

技术标签:

【中文标题】无法在基于 MFC 对话框的应用程序中使用 SetDlgItemTextW() 设置对话框的标题【英文标题】:Unable to set the Title of the Dialog using SetDlgItemTextW() in MFC Dialog Based application 【发布时间】:2016-03-23 12:14:46 【问题描述】:

我的要求是:

我正在使用基于 MFC 对话框的应用程序,在这里我想用日语字符串设置对话框的标题。

下面是我的代码sn-p:

CStringW str;   // Using CStringW to support unicode characters

CTestofUTF83Dlg dlg;   // CTestofUTF83Dlg is my dialog class that is derived    
                      //from CDialog

str.LoadString(IDC_TESTJAPAN); // IDC_TESTJAPAN contains my Japanese string

SetDlgItemTextW(dlg,IDD_TESTOFUTF83_DIALOG,str); // IDD_TESTOFUTF83_DIALOG is the ID of my Dialog

使用上面的代码,对话框标题不反映日文字符串。

我认为是由于SetDlgItemTextW的第一个参数,即对话框的句柄(dlg)。

因为,如果我使用SetDlgItemText() 函数,我可以设置标题。

请帮帮我。

【问题讨论】:

您是否调试过您的 LoadString 确实将所需的字符串放入 str 中? @weisman.. 是的,LoadString 正在将所需的字符串放在 str 中。 函数返回值是否表示成功? @o_weisman.. 是的,它表示成功,问题仅出在这一行 SetDlgItemTextW(dlg,IDD_TESTOFUTF83_DIALOG,str);因为如果我使用消息框来测试 MessageBoxW(dlg,str,0,0);它工作正常并显示字符串。 【参考方案1】:

是的,那行不通。您尚未创建窗口/对话框,因此它没有窗口句柄(m_hWnd != 0 或垃圾)。

在 CTestofUTF83Dlg 的 OnInitDialog() 成员中调用 SetWindowText。

BOOL CTestofUTF83Dlg::OnInitDialog()

   CDialog::OnInitDialog();
   // SetWindowText .... blah blah
   return TRUE;

【讨论】:

我已经包含在 OnInitDialog 中,但仍然无法正常工作。 根据您的用户名,听起来不是日语...这对我来说不是问题,但是...您是否在 Windows 上安装了日语语言环境?其次,您是否将您的应用程序构建为 Unicode?如果必须混合字体,请确保将其构建为 Unicode!!!!如果您将其构建为 MBCS,并且您的默认代码页不是日语,那么您将遇到问题。

以上是关于无法在基于 MFC 对话框的应用程序中使用 SetDlgItemTextW() 设置对话框的标题的主要内容,如果未能解决你的问题,请参考以下文章

如何显示基于MFC的应用程序类文件的输出

无法在 mfc 对话框中删除文件

如何在基于 MFC 对话框的应用程序中设置主对话框的大小

在DLL中嵌入基于MFC对话框的应用程序,并使用RunDll32运行

Visual Studio Community 2015 MFC 空项目无法编译

基于 mfc 对话框的应用程序中的功能区控件