![]() |
|
![]() ![]() ![]() |
|
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Вообщем у меня есть 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 |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Nikkiforum,
рисовать нужно в методе OnPaint() ообщения WM_PAINT для CPage1 Добавлено @ 12:07
Добавлено @ 12:08 Типа так. Правильность кода не гарантирую, так как содрал с твоего кода.. ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Ура - получилось! Но не могу понять почему надо обязательно рисовать в методе OnPaint() ообщения WM_PAINT для CPage1, например, когда я точно так же делал для главного окна моей программы то всё нормально работало, а для окна вкладки - не работает! - почему?
|
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Сообщение WM_PAINT приходит каждый раз, когда окно требует перерисовки (ты его сворачиваешьБ перекрываешь другим окном и т.д.). Твой метод InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); заставляет принудительно перерисовать окно-т.е. вызвать OnPaint() Добавлено @ 12:37
Это не имеет значение, для какого окна-просто любой Invalidate() вызывает OnPaint() и если WM_PAINT не ловится, тогда ничего не перерисуется -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Но почему для главного окна такой способ работает!!!
|
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Какой? ![]() Добавлено @ 12:44 Код покажи... ![]() ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Примерно в таком стиле:
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 |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Nikkiforum, ну и?
![]() У тебя ж есть void CPage1::OnPaint() ? Там и рисуется А в начальном коде не было, поэтому при InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); перерисовывалось неизвестно что.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Да так проблема в том что этот код не работает, хотя для главного окна аналогичный код впорядке! Наверно я где-то глючу
![]() |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Не знаю..
Я тебе написал, как правильно рисовать.. ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Nikkiforum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Спасибо за советы
![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |