Выравнивание таблицы в Richedit

Тема в разделе "Общие вопросы по С и С++", создана пользователем -, 9 апр 2009.

  1. Гость

    Всем привет. Проблема заключается в том, что когда загружаю файл .rtf в RichEdit и делаю выравнивание, то таблица которая находится в этом файле сдвигается куда-то вправо причем расширяя все окно. Вот код моей проги:
    Код (Text):
    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <richedit.h>

    HWND hMainWnd = 0;
    HWND hWndRichEdit = 0;

    LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch(uMsg)
    {
    case WM_DESTROY:
    PostQuitMessage(0);
    break;

    case WM_SIZE:
    MoveWindow(hWndRichEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
    PARAFORMAT pf = {0};
    pf.cbSize = sizeof(pf);
    pf.dwMask = PFM_ALIGNMENT;
    pf.wAlignment = PFA_CENTER;

    // Выделить текст
    SendMessage(hWndRichEdit,EM_SETSEL,0,-1);

    // Применить к выделению центрирование
    SendMessage(hWndRichEdit,EM_SETPARAFORMAT,0,(LPARAM)&pf);


    break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    WNDCLASSEX wc = {0};

    wc.cbSize = sizeof(wc);
    wc.lpfnWndProc = MainWndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    wc.lpszClassName = _T("MainWndClass");
    RegisterClassEx(&wc);

    hMainWnd = CreateWindowEx(0, wc.lpszClassName, _T("TestApp"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    200, 200, 400, 365, NULL, NULL, hInstance, NULL);

    LoadLibrary("Msftedit.dll");

    hWndRichEdit = CreateWindowEx(0, _T("RichEdit50W"), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER |
    ES_MULTILINE | WS_VSCROLL | WS_HSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY,
    0, 0, 380, 320, hMainWnd, NULL, hInstance, NULL);

    HANDLE hFile = CreateFile(_T("C:\\1.rtf"), GENERIC_READ, FILE_SHARE_READ,
    0, OPEN_EXISTING, 0, 0);
    if(hFile != INVALID_HANDLE_VALUE)
    {
    DWORD dwRead = 0, dwSize = GetFileSize(hFile, NULL);
    char *buf = new char[dwSize+1];
    ReadFile(hFile, buf, dwSize, &dwRead, 0);
    buf[dwRead] = '\0';
    CloseHandle(hFile);

    SetWindowTextW(hWndRichEdit, (wchar_t*)buf);  // передаётся ANSI строка. работает. тестировалось в WinXP SP2.
    // при портировании на другие версии ОС Windows может не работать.

    delete []buf;
    }

    MSG msg;
    while(GetMessage(&msg, 0, 0, 0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }

    return 0;
    }
    вот файл, который загружаю:
    Скажите в чем проблема?
     

    Вложения:

    • 3.rtf
      Размер файла:
      18,9 КБ
      Просмотров:
      6
Загрузка...

Поделиться этой страницей