无法在基于 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() 设置对话框的标题的主要内容,如果未能解决你的问题,请参考以下文章
在DLL中嵌入基于MFC对话框的应用程序,并使用RunDll32运行