Страницы

Поиск по вопросам

суббота, 13 июля 2019 г.

Проход текста через условие в цикле программы. С++ Winapi

Написал программку небольшую. Которая сохраняет из EditControl текст в файл. Все просто в целом. Но мне надо подставлять определенные значения в текст, которые заданны в массиве самой программы. В консольном варианте все просто для меня было а тут я потерялся немного. Есть такое условие, что бы вместо набранных в EditControl цифр подставлялись буквенные значения. Вместо 1 - X, 2 - Y, 3 - A, 4 - B. К примеру набрав строку в Control Edit B+3,2,1,DB2. В файл уже был записан вот такой результат B+A,Y,X,DBY. В чем собственно я потерялся? Так в том, что я не могу понять куда подставить этот цикл по замене элементов в массиве. Помогите кто сможет. Я уже неделю с этим мучаюсь.
#include #include #include "resource.h"
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 как Вам надо (т.е. вставить цикл по замене символов).

Комментариев нет:

Отправить комментарий