unicode下的SetWindowTextW------unicode最好不要与C代码一起使用

1、unicode下的SetWindowTextW,导致char在MFC编辑框中输出非常麻烦。

需要做单字符char向双字符wchar_t转换。

可以转换,转换如下:

void CLR_ServerMFCDlg::OnBnClickedButtonBrowsePath()
{
// TODO:  在此添加控件通知处理程序代码
BROWSEINFO bi;


//浏览文件夹对话框的父窗体句柄。
bi.hwndOwner = this->GetSafeHwnd();
/*ITEMIDLIST结构的地址,包含浏览时的初始根目录,而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中。
该成员变量可以是NULL,在此时桌面目录将被使用。
*/
bi.pidlRoot = NULL;
//用来保存用户选中的目录字符串的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。
bi.pszDisplayName = 0;
//该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。
bi.lpszTitle = _T("选择路径");
//该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合:
bi.ulFlags = 0;
//应用程序定义的浏览对话框回调函数的地址。当对话框中的事件发生时,该对话框将调用回调函数。该参数可用为NULL。
bi.lpfn = NULL;
//对话框传递给回调函数的一个参数指针。
bi.lParam = 0;
//与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。
bi.iImage = 0;


LPITEMIDLIST pIDList;
pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框


if (pIDList)
{
LPTSTR lpsBuffer = (LPTSTR)(this->m_ServerCore.save_file_dir_path);
SHGetPathFromIDList(pIDList, lpsBuffer);

//this->m_idc_edit_path_info.SetWindowTextW(_T("xxxxxxxxxx"));
this->m_idc_edit_path_info.SetWindowTextW((LPCTSTR)(this->m_ServerCore.save_file_dir_path));


//获取转换所需的目标缓存大小  
int nRet = 0;
char *p_text = this->m_ServerCore.save_file_dir_path;
DWORD dBufSize = WideCharToMultiByte(CP_OEMCP, 0, lpsBuffer, -1, NULL, 0, NULL, FALSE);
nRet = WideCharToMultiByte(CP_OEMCP, 0, lpsBuffer, -1, p_text, dBufSize, NULL, FALSE);
if (nRet <= 0)
{
//printf("转换失败\n");
}


}
}




BOOL CLR_ServerMFCDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();


// 将“关于...”菜单项添加到系统菜单中。


// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);


CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}


// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标


// TODO:  在此添加额外的初始化代码
char *p_text = this->m_ServerCore.save_file_dir_path;


DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, p_text, -1, NULL, 0);
wchar_t *pwText;
pwText = new wchar_t[dwNum];
if (!pwText)
{
delete[]pwText;
}
MultiByteToWideChar(CP_ACP, 0, p_text, -1, pwText, dwNum);


this->m_idc_edit_path_info.SetWindowTextW(pwText);


delete[]pwText;



return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}



2、反思

这样对于输出信息的打印,特别不方便!与C代码兼容时。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值