SetDlgItemText函数怎么显示浮点数
                sprintf_s(szBuffer, "%f", 3.1415);
                SetDlgItemText(hwnd, IDC_AMP1, (LPCWSTR)szBuffer);

                这样显示出来是乱码求正解 。

7个回答

是否是乱码与你的环境的编码有关系,还有与你的对话框Dialog的语言设置也有关系,检查这2处》
如果是UNICODE编码切对话框是中文:
CString str;
str.format(T"%f",3.1415);
SetDlgItemText(hwnd, IDC_AMP1, str);
如果不是UNICODE编码切对话框是中文
CStringA str;
str.format(T"%f",3.1415);
SetDlgItemText(hwnd, IDC_AMP1, str)

yymiaoxin2010
yymiaoxin2010 回复noxiaoxiao: 有没有不使用CString结构的办法,因为我用了CString结构 。头文件afx.h和windows.h冲突 。说是MFC包含windows.h头文件。我如果删除了windows.h头文件的话就发现很多函数就不能用了
2 年多之前 回复
  1. 把szBuffer定义为宽字节字符数组;
  2. 用wsprintf_s函数填充

CString strBuffer;
strBuffer.format(L"%f",3.1415);
SetDlgItemText(hwnd, IDC_AMP1, strBuffer);

yymiaoxin2010
yymiaoxin2010 回复csulizhang: 有没有不使用CString结构的办法,因为我用了CString结构 。头文件afx.h和windows.h冲突 。说是MFC包含windows.h头文件。我如果删除了windows.h
2 年多之前 回复

sprintf_s(szBuffer, "%f", 3.1415);
SetDlgItemText(hwnd, IDC_AMP1, (LPCTSTR)szBuffer);
函数setdlgitemtext中第三个参数类型为LPCTSTR,不是lpcwstr。

采用了UNICODE编码,
可以用
a.Format(L "%d ", b);
或者
a.Format(_T( "%d "), b);
即:strNumber.Format(_T("%.2f "), tim.getTimeMilli());

CString strBuffer;
strBuffer.format(L"%f",3.1415);
SetDlgItemText(hwnd, IDC_AMP1, strBuffer);

yymiaoxin2010
yymiaoxin2010 回复dadongwang: 有没有不使用CString结构的办法,因为我用了CString结构 。头文件afx.h和windows.h冲突 。说是MFC包含windows.h头文件。我如果删除了windows.h
2 年多之前 回复
yymiaoxin2010
yymiaoxin2010 回复dadongwang: 有没有不使用CString结构的办法,因为我用了CString结构 。头文件afx.h和windows.h冲突 。说是MFC包含windows.h头文件。我如果删除了windows.h头文件的话就发现很多函数就不能用了
2 年多之前 回复

std::string strBuffer = "3.1415";
std::wstring wstrBuffer = ToUtf16(strBuffer);
SetDlgItemText(hwnd, IDC_AMP1, wstrBuffer.c_str());

std::wstring ToUtf16(const char* utf8, size_t len)
{
int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast(len),
NULL, 0);
wchar_t* ws = STACK_ARRAY(wchar_t, len16);
::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast(len), ws, len16);
return std::wstring(ws, len16);
}

std::wstring ToUtf16(const std::string& str)
{
return ToUtf16(str.data(), str.length());
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问