В установщике пакета ПО нужно вывести длинный текст. Текст надо растянуть по ширине, разместить по центру заголовок "ПОЛЬЗОВАТЕЛЬСКОЕ СОГЛАШЕНИЕ", где-то выделить жирным, где-то наклонным, сделать отступы и навести прочую красоту.
Как это правильно сделать из кода? Или проще нарисовать в графическом редакторе, сохранить картину, и подгрузить её фоном (только её придётся как-то скролить - как?)?
PS: желательно конечно из кода, чтобы можно было подтянуть файл и текст встал на своё место.
Вот наброски того, как можно форматированый текст вывести в rtf + richedit под windows.
// Функция взять-отдать текст
int GetSetRtf(HWND Handle, char* data, int max){
DWORD st[5]; // можно использовать стандартную структуру это что б не искать библиотеки
st[0] = (DWORD)&st[3];
st[1] = 0 ;
st[2] = (DWORD)&EditStreamCallback;
st[3] = (DWORD)data;
st[4] = max;
if (max == 0 ) {
return ::SendMessageA(Handle,WM_USER + 73,2,(DWORD)&st); // EM_STREAMIN
} else {
::SendMessageA(Handle,WM_USER + 74,2,(DWORD)&st);
}
}
// Вспомагательный стрим
DWORD __stdcall EditStreamCallback(char ** cookie,LPBYTE pbBuff, LONG cb, LONG FAR * pcb){
int x = (int)cookie[1];
int j = 0;
if (x == 0 ) {
while (*cookie[0] != 0 ) {
pbBuff[x++] = *cookie[0]++;
if (x>=cb) break;
}
if (x<cb) pbBuff[x] = 0;
*pcb = x;
}
return 0;
}
// Как использовать
CoInitialize(0); // Надо
InitCommonControls(); // в msdn написано что надо в случае использования стилей окна, без работает
LoadLibraryA("riched20.dll"); // Тоже надо, новая библиотека называется Msftedit.dll можно её
HWND Edit1 = CreateWindow("RichEdit20A","(info)",
WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_WANTRETURN |ES_LEFT,
151,32,600,200,w.Handle/*родительское окно*/,0,hInstance,0);
GetSetRtf(Edit1, "{\\rtf1\\ansi\\ansicpg1251\\deff0\\deflang1049{\\fonttbl{\\f0\\fswiss\\fcharset0 Courier New;}}\\f0 62452}" , 0);
Ссылка на msdn
Если вы хотите использовать картинки в rtf то вам нужно ещё в инициализацию подключить ещё один модуль. В большинстве случаев этих набросков хватит. Сделать текст не редактируемым и т д - установить стили ES_***.
Ещё нужно заметить что 20 - не самая последняя версия - но везде 98 XP 2008 рабоает. Для юникода нужна W-версия вместо А. Есть где-то описание какая версия что умеет. Думаю поддержку старых версий отключат не скоро. Уж очень много программ используют richedit.
Линковщику говорить ничего не нужно - т.к. доп-функции не используются. #include <richedit.h>
не всегда хорошо работает, нужно или подправлять define, или #include <richedit20.h>
подключать. Вторая версия (20) имеет достаточно хороший функционал, а компилятор его не всегда "подключает".
Пару слов по тегам. \
нужно экранировать \\
двумя (но в char* их четыре). \pard;
-новая сторка (\r\n rtf игнорирует) \b
\b0
поставить/убрать жирный. Ссылку на хороший хелп не подскажу, но найти не сложно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Считать конкретное количество данных проблем нетРазмер данных, которые могут прийти не может быть больше чем buf_len
Добрый день, возникла следующая проблема касающаяся шаблонных классов в C++
Можете объяснить, когда возникает эта ошибка и как от нее избавиться?