我试图从3个编辑框中获取rgb值,以便我可以在运行时更改窗口的颜色。以下代码没有给出我需要的数值。
const int bufferSize = 1024;
char fade1Buffer[bufferSize] = "";
char fade2Buffer[bufferSize] = "";
char fade3Buffer[bufferSize] = "";
HWND Editbox1 = GetDlgItem(hWnd,IDC_MAINFADE1_EDIT);
SendMessage(Editbox1, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade1Buffer);
HWND Editbox2 = GetDlgItem(hWnd,IDC_MAINFADE2_EDIT);
SendMessage(Editbox2, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade2Buffer);
HWND Editbox3 = GetDlgItem(hWnd,IDC_MAINFADE3_EDIT);
SendMessage(Editbox3, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)fade3Buffer);
//fill our main window background
FadeVert(hWnd, RGB(fade1Buffer, fade2Buffer,fade3Buffer), RGB(255, 255, 255), (int) Client_Rect.top,
(int) Client_Rect.left, (int) Client_Rect.right, (int) Client_Rect.bottom);
答案 0 :(得分:3)
atoi()函数将char *转换为int。它位于<cstdlib>
int atoi ( const char * str );
在这种情况下,
int i = atoi(fade1Buffer);
另见strtol()为@Keith Thompson和@Chris提到的。它使用起来有点困难,但它可以更好地处理错误。
char * pEnd;
long int i = strtol(fade1Buffer,&pEnd, 10);//10 is the base (decimal in this case)
//pEnd == fade1Buffer if there is an error.
如果将其转换为C ++样式的std :: string,您也可以使用其他几个函数
#include <string>
std::string str(fade1Buffer);
int i = stoi(test);
参考:http://en.cppreference.com/w/cpp/string/basic_string/stol
答案 1 :(得分:3)
在Win32中有一个名为GetDlgItemInt的函数。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms645485%28v=vs.85%29.aspx。
这会减少1/3的代码行数以及将字符串转换为数字的所有麻烦。此外,你应该小心WM_GETTEXT的LPARAM。如果你定义了UNICODE,那么参数应该是wchar_t *而ANSI版本需要char *。