Форум программистов, компьютерный форум CyberForum.ru

Перекодировка текста для вывода в окне - C++

Восстановить пароль Регистрация
 
DumoH19991
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 29
17.06.2014, 21:30     Перекодировка текста для вывода в окне #1
Здравствуйте. Помогите реализовать перекодировку текстового файла с помощью функций CharToOem() и OemToChar().
После открытия текстового файла в окне, нажатием на пункт меню нужно перекодировать текст в кодировку Dos (WM_MENU_DOS). Как это реализовать? Может быть кто подскажет литературу, где подробно расписано применение данных функций.
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include "listing2_3.h"
#include <commdlg.h>
#include <fstream>
#include <vector>
#include <string>
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static HWND hwndToolBar;
    static TCHAR name[256] = _T("");;
    static OPENFILENAME file;
    using namespace std;
    std::ifstream in;
    std::ofstream out;
    static std::vector<std::string> v;
    std::vector<std::string>::iterator it;
    std::string st;
    static int size_Toolbar;
    static LOGFONT lf;
    static CHOOSEFONT cf;
    static HFONT hfont;
    TEXTMETRIC tm;
    RECT rt;
    int y, k;
    static int n,length,sx,sy,cx,iVscrollPos,iHscrollPos,COUNT,MAX_WIDTH;
    static SIZE size = {8, 16}; //Ширина и высота символа
    switch (message)
    {
    case WM_CREATE:
        file.lStructSize = sizeof(OPENFILENAME);
        file.hInstance = hInst;
        file.lpstrFilter = _T("Text\0*.txt");
        file.lpstrFile = name;
        file.nMaxFile = 256;
        file.lpstrInitialDir = _T(".\\");
        file.lpstrDefExt = _T("txt");
        hwndToolBar = CreateToolbarEx(hWnd, WS_CHILD|WS_VISIBLE|CCS_TOP,1,0,HINST_COMMCTRL,IDB_STD_SMALL_COLOR,tbb,3,0,0,0,0,sizeof(TBBUTTON));
        cf.lStructSize = sizeof(CHOOSEFONT);
        cf.Flags = CF_EFFECTS|CF_INITTOLOGFONTSTRUCT|CF_SCREENFONTS;
        cf.hwndOwner = hWnd;
        cf.lpLogFont = &lf;
        break;
    case WM_SIZE:
        sx = LOWORD(lParam);
        sy = HIWORD(lParam);
        k = n - (sy - size_Toolbar)/size.cy;
        if (k > 0) COUNT = k; else COUNT = iVscrollPos = 0;
        SetScrollRange(hWnd, SB_VERT, 0, COUNT, FALSE);
        SetScrollPos (hWnd, SB_VERT, iVscrollPos, TRUE);
        k = length - sx/size.cx;
        if (k > 0) MAX_WIDTH = k; else MAX_WIDTH = iHscrollPos = 0;
        SetScrollRange(hWnd, SB_HORZ, 0, MAX_WIDTH, FALSE);
        SetScrollPos (hWnd, SB_HORZ, iHscrollPos, TRUE);
        SendMessage(hwndToolBar, TB_AUTOSIZE,0,0);
        GetWindowRect(hwndToolBar, &rt);
        size_Toolbar = rt.bottom - rt.top;
        break;
 
        case WM_MOUSEWHEEL:
        iVscrollPos -= (short)HIWORD(wParam)/WHEEL_DELTA;
        iVscrollPos = max(0, min(iVscrollPos, COUNT));
        SetScrollPos(hWnd, SB_VERT, iVscrollPos, TRUE);
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_VSCROLL :
        switch (LOWORD(wParam))
        {
        case SB_LINEUP : iVscrollPos--; break;
        case SB_LINEDOWN : iVscrollPos++; break;
        case SB_PAGEUP : iVscrollPos -= sy / size.cy; break;
            case SB_PAGEDOWN : iVscrollPos += sy / size.cy; break;
        case SB_THUMBPOSITION : iVscrollPos = HIWORD(wParam); break;
        }
        iVscrollPos = max(0, min(iVscrollPos, COUNT));
        if (iVscrollPos != GetScrollPos(hWnd, SB_VERT))
        {
        SetScrollPos (hWnd, SB_VERT, iVscrollPos, TRUE);
        InvalidateRect(hWnd, NULL, TRUE);
        }
        break;
    case WM_HSCROLL :
        switch (LOWORD(wParam))
        {
        case SB_LINEUP : iHscrollPos--; break;
        case SB_LINEDOWN : iHscrollPos++; break;
        case SB_PAGEUP : iHscrollPos -= 8; break;
        case SB_PAGEDOWN : iHscrollPos += 8; break;
        case SB_THUMBPOSITION : iHscrollPos = HIWORD(wParam); break;
        }
        iHscrollPos = max(0, min(iHscrollPos, MAX_WIDTH));
        if (iHscrollPos != GetScrollPos(hWnd, SB_HORZ))
        {
        SetScrollPos (hWnd, SB_HORZ, iHscrollPos, TRUE);
        InvalidateRect(hWnd, NULL, TRUE);
        }
        break;
    
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case ID_FILE_NEW :
            if (!v.empty()) std::vector<std::string>().swap(v);
            n = length = 0;
            SendMessage(hWnd, WM_SIZE, 0, sy << 16 | sx);
            InvalidateRect(hWnd, NULL, TRUE);
            break;
        case ID_FILE_OPEN :
            file.lpstrTitle = _T("Открыть файл для чтения");
            file.Flags = OFN_HIDEREADONLY;
            if (!GetOpenFileName(&file)) return 1;
            in.open(name);
            while (getline(in,st))
            {
            if (length < st.length()) length = st.length();
            v.push_back(st);
            }
            in.close();
            n = v.size();
            SendMessage(hWnd, WM_SIZE, 0, sy << 16 | sx);
            InvalidateRect(hWnd, NULL, TRUE);
            break;
        case ID_FILE_SAVE :
            file.lpstrTitle = _T("Открыть файл для записи");
            file.Flags = OFN_NOTESTFILECREATE;
            if (!GetSaveFileName(&file)) return 1;
            out.open(name);
            for (it = v.begin(); it != v.end(); ++it) out << *it << '\n';
            out.close();
            break;
        case ID_FONT :
            if(ChooseFont(&cf))
            {
                if (hfont) DeleteObject(hfont);
                hfont = CreateFontIndirect(&lf);
                hdc = GetDC(hWnd);
                SelectObject(hdc, hfont);
                GetTextMetrics(hdc, &tm);
                size.cx = tm.tmAveCharWidth;
                size.cy = tm.tmHeight + tm.tmExternalLeading;
                ReleaseDC(hWnd, hdc);
                SendMessage(hWnd, WM_SIZE, 0, sy << 16 | sx);
                InvalidateRect(hWnd, NULL, TRUE);
            }
            break;
 
        /*case ID_CHARTOOEM:
            
            break;*/
 
        /*case ID_OEMTOCHAR:
            
            break;*/
 
 
        case IDM_EXIT: DestroyWindow(hWnd); break;
        default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        if (hfont)
        {
            SelectObject (hdc, hfont);
            SetTextColor(hdc, cf.rgbColors);
        }
            for (y=size_Toolbar,it=v.begin()+iVscrollPos;it!=v.end()&&y<sy;++it,y+=size.cy)
            if (iHscrollPos < it->length())
                TabbedTextOutA(hdc,0,y,it->data()+iHscrollPos,it->length()-iHscrollPos,0,NULL,0);
            EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        if (hfont) DeleteObject(hfont);
        PostQuitMessage(0);
    break;
    default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4314 / 3735 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
17.06.2014, 21:43     Перекодировка текста для вывода в окне #2
В чём сложность? Читаешь строку из файла, затем перекодируешь функцией. Всего 2 параметра - исходная строка и строка, куда помещается перекодированная копия.
DumoH19991
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 29
17.06.2014, 22:24  [ТС]     Перекодировка текста для вывода в окне #3
nmcf, Если бы я знал какие параметры, в моем случае задавать и куда данную функцию вписать, я бы не стал задавать вопросов
nmcf
4314 / 3735 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
17.06.2014, 22:35     Перекодировка текста для вывода в окне #4
Строки у тебя хранятся в векторе
C++
1
static std::vector<std::string> v;
Значит делай цикл по нему и перекодируй.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,919
Записей в блоге: 1
17.06.2014, 22:35     Перекодировка текста для вывода в окне #5
Функция CharToOem
Функция OemToChar
Yandex
Объявления
17.06.2014, 22:35     Перекодировка текста для вывода в окне
Ответ Создать тему
Опции темы

Текущее время: 22:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru