Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Tab Control |
Автор: Nikkiforum 27.2.2006, 11:59 |
Вообщем у меня есть Tab Control, и CPage1, CPage2, CPage3 - его закладки. На первой закладке размещаю кнопку и пытаюсь при нажатии на неё нарисовать елипс - не получается! void CPage1::OnButton2() { // TODO: Add your control notification handler code here CBrush CirclePoint(RGB(0, 50, 250)); CPen LineForPoint(PS_SOLID,0,RGB(255, 0, 0)); CPaintDC dc(this); CDC memDC1; memDC1.CreateCompatibleDC(&dc); CBitmap bm1; bm1.CreateCompatibleBitmap(&dc, 1000, 1000); memDC1.SelectObject(&bm1); memDC1.SelectObject(&LineForPoint); memDC1.SelectObject(&CirclePoint); memDC1.Ellipse(0, 0,1000, 1000); dc.BitBlt(0, 0, 1000, 1000, &memDC1, 0, 0, SRCCOPY); this->InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); // îáíîâëåíèå ýêðàíà } Не могу понять почему? ![]() |
Автор: Coocky 27.2.2006, 12:03 | ||
Nikkiforum, рисовать нужно в методе OnPaint() ообщения WM_PAINT для CPage1 Добавлено @ 12:07
Добавлено @ 12:08 Типа так. Правильность кода не гарантирую, так как содрал с твоего кода.. ![]() |
Автор: Nikkiforum 27.2.2006, 12:20 |
Ура - получилось! Но не могу понять почему надо обязательно рисовать в методе OnPaint() ообщения WM_PAINT для CPage1, например, когда я точно так же делал для главного окна моей программы то всё нормально работало, а для окна вкладки - не работает! - почему? |
Автор: Nikkiforum 27.2.2006, 12:38 |
Но почему для главного окна такой способ работает!!! |
Автор: Coocky 27.2.2006, 12:43 |
Какой? ![]() Добавлено @ 12:44 Код покажи... ![]() ![]() |
Автор: Nikkiforum 27.2.2006, 13:11 |
Примерно в таком стиле: CDC p1memDC1; void CPage1::OnButton2() { // TODO: Add your control notification handler code here p1memDC1.Ellipse(0, 0,1000, 1000); this->InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); // îáíîâëåíèå ýêðàíà } void CPage1::OnPaint() { CPaintDC dc(this); // device context for painting CBrush CirclePoint(RGB(0, 50, 250)); CPen LineForPoint(PS_SOLID,0,RGB(255, 0, 0)); p1memDC1.CreateCompatibleDC(&dc); CBitmap bm1; bm1.CreateCompatibleBitmap(&dc, 1000, 1000); p1memDC1.SelectObject(&bm1); p1memDC1.SelectObject(&LineForPoint); p1memDC1.SelectObject(&CirclePoint); dc.BitBlt(0, 0, 1000, 1000, &p1memDC1, 0, 0, SRCCOPY); // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages } |
Автор: Coocky 27.2.2006, 13:14 |
Nikkiforum, ну и? ![]() У тебя ж есть void CPage1::OnPaint() ? Там и рисуется А в начальном коде не было, поэтому при InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); перерисовывалось неизвестно что.. |
Автор: Nikkiforum 27.2.2006, 13:19 |
Да так проблема в том что этот код не работает, хотя для главного окна аналогичный код впорядке! Наверно я где-то глючу ![]() |
Автор: Coocky 27.2.2006, 13:29 |
Не знаю.. Я тебе написал, как правильно рисовать.. ![]() |
Автор: Nikkiforum 27.2.2006, 13:50 |
Спасибо за советы ![]() |