Чтение файла с использованием сопоставления файлов, а не отдельной строки в элементе управления «Редактировать»

0

У меня проблема: я использую сопоставление файлов для чтения файла, но в редакторе Edit нет отдельной строки:

szFileName = L"abc.txt";
hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
pMemory = MapViewOfFile(hMapFile, FILE_MAP_READ, 0,0,0);

int size_needed = MultiByteToWideChar(CP_UTF8, 0, (LPCCH)pMemory, -1, NULL, 0);
wchar_t *buffer = new wchar_t[size_needed];
MultiByteToWideChar(CP_UTF8, 0, (LPCCH)pMemory, -1, buffer, size_needed);

FileSize = GetFileSize(hFile, NULL);
SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM)buffer);
delete[] buffer;
UnmapViewOfFile(pMemory);
CloseHandle(hMapFile);
CloseHandle(hFile);

Мое управление:

hWndEdit = CreateWindowEx(NULL, L"Edit", NULL,
                        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,
                        50,35,900,300,hWnd,(HMENU)IDC_EDIT,hInstance,NULL);

Я использую UNICODE.

Хотя я отлаживаю pMemory и буфер, я вижу, что он содержит новый символ строки, но в элементе управления Edit не отображается отдельная строка.

Где ошибка и как исправить!???

  • 0
    Что возвращает SendMessage ()? Возможно, установленный текстовый вызов не работает.
Теги:
winapi

2 ответа

4

Для создания новой строки для 0x0D управления редактированием требуется последовательность "\r\n" (то есть 0x0D значения 0x0D 0x0A). Вам также необходимо применить стиль ES_MULTILINE к ES_MULTILINE управления Edit.

1

Вам нужна ссылка Изменить стиль управления, здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/bb775464%28v=vs.85%29.aspx

и, как вы можете видеть, вам нужно добавить ES_MULTILINE в элемент управления Edit:

hWndEdit = CreateWindowEx(NULL, L"Edit", NULL,
           WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL | ES_MULTILINE, 50,35,900,300,hWnd,(HMENU)IDC_EDIT,hInstance,NULL);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню