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;
}
와우 .... 그런 멍청한 실수 :/나는 내가 뭔가를 간과하고 있다는 것을 알았다. – Vince