Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Внизфон в memo Найти похожие ветки
← →
real_dimedrol (2004-01-23 22:05) [0]Хотелось бы в общих чертах понять, как в memo сделать фоновую картинку. Естессно, чтобы memo при этом не был readonly.
← →
real_dimedrol (2004-01-24 00:26) [1]Или конфа умерла или я слишком сложно спросил?
Ладно, упрощу:
При осуществлении сабжа нужно полностью отрисовывать memo руками (то бишь отключить насовсем родной wm_paint-обработчик) или же все не так мрачно?
← →
Ломброзо (2004-01-24 00:32) [2]теоретически обрабатывать WM_ERASEBKGND, получив хэндл Device Context (HDC) из wParam; создать Brush из нужного битмапа и закрасить прямоугольник окна этой кистью. Деталей не сообщу, так что см. MSDN.
← →
Ломброзо (2004-01-24 00:33) [3]The application can determine when the background needs painting by processing the WM_ERASEBKGND message or by testing the fErase member of the PAINTSTRUCT structure filled by the BeginPaint function.
← →
real_dimedrol (2004-01-24 13:38) [4]Проблема не в том, чтобы нарисовать на канве чего-нибудь. Проблема в том, чтобы это чего-нибудь не затиралось при печати по нему "непрозрачным" текстом, а в мемо он непрозрачный. Было бы хорошо сделать текст прозрачным, как это делается обычно для текста, вводимого в канву (SetBkMode).
← →
Ломброзо (2004-01-24 14:04) [5]Delphi под рукой нет, поэтому... на VC++, разберёшься?
1) Создание и загрузку битмапа вынеси в конструктор формы
2) Остальное вроде всё на WinAPI переводимо.
HBRUSH CTraspEditDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
CBrush brush;
pDC->SetBkMode(TRANSPARENT);
brush.CreatePatternBrush(&bmp);
pDC->SelectObject(&brush);
RECT rect;
CWnd *pEdit = GetDlgItem(IDC_EDIT1);
pEdit->GetWindowRect(&rect);
pDC->FillRect(&rect, &brush);
return brush;
}
return hbr;
}
← →
Ломброзо (2004-01-24 14:08) [6]DeleteObject, разумеется, вызвать не забыть.
← →
real_dimedrol (2004-01-24 14:30) [7]Сенкс. Ща попробуем
← →
real_dimedrol (2004-01-25 11:38) [8]Есть проблема: родительское окно (в моем случае Form1) вообще не получает сообщения WM_CTLCOLOREDIT. Т.е. я поставил на процедуру-обработчик брейкпоинт и он никогда не срабатывает....
← →
real_dimedrol (2004-01-25 12:25) [9]По ходу дела еще один вопрос: если это и заработает, как я смогу обрабатывать WM_CTLCOLOR (в предыдущем сообщении ошибся в написании) на уровне Memo-потомка, если в описании MSDN сказано, что оно посылается родительскому окну????
ЗЫ Запостил еще один топик, но на всякий случай и сюда. Как можно получить DC для TMemo? GetDC(Memo1.handle) не работает. ЕГо по доке выдает wparam у wm_ctlcolor. А еще как?
← →
real_dimedrol (2004-01-25 12:32) [10]Поправка: GETDC для Memo может и работает, только
SetBkMode(getdc(memo1.handle),TRANSPARENT) отрабатывает, а потом сразу
GETBKMODE(getdc(memo1.handle)) и она возвращает не TRANSPARENT...
← →
real_dimedrol (2004-01-25 13:29) [11]Так. С WM_CTLCOLOR разобрался. Оно для win16... Старая, однако, d MSDN статья была... В Win32 его заменило WM_CTLCOLOREDIT. Ловится. Остальные вопросы пока открыты.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c