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を参照してください。

これにより、コードの行数が3分の1に減り、文字列を数値に変換する手間が省けます。さらに、WM_GETTEXTのLPARAMに注意する必要があります。UNICODEが定義されている場合、パラメータはwchar_t *であると想定されますが、ANSIバージョンではchar*が想定されます。

于 2012-07-22T09:29:58.650 に答える