2012-07-22 68 views
3

我想从3个编辑框中获取rgb值,以便在运行时更改窗口的颜色。以下代码不会给我所需的数字值。字符转换为int?

 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

他们没有给出正确的值是什么方式? – 2012-07-22 07:34:04

+0

这不是'char'到'int'的转换。那些是你传递给'RGB'宏的数组。 – chris 2012-07-22 07:36:22

+0

@ Ed,它们返回的值不同于编辑框中的值。 – eric 2012-07-22 07:41:57

回答

3

atoi()函数将char *转换为int。这是在<cstdlib>

int atoi (const char * str); 

在这种情况下,

int i = atoi(fade1Buffer); 

参见,strtol()作为@Keith汤普森和@克里斯提到。这有点难以使用,但它更好地处理错误。

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

+0

'atoi()'不检测错误。如果你想检测错误,使用'strtol()'。 – 2012-07-22 07:43:44

+2

'stoi','stringstream','strtol'。有很多更好的选择可供选择。 – chris 2012-07-22 07:44:07

+0

那些处理std :: string。 OP正在处理c风格的字符串。但是,我会将它们添加到答案中。谢谢 – 2012-07-22 07:47:19