Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > RICHEDIT без доп. библиотек


Автор: cupper 19.9.2009, 17:17
Можно ли создать в WinAPI функцией CreateWindowEx или CreateWindow элемент RICHEDIT или ему подобный без задействования доп. библиотек ?
Cреда разработки DEV-Cpp

Для чего это нужно: 
в процессе работы программы нужно выводить длинные предложения на экран рабочей области. Можно конечно это сделать через статик, но я неуверен что он умеет по словам переносить, а предложение длинное, не уместиться на экране.

С обычным EDIT такая проблема как и со статиком - перенос по словам.

Автор: 586 19.9.2009, 18:12
Цитата(cupper @  19.9.2009,  18:17 Найти цитируемый пост)
С обычным EDIT такая проблема как и со статиком - перенос по словам. 

EDIT может переносить по словам.
Для этого должен присутствовать стиль ES_MILTILINE и отсутствовать стили WS_HSCROLL и ES_AUTOHSCROLL.

Автор: cupper 19.9.2009, 20:03
вы описались, вероятно вы имели ввиду ES_MULTILINE. 

Кланюсь в ноги вам добрый человек !

жаль количество постов не позволяет вам + поставить.

Автор: 586 19.9.2009, 20:41
Цитата(cupper @  19.9.2009,  18:17 Найти цитируемый пост)
без задействования доп. библиотек

cupper, а riched20.dll, которая устанавливается вместе с Windows - тоже лишняя библиотека?

Автор: BEOWOLF 20.9.2009, 21:21
Во-первых, обычный статик - тоже можно сделать многострочным, и переносить текст по словам, как в EDIT, для этого в редакторе ресурсов не надо даже никаких стилей устанавливать, вот диалога пример из RC-файла:
Код

IDD_EXAMPLE DIALOGEX 0, 0, 68, 32
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CAPTION
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Example"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT           "Long text example in multiline static",IDC_STATIC,4,4,60,24
END
Однако, в статик нельзя добавлять текст к уже существующему, как это можно делать в эдите через посылку сообщений выделения и замены. По этой причине лучше юзать эдит или ричэдит. Чтобы подгрузить библиотеку, нужно вставить такую конструкцию инициализации:
Код

    INITCOMMONCONTROLSEX InitCtrls = {
        sizeof(INITCOMMONCONTROLSEX),
        ICC_WIN95_CLASSES |
        ICC_STANDARD_CLASSES |
        ICC_LINK_CLASS // здесь перечислить нужные классы
    };
    VERIFY(InitCommonControlsEx(&InitCtrls));
    // Ensure that the RichEdit library is loaded
    VERIFY(false
        //|| (hinstRichEdit = LoadLibrary(TEXT("Msftedit.dll"))) != 0 // version 4.1
        || (hinstRichEdit = LoadLibrary(TEXT("Riched20.dll"))) != 0 // version 2.0 or 3.0
        || (hinstRichEdit = LoadLibrary(TEXT("Riched32.dll"))) != 0 // version 1.0
        );
в конце работы программы - выполнить такой код:
Код

    // Free RichEdit library
    VERIFY(FreeLibrary(hinstRichEdit));
Если нужно юзать последнюю версию ричэдит, то надо подгружать Msftedit.dll, и использовать класс MSFTEDIT_CLASS.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)