В установщике пакета ПО нужно вывести длинный текст. Текст надо растянуть по ширине, разместить по центру заголовок "ПОЛЬЗОВАТЕЛЬСКОЕ СОГЛАШЕНИЕ", где-то выделить жирным, где-то наклонным, сделать отступы и навести прочую красоту.
Как это правильно сделать из кода? Или проще нарисовать в графическом редакторе, сохранить картину, и подгрузить её фоном (только её придётся как-то скролить - как?)?
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
поставить/убрать жирный. Ссылку на хороший хелп не подскажу, но найти не сложно.
Считать конкретное количество данных проблем нетРазмер данных, которые могут прийти не может быть больше чем buf_len
Добрый день, возникла следующая проблема касающаяся шаблонных классов в C++
Можете объяснить, когда возникает эта ошибка и как от нее избавиться?