如何使用(本机Win32 API)制作计算器?

时间:2011-09-18 08:21:42

标签: winapi visual-c++

我是Win32Api的初学者,我试图制作计算器,但由于彼此之间的数据类型转换而失败了

示例:

int N1 = GetDlgItemText(WID,IDC_N1,NULL,NULL);
int N2 = GetDlgItemText(WID,IDC_N2,NULL,NULL);
int RESULT = N1+N2;
MessageBox(NULL,RESULT,L"Message",MB_OK);

上面的例子告诉我以下错误 (无法将参数2从'int'转换为'LPCWSTR')

此错误的原因是彼此之间的数据类型转换

请有人帮助我

5 个答案:

答案 0 :(得分:2)

以下是您的任务的正确代码:

wchar_t Str1[100], Str2[100], ResStr[100];  
GetDlgItemText(WID, IDC_N1, Str1, 100);  
GetDlgItemText(WID, IDC_N2, Str2, 100);  
int N1 = _wtoi(Str1);
int N2 = _wtoi(Str2);
int RESULT = N1 + N2; 
_itow(RESULT, ResStr, 10);
MessageBox(NULL, ResStr, L"Message",MB_OK);

有用的链接:
http://msdn.microsoft.com/en-us/library/ms645489(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ms645505(v=vs.85).aspx

答案 1 :(得分:1)

您需要将unicode字符串而不是int传递给MessageBox。

wchar_t ResStr[100]; //define string  
_itow(RESULT, ResStr, 10); //convert int result to string  
MessageBox(NULL, ResStr, L"Message",MB_OK); //now display string  

答案 2 :(得分:1)

这有一个API。使用GetDlgItemInt

答案 3 :(得分:0)

您的项目未设置为使用Unicode,但您将宽字符串传递给MessageBox。你可以:

1)更改项目设置,使其默认为Unicode;或

2)明确致电MessageBoxW;或

3)删除L,并使用非Unicode API。

答案 4 :(得分:0)

看起来您只需要转到项目>属性>配置属性>并将'字符集'更改为多字节。它可能是在Unicode,我认为这将工作,因为这是我在更改字符集之前尝试使用WinAPI MessageBox()时总是得到的错误。也许你想尝试做些不同的事情?但这应该有帮助...