Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593

Сохранение данных из ListView в файл

22.09.2019, 21:38. Показов 4795. Ответов 12

Студворк — интернет-сервис помощи студентам
Здравствуйте! Как мне сохранить данные из ListView файл

написал сам Listview но как с него сохранить информацию в файл понять не могу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 // Создаём ListView
                      /*Растяним таблицу по правому краю окна*/
                      RECT rc;
                      GetClientRect(hwnd, &rc);
                      hListView = CreateWindow(WC_LISTVIEW, L"GOOD",
                      LVS_REPORT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | LVS_AUTOARRANGE,
                        300, 0, rc.right, 500, hwnd,
                          (HMENU)1010, hinstance, NULL);
                      ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
                      // Если LIstView не создался выведем ошибку
                      if (hListView == NULL)
                          MessageBox(hwnd, L"error", L"error", MB_OK);
 
                      /*Создаём столбцы в ListView*/
 
                      // Меняем цвет ListView
                      ListView_SetBkColor(hListView, RGB(100, 100, 100));
                      ListView_SetTextBkColor(hListView, RGB(50, 100, 150));
                      ListView_SetTextColor(hListView, RGB(0, 255, 0));
 
 
                      memset(&lvc, 0, sizeof(lvc));
 
                      lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
                      lvc.fmt = LVCFMT_LEFT;
                      lvc.cx = 40;
 
                      lvc.iSubItem = 0;
                      lvc.pszText = L"Ф.И.О студента";
                      ListView_InsertColumn(hListView, 0, &lvc);
                      ListView_SetColumnWidth(hListView, 0, 300);
 
                      lvc.cx = 100;
 
                      lvc.iSubItem = 1;
                      lvc.pszText = L"Дата";
                      ListView_InsertColumn(hListView, 1, &lvc);
 
                      lvc.iSubItem = 2;
                      lvc.pszText = L"Дисциплина";
                      ListView_InsertColumn(hListView, 2, &lvc);
                      ListView_SetColumnWidth(hListView, 2, 100);
 
                      lvc.iSubItem = 3;
                      lvc.pszText = L"Оценка";
                      ListView_InsertColumn(hListView, 3, &lvc);
                      ListView_SetColumnWidth(hListView, 3, 100);
 
                      /*Создаём строки в ListView*/
                      memset(&lvi, 0, sizeof(lvi));
 
                      lvi.mask = LVIF_TEXT | LVIF_TEXT;
 
                      for (int i = 0; i<25; i++)
                      {
                          lvi.iItem = i;
                          lvi.iSubItem = 0;
                          ListView_InsertItem(hListView, &lvi);
 
                          lvi.iItem = i;
                          lvi.iSubItem = 1;
                          ListView_InsertItem(hListView, &lvi);
 
                          lvi.iItem = i;
                          lvi.iSubItem = 2;
                          ListView_InsertItem(hListView, &lvi);
                      }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2019, 21:38
Ответы с готовыми решениями:

Вывод данных из ListView в файл
Делаю так: char cBufferText; HANDLE hFile; HWND hLV= GetDlgItem(hwnd, ID_LV); DWORD dwByte; LVITEM LvItem; hFile =...

Сохранение и загрузка данных из ListView в txt файл
Добрый вечер! Возникла проблема при сохранении данных таблицы компонента ListView в txt файл и ,соответственно, при загрузке из txt в...

ListView: сохранение содержимого в файл
Здравствуйте.Возник вопрос:Можно ли содержимое ListView сохранить в файл?

12
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 14:27
Лучший ответ Сообщение было отмечено oleg rus как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
#pragma comment(lib,"comctl32.lib")
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
 
TCHAR GWndname[]=TEXT("Write_to_file");
TCHAR GAppname[]=TEXT("Write to file");
 
#define IDC_BUTTON 100
#define IDC_LIST1 101
 
const TCHAR* ListGetString(HWND hWnd, int Count, int Item)
{
    HWND hwndList = GetDlgItem(hWnd, IDC_LIST1);
    if( !hwndList )
        return NULL;
 
    static TCHAR Result[1024];
    lstrcpy(Result, TEXT(""));
    TCHAR Buffer[100]=TEXT("");
 
    static BOOL bInit;
    if( !bInit )
    {
        LV_COLUMN lvc;
 
        for( int i=0; i<Count; ++i )
        {
            lvc.iSubItem    = i;
            lvc.mask        = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
            lvc.pszText     = Buffer;
            lvc.cchTextMax  = 100;
            ListView_GetColumn(hwndList, i, &lvc);
 
            if( Buffer[0] )
            {
                if( !Result[0] )
                    wsprintf(Result, TEXT("%s "), Buffer);
                else
                {
                    lstrcat(Result, Buffer);
                    lstrcat(Result, TEXT(" "));
                }
            }
        }
        bInit = TRUE;
        return Result;
    }
 
    LVITEM lvi;
    for( int i=0; i<Count; ++i )
    {
        lvi.iItem       = Item;
        lvi.iSubItem    = i;
        lvi.mask        = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
        lvi.pszText     = Buffer;
        lvi.cchTextMax  = 100;
        ListView_GetItem(hwndList, &lvi);
 
        if( Buffer[0] )
        {
            if( !Result[0] )
                wsprintf(Result, TEXT("%s "), Buffer);
            else
            {
                lstrcat(Result, Buffer);
                lstrcat(Result, TEXT(" "));
            }
        }
    }
    return Result;
}
 
char* TCHAR_To_ANSI(const TCHAR* Str)
{
    HGLOBAL GlobalMem;
    int Count=WideCharToMultiByte(CP_ACP, 0, Str, -1, NULL, 0, NULL, NULL);
    GlobalMem=GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE, Count+1);
    if(NULL==GlobalMem) return NULL;
    char* Data=(char*)GlobalLock(GlobalMem);
    WideCharToMultiByte(CP_ACP, 0, Str, -1, Data, Count, NULL, NULL);
    Data[Count]=0;
    GlobalUnlock(GlobalMem);
    return Data;
}
 
BOOL WriteToFile(HWND hWnd)
{
    HWND hwndList = GetDlgItem(hWnd, IDC_LIST1);
    if( !hwndList )
    {
        MessageBox(hWnd,TEXT("GetDlgItem"),TEXT("Error"),MB_OK);
        return FALSE;
    }
 
    int Total = ListView_GetItemCount(hwndList) - 1;
    if( Total > 0 )
    {
        /* Открыть файл, если не существует создать */
        HANDLE hFile=CreateFile(TEXT("test_001.txt"),GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        if(INVALID_HANDLE_VALUE==hFile)
        {
            MessageBox(hWnd,TEXT("GetDlgItem"),TEXT("Error"),MB_OK);
            return FALSE;
        }
 
        SetFilePointer(hFile, 0, NULL, FILE_END);/* Установить указатель вниз файла */
 
        for( int i=0; i<Total; ++i )
        {
            const TCHAR* Str = ListGetString(hWnd, 4, i);
            if( lstrlen(Str) )
            {
                char* svData=TCHAR_To_ANSI(Str);/* Конвертировать данные */
                int Len=lstrlenA(svData);
                if(Len)
                {
                    svData[Len-1]='\r';// Добавить символ возврат каретки,
                    lstrcatA(svData, "\n");// символ новой строки.
 
                    DWORD dwBytesWritten;
                    WriteFile(hFile, svData, lstrlenA(svData), &dwBytesWritten, NULL);
                }
            }
        }
        CloseHandle(hFile);/* Закрыть файл */
    }
    return TRUE;
}
 
//
// ListAddString
//
void ListAddString(HWND hWnd, int Item, TCHAR* Str, TCHAR* Str2, TCHAR* Str3, TCHAR* Str4)
{
    HWND hwndList = GetDlgItem(hWnd, IDC_LIST1);
    if( !hwndList ) return;
 
    LVITEM lvi;
 
    // Пункт первый, столбец "Ф.И.О."
    lvi.mask=LVIF_TEXT;
    lvi.iItem=Item;
    lvi.iSubItem=0;
    lvi.pszText=Str;
    ListView_InsertItem(hwndList, &lvi);
 
    // Пункт второй, столбец "Дата"
    lvi.iSubItem=1;
    lvi.pszText=Str2;
    ListView_SetItem(hwndList, &lvi);
        
    // Пункт третий, столбец  "Дисциплина".
    lvi.iSubItem=2;
    lvi.pszText=Str3;
    ListView_SetItem(hwndList, &lvi);
 
    // Пункт четвертый, столбец  "Оценка".
    lvi.iSubItem=3;
    lvi.pszText=Str4;
    ListView_SetItem(hwndList, &lvi);
}
 
//
// OnCommand
//
BOOL OnCommand(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    WORD Command=LOWORD(wParam);
    switch(Command)
    {
        case IDC_BUTTON:
            WriteToFile(hWnd);
            break;
    };
    return TRUE;
}
 
//
// OnCreate
//
BOOL OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    HWND hWnd=lpCreateStruct->hwndParent;
    HINSTANCE hInstance=lpCreateStruct->hInstance;
 
    // Set icon
    HICON Icon=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));
    if(!Icon)
        Icon=LoadIcon(hInstance, IDI_APPLICATION);
    SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)Icon);
 
    // Create button
    HWND hwndBtn=CreateWindowEx(0,TEXT("button"),TEXT("Write down"),
        BS_DEFPUSHBUTTON|WS_CHILD|WS_TABSTOP|WS_VISIBLE,
        10,10,100,28,hWnd,(HMENU)(UINT_PTR)IDC_BUTTON,lpCreateStruct->hInstance,NULL);
    if(!hwndBtn)
    {
        MessageBox(hWnd,TEXT("Cannot create button"),TEXT("Error"),MB_OK);
        return -1;
    }
 
    /*Растяним таблицу по правому краю окна*/
    RECT rc;
    GetClientRect(hWnd, &rc);
    HWND hwndList = CreateWindow(WC_LISTVIEW, L"GOOD",
        LVS_REPORT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | LVS_AUTOARRANGE,
        170, 0, rc.right, 500, hWnd,
        (HMENU)(UINT_PTR)IDC_LIST1, hInstance, NULL);
    
    ListView_SetExtendedListViewStyle(hwndList, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    // Если LIstView не создался выведем ошибку
    if (hwndList == NULL)
        MessageBox(hWnd, L"error", L"error", MB_OK);
 
    /*Создаём столбцы в ListView*/
    
    // Меняем цвет ListView
    ListView_SetBkColor(hwndList, RGB(100, 100, 100));
    ListView_SetTextBkColor(hwndList, RGB(50, 100, 150));
    ListView_SetTextColor(hwndList, RGB(0, 255, 0));
 
    LVCOLUMN lvc;
    memset(&lvc, 0, sizeof(lvc));
 
    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvc.fmt = LVCFMT_LEFT;
    lvc.cx = 40;
    lvc.iSubItem = 0;
    lvc.pszText = L"Ф.И.О студента";
    
    ListView_InsertColumn(hwndList, 0, &lvc);
    ListView_SetColumnWidth(hwndList, 0, 300);
    
    lvc.cx = 100;
    lvc.iSubItem = 1;
    lvc.pszText = L"Дата";
    ListView_InsertColumn(hwndList, 1, &lvc);
    
    lvc.iSubItem = 2;
    lvc.pszText = L"Дисциплина";
    ListView_InsertColumn(hwndList, 2, &lvc);
    ListView_SetColumnWidth(hwndList, 2, 100);
    
    lvc.iSubItem = 3;
    lvc.pszText = L"Оценка";
    ListView_InsertColumn(hwndList, 3, &lvc);
    ListView_SetColumnWidth(hwndList, 3, 100);
    
    LVITEM lvi;
    memset(&lvi, 0, sizeof(lvi));
 
    /*Создаём строки в ListView*/ 
    lvi.mask = LVIF_TEXT | LVIF_TEXT;
    
    for (int i = 0; i<25; i++)
    {
        lvi.iItem = i;
        lvi.iSubItem = 0;
        ListView_InsertItem(hwndList, &lvi);
 
        lvi.iItem = i;
        lvi.iSubItem = 1;
        ListView_InsertItem(hwndList, &lvi);
        
        lvi.iItem = i;
        lvi.iSubItem = 2;
        ListView_InsertItem(hwndList, &lvi);
    }
 
    // Заполнить пункты столбцов.
 
    ListAddString(hWnd, 0, TEXT("Иванов Иван Иванович"), TEXT("23.09.19"), TEXT("Физкультура"), TEXT("5"));
    ListAddString(hWnd, 1, TEXT("Петров Петр Петрович"), TEXT("23.09.19"), TEXT("Физкультура"), TEXT("5"));
    ListAddString(hWnd, 2, TEXT("Сидоров Сидор Сидорович"), TEXT("23.09.19"), TEXT("Физкультура"), TEXT("5"));
    ListAddString(hWnd, 3, TEXT("Игнатов Игнат Игнатович"), TEXT("23.09.19"), TEXT("Физкультура"), TEXT("5"));
 
    return 0;
}
 
//
// WndProc
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT retval=0;
    LPCREATESTRUCT lpCreateStruct;
 
    switch(uMsg)
    {
        case WM_CREATE:
        {
            lpCreateStruct=reinterpret_cast<LPCREATESTRUCT>(lParam);
            lpCreateStruct->hwndParent=hWnd;
        }
        return OnCreate(lpCreateStruct);
 
        case WM_COMMAND:
            return OnCommand(hWnd,uMsg,wParam,lParam);
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
 
        default:
            retval=DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    return retval;
}
 
//
// Entry point
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd=HWND_DESKTOP;
    WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_VREDRAW|CS_HREDRAW,WndProc,0,0,hInstance,
        LoadIcon(NULL,IDI_APPLICATION),LoadCursor(NULL,IDC_ARROW),(HBRUSH)(COLOR_WINDOW),NULL,GWndname,NULL,};
    ATOM Atom=RegisterClassEx(&wc);
    if(Atom) {
        HWND hWnd=CreateWindowEx(WS_EX_WINDOWEDGE,MAKEINTATOM(Atom),GAppname,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,HWND_DESKTOP,NULL,hInstance,NULL);
        if(hWnd) {
            ShowWindow(hWnd,nCmdShow);
            UpdateWindow(hWnd);
            MSG msg;
            while(GetMessage(&msg,NULL,0,0)>0) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }else
            MessageBox(hWnd,TEXT("Cannot create window"),TEXT("Error"),MB_OK|MB_ICONSTOP);
    }else
        MessageBox(hWnd,TEXT("Cannot register class"),TEXT("Error"),MB_OK|MB_ICONSTOP);
    return EXIT_SUCCESS;
}

SysTreeView32_WriteToFile.zip
2
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.09.2019, 15:34  [ТС]
гог педа, Спасибо большое за помощь очень сильно помог.

Добавлено через 2 минуты
гог педа, А для чего используешь файл "resource.h"?
0
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 15:42
Лучший ответ Сообщение было отмечено oleg rus как решение

Решение

Цитата Сообщение от oleg rus Посмотреть сообщение
для чего используешь файл "resource.h"?
Иконка

C++
1
2
3
4
5
// Set icon
    HICON Icon=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));
    if(!Icon)
        Icon=LoadIcon(hInstance, IDI_APPLICATION);
    SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)Icon);
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.09.2019, 15:54  [ТС]
гог педа, И ещё вопросик,как мне считать данные из файла test_001.txt который получился после того как программа выполнилась,я хочу вывести содержимое этого файла в Edit
делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  TCHAR buff[1000]; //{ 0xff, 0xfe };
 
                           DWORD lpNumberOfBytesRead;//Кол-во прочитаных байтов, если 0 то уже конец файла
 
                           hFile1 = CreateFile(  //функция создания ANSI!!!последния буква А
                               _T("test_001.txt"), 
                               GENERIC_READ,  //в режим чтения GENERIC_WRITE то в запись 
                               0, NULL,
                               OPEN_EXISTING, //говорим что открываем файл УЖЕ СУЩЕСТВУЮЩИЙ КАК C:\MYFILES.TXT
                               FILE_ATTRIBUTE_NORMAL, //Это обычный файл с атриьутом не архивный и т.п.
                               NULL); //это точно не помню с защитой 
                           if (hFile1 == INVALID_HANDLE_VALUE)   //если ошибка то выходим INVALID_HANDLE_VALUE - некоторая переменная с некоторым значением типа #defain INVALID_HANDLE_VALUE Х..З
                           {
                               MessageBox(NULL, TEXT("Ошибка КЛИЕНТА! - неудалось открыть файл"), TEXT("Warning"), MB_OK);
                               // CloseHandle(hFile);
                               return 0;
                           }
                           do //тут обьявляем цикл с пост условием потомучто мы не знаем какой длины файл и будем читать до конца, когда lpNumberOfBytesRead будет равна 0 тогда файл прочитан
                           {
                               ReadFile( //функциячтения данных, параметры: дискрептор, массив куда читать, сколько прочитать байт, сколько прочитано, НЕ ПОМНЮ
                                   hFile1,
                                   buff, sizeof(buff), &lpNumberOfBytesRead, NULL);
                               if (lpNumberOfBytesRead == 0)  //Если ничего не рпочитано выходим
                                   break; //выход из цикла
 
                           } while (lpNumberOfBytesRead != 0);
                           CloseHandle(hFile1); //закрыть дискрептор в данном случае для файла.
 
 
                           SetWindowText(hRichEdit, buff);
Но в Edit вылазиет куча вопросительных знаков.
0
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 16:12
Лучший ответ Сообщение было отмечено oleg rus как решение

Решение

Цитата Сообщение от oleg rus Посмотреть сообщение
И ещё вопросик
не стесняйся, спрашивай...
------------------------------------

на этой страничке Выполнение команд перед выключением ПК либо замена кнопки
см. текст программы
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.09.2019, 17:20  [ТС]
гог педа, Ещё нюанс тот .txt файл который создаётся с помощью вашей программы теперь в Edit считывается хорошо,а содержимое .txt файла который я создал сам не выводиться
Создаю я его так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
hFile = CreateFile(_T("Print.txt"), GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
 
 DWORD dwByte;
                           TCHAR szTemp[100]; 
                           TCHAR szTemp1[100];
                           TCHAR szTab[1000] = L"\r\n";
                           TCHAR szTemp2[100];
                           TCHAR szTemp3[100];
                           TCHAR szTemp4[100];
                           TCHAR szTemp5[100];
                           
                           GetWindowText(hEdit[0], szTemp, 100);
                           GetWindowText(hEdit[1], szTemp1, 100);
                           GetWindowText(hEdit[2], szTemp2, 100);
                           GetWindowText(hEdit[3], szTemp3, 100);
                           GetWindowText(hEdit[4], szTemp4, 100);
                           GetWindowText(hEdit[5], szTemp5, 100);
                           lstrcat(szTab, szTemp);
                           lstrcat(szTab, L", ");
                           lstrcat(szTab, szTemp1);
                           lstrcat(szTab, L", ");
                           lstrcat(szTab, szTemp2);
                           lstrcat(szTab, L", ");
                           lstrcat(szTab, szTemp3);
                           lstrcat(szTab, L", ");
                           lstrcat(szTab, szTemp4);
                           lstrcat(szTab, L", ");
                           lstrcat(szTab, szTemp5);
                           lstrcat(szTab, L".\r\n");
                           
                           WriteFile(hFile, (LPVOID)szTab, lstrlen(szTab) * sizeof(TCHAR), &dwByte, NULL);
                           CloseHandle(hFile);
При этом данные в файл записываются.
0
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 18:26
Цитата Сообщение от oleg rus Посмотреть сообщение
содержимое .txt файла который я создал сам не выводиться
В EditBox или?

Если ваш проект использует многобайтовую кодировку (что мы имеем)
Для записи с помощью WriteFile() нужно преобразовывать строку в байтовую (ANSi) - кодировку
Используйте функцию TCHAR_To_ANSI()
Принимаем из EditBox, конвертируем, записываем.

Обратный процесс, указан по ссылке см. тект программы,
вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
DWORD dwBytesRead;
ReadFile(hFile,(LPVOID)InACh,dwFileSize,&dwBytesRead,NULL);
if(dwBytesRead)
{
    TCHAR* UCh = new TCHAR[dwFileSize+1];
    MultiByteToWideChar(CP_ACP,0,InACh,-1,UCh,dwFileSize);
    UCh[dwFileSize]=0;
 
    SetWindowText(hWnd, UCh);
 
    delete [] UCh;
}
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.09.2019, 19:06  [ТС]
гог педа, Спасибо за ответ но с этим я уже разобрался,но всё равно спасибо.
Ещё пару вопросов,как в окно программы вывести время что бы часы тикали,и дату?
0
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 20:46
Цитата Сообщение от oleg rus Посмотреть сообщение
что бы часы тикали,и дату?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#pragma comment(lib,"comctl32.lib")
 
#include <windows.h>
#include <commctrl.h>
 
TCHAR GWndname[]=TEXT("wnd_Statusbar"); // Класс,
TCHAR GAppname[]=TEXT("Statusbar");     // заголовок окна.
 
#define IDC_STATUS 199
 
#define TIMER_CLOCK         700
#define TIMER_CLOCK_DELAY   1000
UINT_PTR g_nTimerClock;
 
const TCHAR* StampTime()
{
    static TCHAR Buffer[128];
    TCHAR Time[128]=TEXT("");
    const TCHAR* Format=TEXT("hh':'mm':'ss");
    GetTimeFormat(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, NULL, Format, Time, 128);
    wsprintf(Buffer, TEXT("%.100s"), Time);
    return Buffer;
}
 
const TCHAR* StampDate()
{
    static TCHAR Result[128];
    TCHAR Date[128]=TEXT("");
    const TCHAR* DateFormat=TEXT("dddd dd-MM-yyyy");
    GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, DateFormat, Date, 128);
    wsprintf(Result, TEXT("%.100s"), Date);
    return Result;
}
 
//
// UpdateStatusBar
//
void UpdateStatusBar(HWND hWnd, const TCHAR* Str, WORD wNumber, WORD wFlags)
{
    HWND hwndStatusbar = GetDlgItem(hWnd, IDC_STATUS);
    SendMessage(hwndStatusbar, SB_SETTEXT, wNumber | wFlags, (LPARAM)Str);
}
 
void InitializeStatusBar(HWND hwndParent)
{
    HDC hDC = GetDC(hwndParent);
    RECT rect;
    GetClientRect(hwndParent, &rect);
    
    int ptArray[3];
    ptArray[2] = rect.right;
    
    SIZE size;
    const int cSpaceInBetween = 8;
 
    if(GetTextExtentPoint(hDC, TEXT("00:00:00 PM"), 12, &size))
        ptArray[1] = ptArray[2] - (size.cx) - cSpaceInBetween;
    else
        ptArray[1] = 0;
    
    if(GetTextExtentPoint(hDC, TEXT("Time:"), 6, &size))
        ptArray[0] = ptArray[1] - (size.cx) - cSpaceInBetween;
    else
        ptArray[0] = 0;
    
    ReleaseDC(hwndParent, hDC);
 
    HWND hwndStatusbar = GetDlgItem(hwndParent, IDC_STATUS);
    SendMessage(hwndStatusbar, SB_SETPARTS, sizeof(ptArray)/sizeof(ptArray[0]), (LPARAM)(LPINT)ptArray);
 
    UpdateStatusBar(hwndParent, StampDate(), 0, 0);
    UpdateStatusBar(hwndParent, TEXT("Time:"), 1, SBT_POPOUT);
}
 
//
// OnCreate
//
BOOL OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    HWND hWnd=lpCreateStruct->hwndParent;
    HINSTANCE hInstance=lpCreateStruct->hInstance;
 
    //
    // Create status bar
    //
    HWND hwndStatusbar = CreateStatusWindow(WS_VISIBLE | WS_CHILD | WS_BORDER, TEXT(""), hWnd, IDC_STATUS);
    if(hwndStatusbar)
    {
        InitializeStatusBar(hWnd);
        g_nTimerClock = SetTimer(hWnd, TIMER_CLOCK, TIMER_CLOCK_DELAY, NULL);
        if(!g_nTimerClock)
        {
            ShowWindow(hwndStatusbar, SW_HIDE);
            MessageBox(hWnd, TEXT("Failed SetTimer - Clock"), GAppname, MB_OK);
            return -1;
        }
    }
    return 0;
}
 
LRESULT OnTimer(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if(TIMER_CLOCK == wParam)
        UpdateStatusBar(hWnd, StampTime(), 2, 0);
    return 0;
}
 
BOOL OnPaint(HWND hWnd)
{
    const TCHAR* Msg=TEXT("\
\
Я не курю, что и вам - Желаю!\r\n\
Sarge c авы \"Квейк\" цибарит...\
\
");
    PAINTSTRUCT ps;
    HDC hDC=BeginPaint(hWnd, &ps);
 
    RECT rect;
    GetClientRect(hWnd, &rect);
    rect.left+=(rect.right/4);
    rect.top+=(rect.bottom/4);
    rect.right-=(rect.right/4);
 
    SetBkMode(hDC,TRANSPARENT);
 
    COLORREF clrText;
    clrText=RGB(10, 10, 90);
    SetTextColor(hDC, clrText);
 
    DrawText(hDC,Msg,-1,&rect,DT_EXTERNALLEADING|DT_NOPREFIX|DT_WORDBREAK);
 
    return EndPaint(hWnd, &ps);
}
 
//
// WndProc
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT retval=0;
    LPCREATESTRUCT lpCreateStruct;
 
    switch(uMsg)
    {
        case WM_CREATE:
        {
            lpCreateStruct=reinterpret_cast<LPCREATESTRUCT>(lParam);
            lpCreateStruct->hwndParent=hWnd;
        }
        return OnCreate(lpCreateStruct);
 
        case WM_PAINT:
            return OnPaint(hWnd);
 
        case WM_TIMER:
            OnTimer(hWnd, uMsg, wParam, lParam);
            break;
 
        case WM_SIZE:
        {
            UINT nType=(UINT)wParam;
            if( (!nType) || (IsWindowVisible(hWnd)) )
            {
                int cx=LOWORD(lParam);
                int cy=HIWORD(lParam);
                MoveWindow(GetDlgItem(hWnd,IDC_STATUS), cx/4, cy-80, 100, 30, TRUE);
                InitializeStatusBar(hWnd);
                InvalidateRect(hWnd,NULL,TRUE);
            }
        }
        break;
 
        case WM_DESTROY:
            
            if(g_nTimerClock)
            {
                KillTimer(hWnd, g_nTimerClock);
                g_nTimerClock = NULL;
            }
            
            PostQuitMessage(0);
            break;
 
        default:
            retval=DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    return retval;
}
 
//
// Entry point
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd=HWND_DESKTOP;
    WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_VREDRAW|CS_HREDRAW,WndProc,0,0,hInstance,
        LoadIcon(NULL,IDI_APPLICATION),LoadCursor(NULL,IDC_ARROW),(HBRUSH)(COLOR_WINDOW),NULL,GWndname,NULL,};
    ATOM Atom=RegisterClassEx(&wc);
    if(Atom) {
        HWND hWnd=CreateWindowEx(WS_EX_WINDOWEDGE,MAKEINTATOM(Atom),GAppname,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,HWND_DESKTOP,NULL,hInstance,NULL);
        if(hWnd) {
            ShowWindow(hWnd,nCmdShow);
            UpdateWindow(hWnd);
            MSG msg;
            while(GetMessage(&msg,NULL,0,0)>0) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        } else
            MessageBox(hWnd,TEXT("Cannot create window"),TEXT("Error"),MB_OK|MB_ICONSTOP);
    } else
        MessageBox(hWnd,TEXT("Cannot register class"),TEXT("Error"),MB_OK|MB_ICONSTOP);
    return EXIT_SUCCESS;
}
1
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
24.09.2019, 21:49  [ТС]
гог педа, Спасибо то что надо сейчас буду пробовать такое реализовать.

Добавлено через 52 минуты
гог педа, А как создать дочернее окно так же как и главное окно?
Я в дочернем окне хочу Edit разместить.
0
 Аватар для гог педа
11 / 8 / 3
Регистрация: 24.09.2019
Сообщений: 11
24.09.2019, 23:58
Цитата Сообщение от oleg rus Посмотреть сообщение
А как создать дочернее окно так же как и главное окно?
Я в дочернем окне хочу Edit разместить.
Как правильно добавить С++ код в оконную функцию WndProc?

WinAPI окно с текстом, в котором будут указаны Ваши ФИО
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
28.09.2019, 20:46  [ТС]
гог педа, А занимались вы когда нибудь разработкой своего интерфейса не прибегая к стандартному? Просто хочу заняться разработкой собственного интерфейса для своей программы и не знаю с чего начать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2019, 20:46
Помогаю со студенческими работами здесь

Сохранение данных ListView
Привет всем, есть 3 колонки в listview в этих колонках содержится информация, получается что каждая строка в таблице listview имеет свой...

Listview. Сохранение данных
Только только начал изучение делфи. Наткнулся на проблемку: добавляю на форму Listview, настраиваю, оформляю и т.п., компилирую, запускаю....

Сохранение данных в таблице listView
у меня имеется две формы. На одной имеется таблица listView1. а на другой - таблица listView2 И на каждой форме есть кнопочка...

Сохранение данных из ListView в txt
Люди добрые! Вот в этом коде, открывается диалог для сохранения данных из listView. Данные реально сохраняются только в файле...

Сохранение данных из ListView и их считывание
Опять я Всех опередил )) сижу сам себе на вопросы отвечаю :)) Тема закрыта.. а кому интересно вот так : Я вот так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru