3

我正在尝试从 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);
4

2 回答 2

3

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

int atoi ( const char * str );

在这种情况下,

int i = atoi(fade1Buffer);

另请参阅@Keith Thompson 和@Chris 提到的strtol() 。它使用起来有点困难,但它可以更好地处理错误。

   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:: 字符串,还可以使用其他几个函数

#include <string>
std::string str(fade1Buffer);
int i = stoi(test);

参考:http ://en.cppreference.com/w/cpp/string/basic_string/stol

于 2012-07-22T07:38:40.077 回答
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*。

于 2012-07-22T09:29:58.650 回答