2014-02-18 8 views
0

다음은 현재 내 코드에 대한 스 니펫입니다. 이것은 절대 의미가 없습니다. CASE COMMAND에있는 hEditEW는 위에서 명시 적으로 정의 된 곳에 정의되어 있지 않다고합니다. 이것은 아마도 간단한 수정 일 것입니다.하지만 해결할 시간이 하나 있습니다.이 변수는 어떻게 정의되지 않습니까?

case WM_CREATE: 
     { 
        HWND hWndButton = CreateWindowEx(NULL, "Button", "Click to Convert", WS_TABSTOP|WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
         200, 370, 150, 50, hWnd, (HMENU)IDC_BUTTON_ONE, NULL, NULL); 

        HWND hEditEW = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD|ES_MULTILINE| WS_VISIBLE | 
         ES_AUTOHSCROLL | ES_AUTOVSCROLL, 25, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL); 

        HWND hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE | 
         ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL); 
     } 
    break; 

case WM_COMMAND: 
     { 
        switch (LOWORD(wParam)) 
        { 
        case IDC_BUTTON_ONE: 
        { 
              LPWSTR buffer[256]; 
              SendMessage(hEditEW, 
               WM_GETTEXT, 
               sizeof(buffer)/sizeof(buffer[0]), 
               reinterpret_cast<LPARAM>(buffer)); 
              HANDLE hFile = CreateFile("C:\\test.txt", GENERIC_READ, 
               0, NULL, CREATE_NEW, FILE_FLAG_OVERLAPPED, NULL); 

        } 

         break; 
        } 
        break; 
     } 
+0

돈 : 상위 범위에 hEditEW를 넣어 그것을하지 않으면 정적 변수가 나쁘다. 'GetDlgItem (hWnd, IDC_EDITOR_BOX_EAST_WEST);을 사용하여'WM_COMMAND'에서'HWND' 컨트롤을 얻습니다. – manuell

답변

5

당신은 case WM_CREATE 후 범위를 정의하고 case WM_COMMAND 후 범위에서 그것을 사용하려고. 그것은 작동하지 않을 것입니다 - 다른 범위. HWND hEditNS를 넣어

{ 
    HWND hEditEW = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD|ES_MULTILINE| WS_VISIBLE | 
         ES_AUTOHSCROLL | ES_AUTOVSCROLL, 25, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL); 

} //in scope up to here 
{ 
    SendMessage(hEditEW, 
     WM_GETTEXT, 
     sizeof(buffer)/sizeof(buffer[0]), 
     reinterpret_cast<LPARAM>(buffer)); 
} 
+0

빨리 손 ..... – yizzlez

0

hEditEW이 로컬;

당신은 문제를 보여주기 위해 스위치가 필요하지 않습니다 상단 및 교체 사방이 HWND hEditNS를 넣어 경우를 수정해야한다고

hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE | 
         ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL); 

제거 WND와

WND hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE | 
         ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL); 

; 클래스/기능

0

의 상단에 나는 WinApi 모르겠지만, hEditEW이 범위를 벗어나 갔다 :

case WM_CREATE: 
{ 
    HWND hEditEW = .... 
} //end of scope 

간단한 수정 :

HWND hEditEW; 
case WM_CREATE: 
{ ..... 
관련 문제