Странное поведение richedit controll, текст написан горизонтально как на старом японском

Все это компилируется нормально, без ошибок, но курсор находится вертикально и отображается в верхнем правом углу окна, а текстовый поток похож на японский сверху вниз в символах, справа налево в строках. Символы невидимы, но копируемы. У меня английская Windows XP SP3 без азиатского программного обеспечения на борту.

#include <windows.h>
#include <richedit.h>

int main() {
  LoadLibrary("Msftedit.dll");
  HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(0);
  HWND richeditWindow = CreateWindowExW (
    WS_EX_TOPMOST,
    L"RichEdit50W",
    L"window text",
    WS_OVERLAPPEDWINDOW | ES_MULTILINE | WS_VISIBLE,
    0, 0, 500, 500,
    NULL, NULL, hInstance, NULL
  );

  MSG msg;
  while( GetMessageW( &msg, richeditWindow, 0, 0 ) ) {
    TranslateMessage( &msg );
    DispatchMessageW( &msg );
  }
}

1 ответ

Решение

Проблема в том, что вы используете WS_OVERLAPPEDWINDOW стиль. Богатые элементы редактирования предназначены для использования в качестве дочерних окон и не поддерживают WS_OVERLAPPEDWINDOW.

WS_OVERLAPPEDWINDOW компилируется как 0x00CF0000. Это перекрывает несколько богатых стилей редактирования, а именно:

ES_VERTICAL         0x00400000
ES_NOIME            0x00080000
ES_SELFIME          0x00040000

Таким образом, применение макроса WS_OVERLAPPEDWINDOW к вашему элементу управления аналогично применению этих стилей.

Другие вопросы по тегам