2013-10-25 2 views
0

MS 비주얼 C++ 2010 익스프레스를 사용하여 메모장 프로그램을 작성하고 있습니다. 탭 인터페이스에서 파일을 저장할 수 있어야합니다. 각 편집 컨트롤은 벡터에 저장됩니다. 사용자가 볼 수있는 편집 컨트롤 (활성 탭)에 따라 저장할 방법을 알아낼 수 없습니다. 지금까지 시도한 모든 내용은 내용을 저장하지 않거나 첫 번째 편집 컨트롤에서만 저장합니다. 사용자가 탭 인터페이스에 새 파일을 추가하면 해당 편집 컨트롤이 벡터의 뒷면에 추가됩니다. 벡터는 각 편집 컨트롤의 HWND는 다음의 모든 GetDlgItem 필요하지 않습니다이Win32는 탭 인터페이스에서 텍스트 파일을 저장합니다.

std::vector<HWND>vect; 

    BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR pszFileName) 
    { 
     HANDLE hFile; 
     BOOL bSuccess = FALSE; 

     hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 

     if(hFile != INVALID_HANDLE_VALUE) 
     { 
     DWORD dwTextLength = GetWindowTextLength(hEdit); 

     if(dwTextLegth > 0) 
     { 
      DWORD dwBufferSize = dwTextLength + 1; 
      LPSTR pszText = (LPSTR)GlobalAlloc(GPTR, dwBufferSize); 

      if(pszText != NULL) 
      { 
      if(GetWindowText(hEdit, pszText, dwBufferSize)) 
      { 
       DWORD dwWritten; 

       if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL)) 
       bSuccess = TRUE; 
      } 
      GlobalFree(pszText); 
      } 
     } 
     CloseHandle(hFile); 
     } 
     return bSuccess; 
    } 

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
    { 
     case WM_COMMAND: 
     switch(LOWORD(wParam)) 
     { 
      case ID_FILE_SAVEAS: 
      { 
       OPENFILENAME ofn; 
       char szFileName[ MAX_PATH ] = ""; 
       ZeroMemory(&ofn, sizeof(ofn)); 

       ofn.lStructSize = sizeof(ofn); 
       ofn.hwndOwner = hwnd; 
       ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; 
       ofn.lpstrFile = szFileName; 
       ofn.nMaxFile = MAX_PATH; 
       ofn.lpstrDefExt = "txt"; 
       ofn.flags  = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; 

       if(GetSaveFileName(&ofn)) 
       { 
       HWND hEdit, hTabs; 
       hTabs = GetDlgItem(hwnd, IDC_MAIN_TAB); 
       int curTab = TabCtrl_GetCurSel(hTabs); 

       hEdit = GetDlgItem(hTabs, IDC_MAIN_EDIT); 
       // This is what i did have: hEdit = GetDlgItem(vect[ curTab ], IDC_MAIN_EDIT); 
       // Which wasn't saving anything 
       if(SaveTextFileFromEdit(hEdit, szFileName)) 
       { 
        // EVERYTHING IS GOOD 
       } 
       } 
      } 
      break; 
     } 
     break; 
    } 
    return 0; 
} 

답변

1

경우 : 이것은 내 최신 시도 당신은 이미 반환하는 HWND 있습니다.

hEdit = vect[ curTab ]; 
+0

와우 .... 그런 멍청한 실수 :/나는 내가 뭔가를 간과하고 있다는 것을 알았다. – Vince

관련 문제