Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

фон в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
3-16191
чайник1
2004-01-13 14:48
2004.02.06
Код ошибки пустой


1-16255
lkl
2004-01-24 13:22
2004.02.06
Как отобразить копирование файлв с помошью Animate и ProgresBar


1-16449
Андреев
2004-01-27 20:02
2004.02.06
добавить событие


7-16756
Prof
2003-11-19 10:55
2004.02.06
Информация о компьютере.


3-16128
Karlson
2004-01-15 15:37
2004.02.06
значения Null