2013-10-25 26 views
0

我正在使用MS visual C++ 2010 express編寫一個記事本程序。我需要能夠從我的標籤界面保存文件(每個編輯控件都存儲在一個向量中)。我似乎無法弄清楚如何保存,這取決於用戶可以看到哪個編輯控件(活動標籤)。到目前爲止我嘗試過的所有內容都不保存內容,或者只保存第一個編輯控件。當用戶將新文件添加到選項卡式界面時,它將該編輯控件添加到該矢量的背面。這是我最新的嘗試: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,那麼你就不需要函數GetDlgItem都:你已經有HWND,它會返回。

hEdit = vect[ curTab ]; 
+0

哇....這樣的noob錯誤:/我知道我是俯視的東西。 – Vince