2012-07-22 9 views
3

3 개의 editboxes에서 rgb 값을 가져 와서 런타임 중에 창 색상을 변경할 수 있습니다. 다음 코드는 필자에게 필요한 숫자 값을 제공하지 않습니다.char에서 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

올바른 값을 제공하지 않는 방법은 무엇입니까? –

+0

이것은'char'에서'int' 변환이 아닙니다. 그것들은'RGB' 매크로에 넘겨주는 배열입니다. – chris

+0

@ Ed의 경우 편집 상자의 값과 다른 값을 반환합니다. – eric

답변

3

atoi() 함수는 char *를 int로 변환합니다. 또한보십시오, @Keith 톰슨 @ 크리스 같은 strtol() 언급

int i = atoi(fade1Buffer); 

,이 경우

int atoi (const char * str); 

<cstdlib> 아래 때문이다. 사용하기가 조금 더 힘들지만 오류를 더 잘 처리합니다. 당신이 스타일의 표준 ++은 C로 변환하는 경우 : 문자열을

char * pEnd; 
    long int i = strtol(fade1Buffer,&pEnd, 10);//10 is the base (decimal in this case) 
    //pEnd == fade1Buffer if there is an error. 

, 당신은뿐만 아니라 여러 가지 다른 기능을 사용할 수 있습니다

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

참조 : http://en.cppreference.com/w/cpp/string/basic_string/stol

+0

'atoi()'는 에러를 감지하지 않습니다. 에러 검출을 원하면'strtol()'을 사용하십시오. –

+2

'stoi','stringstream','strtol'. 선택할 수있는 훨씬 더 좋은 대안. – chris

+0

std :: string을 처리합니다. OP는 C 스타일 문자열을 처리합니다. 하지만 그래, 나는 대답에 그들을 추가 할 것이다. 감사합니다 –

3

GetDlgItemInt라는 기능이 있습니다 Win32에서. 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 *가 필요합니다.