странное поведение 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 );
}
}

2

Решение

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

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

ES_VERTICAL         0x00400000
ES_NOIME            0x00080000
ES_SELFIME          0x00040000

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]