есть диалог, привязанный ко вкладке CTabCtrl.
на этом диалоге лежит GroupBox.
в обработчике OnPaint() диалога вкладки пытаюсь вывести текст не в контрол, а просто на диалог (типа нарисовать) через DrawText().
просто на диалог вывести получается, а когда хочу вывести в область где расположен GroupBox, то ничего не выводится.
расскажите пожалуйста как вывести текст в облась GroupBox'а.
Здравствуйте, Аноним, Вы писали:
А>расскажите пожалуйста как вывести текст в облась GroupBox'а.
Взять контекст DC у group box-а и нарисовать на нем.
Только надо будет завалидировать эту область, чтобы сам GroupBox ее потом не закрасил.
А вообще, лучше свой контрол сделать на основе GroupBox, или просабкласится к нему, чтобы дорисовывать текст.
Получить контекст GroupBox-а и вывести текст на нем
Re[2]: MFC или WinAPI
От:
Аноним
Дата:
22.07.04 08:29
Оценка:
Здравствуйте, rus blood, Вы писали:
RB>Взять контекст DC у group box-а и нарисовать на нем. RB>Только надо будет завалидировать эту область, чтобы сам GroupBox ее потом не закрасил. RB>А вообще, лучше свой контрол сделать на основе GroupBox, или просабкласится к нему, чтобы дорисовывать текст.
а что значит завалидировать область и как это сделать???
Здравствуйте, Аноним, Вы писали:
А>а что значит завалидировать область и как это сделать???
При отрисовке сначала рисуется диалог, потом — контролы на нем.
При отрисовке на WM_PAINT всегда имеется невалидная зона, которая и отрисовывается.
Рисование вне зоны невалидности через DC полученный из BeginPaint (или CPaintDC) невозможно.
После того, как ты отрисовал текст на контроле, и уверен, что больше там ничего не должно быть, нужно указать, что эту часть ты уже отрисовал и больше рисовать там не требуется. Что-то типа ValidateRect(...) для окна контрола с указанием нужного прямоугольника.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, rus blood, Вы писали:
RB>>Взять контекст DC у group box-а и нарисовать на нем. RB>>Только надо будет завалидировать эту область, чтобы сам GroupBox ее потом не закрасил. RB>>А вообще, лучше свой контрол сделать на основе GroupBox, или просабкласится к нему, чтобы дорисовывать текст.
А>а что значит завалидировать область и как это сделать???
"завалидировать" — указать область, которую не нужно перерисовывать.
Например: вызов InvalidateRect(hWnd, NULL, TRUE) приведет к тому, что весь DC будет инвалидным, т.е. его содержимое не отражает реальной картины и должно быть обновлено. При этом можно вызвать Validate* с указанием области, которую перерисовывать не нужно.
Здравствуйте, Michail_TV, Вы писали:
M_T>Здравствуйте, lubichevav, Вы писали: L>>Получить контекст GroupBox-а и вывести текст на нем
M_T>можно кодом — как получить контекст groupBox'а ? M_T>Get... что ?
Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, Michail_TV, Вы писали:
M_T>>я знаю что не спец, но должна же быть логика...
RB>GroupBox у тебя на диалоге лежит? RB>У него ID имеется в ресурсах?
При этом ID желательно назначить отличным от "стандартного" IDC_STATIC.