Написал программку небольшую. Которая сохраняет из EditControl текст в файл. Все просто в целом. Но мне надо подставлять определенные значения в текст, которые заданны в массиве самой программы.
В консольном варианте все просто для меня было а тут я потерялся немного.
Есть такое условие, что бы вместо набранных в EditControl цифр подставлялись буквенные значения.
Вместо 1 - X, 2 - Y, 3 - A, 4 - B.
К примеру набрав строку в Control Edit B+3,2,1,DB2. В файл уже был записан вот такой результат B+A,Y,X,DBY.
В чем собственно я потерялся? Так в том, что я не могу понять куда подставить этот цикл по замене элементов в массиве. Помогите кто сможет. Я уже неделю с этим мучаюсь.
#include
using namespace std;
#define ESC_OF "Отказ от выбора или ошибка выполнения функции "
HWND hEdit1;
HWND hEdit2;
CHAR text_1[] = { 0 };
CHAR text_2[] = { 0 };
BOOL CALLBACK DlgProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine,
int nCmdShow )
{
DialogBoxParam( hInstance, MAKEINTRESOURCE( IDD_DIALOG1 ), 0, ( DlgProc ), 0 );
return 0;
}
BOOL CALLBACK DlgProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
BOOL success;
static OPENFILENAME ofn;
static char szFile[MAX_PATH];
switch( uMsg ) {
case WM_INITDIALOG: { // Добавление компонентов на форму
// Инициализация структуры ofn
ofn.lStructSize = sizeof( OPENFILENAME );
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof( szFile );
ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
ofn.lpstrDefExt = "txt";
//Иконка
HICON hIcon1 = LoadIcon( GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDI_ICON1 ) );
SendMessage( hwnd, WM_SETICON, 1, ( LPARAM )hIcon1 );
//Текстовые поля
hEdit1 = GetDlgItem( hwnd, IDC_EDIT1 );
hEdit2 = GetDlgItem( hwnd, IDC_EDIT2 );
SetWindowText( hEdit1, text_1 );
SetFocus( hEdit1 );
break;
return TRUE;
}
case WM_COMMAND: // Обработка кнопок и нажатий
switch( LOWORD( wParam ) ) {
case IDC_BUTTON1:
strcpy_s( szFile, "" );
success = GetSaveFileName( &ofn );
if( success ) {
MessageBox( hwnd, ofn.lpstrFile,
"Файл сохранен под именем:", MB_OK );
HANDLE hFile = CreateFile( ofn.lpstrFile,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL );
const int size = 2048;
TCHAR buff[size] = { 0 };
hEdit2 = GetDlgItem( hwnd, IDC_EDIT2 );
DWORD off = 0;
do {
GetWindowText( hEdit2, buff, size );
WriteFile( hFile, buff, size, &off, NULL );
} while( off < 0 );
CloseHandle( hFile );
}
else {
MessageBox( hwnd, ESC_OF"GetSaveFileName",
"Отказ от выбора или ошибка", MB_ICONWARNING );
}
break;
case IDOK:
MessageBox( hwnd, "Была нажата кнопка ОК", "Info",
MB_OK | MB_ICONINFORMATION );
break;
case IDCANCEL:
EndDialog( hwnd, 0 );
return FALSE;
}
break;
case WM_CLOSE:
EndDialog( hwnd, 0 );
return FALSE;
}
return FALSE;
}
Ответ
В обработчике нажатия кнопки case IDC_BUTTON1:
есть цикл:
do {
GetWindowText( hEdit2, buff, size );
WriteFile( hFile, buff, size, &off, NULL );
} while( off < 0 );
GetWindowText() - берет текст из контрола и складывает его в массив buff.
WriteFile() - записывает этот массив buff в файл.
Соответственно, нужно между этими двумя вызовами функций подправить содержимое buff как Вам надо (т.е. вставить цикл по замене символов).
Комментариев нет:
Отправить комментарий