Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tab Control, VC6 MFC 
:(
    Опции темы
Nikkiforum
Дата 27.2.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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); // îáíîâëåíèå ýêðàíà
}
Не могу понять почему? smile
PM MAIL   Вверх
Coocky
Дата 27.2.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Nikkiforum,
рисовать нужно в методе OnPaint() ообщения WM_PAINT для CPage1
Добавлено @ 12:07
Код

void CPage1::OnPaint() 
{
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);
}


void CPage1::OnButton2() 
{

InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); 

}




Добавлено @ 12:08
Типа так. Правильность кода не гарантирую, так как содрал с твоего кода.. smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nikkiforum
Дата 27.2.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.1.2006

Репутация: нет
Всего: нет



Ура - получилось! Но не могу понять почему надо обязательно рисовать в методе OnPaint() ообщения WM_PAINT для CPage1, например, когда я точно так же делал для главного окна моей программы то всё нормально работало, а для окна вкладки - не работает! - почему?
PM MAIL   Вверх
Coocky
Дата 27.2.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Nikkiforum @ 27.2.2006, 12:20 Найти цитируемый пост)
Но не могу понять почему надо обязательно рисовать в методе OnPaint() ообщения WM_PAINT для CPage1, например, когда я точно так же делал для главного окна моей программы то всё нормально работало, а для окна вкладки - не работает! - почему?

Сообщение WM_PAINT приходит каждый раз, когда окно требует перерисовки (ты его сворачиваешьБ перекрываешь другим окном и т.д.). Твой метод InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); заставляет принудительно перерисовать окно-т.е. вызвать OnPaint()
Добавлено @ 12:37
Цитата

, например, когда я точно так же делал для главного окна моей программы то всё нормально работало


Это не имеет значение, для какого окна-просто любой Invalidate() вызывает OnPaint()
и если WM_PAINT не ловится, тогда ничего не перерисуется


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nikkiforum
Дата 27.2.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.1.2006

Репутация: нет
Всего: нет



Но почему для главного окна такой способ работает!!!
PM MAIL   Вверх
Coocky
Дата 27.2.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Nikkiforum @ 27.2.2006, 12:38 Найти цитируемый пост)
Но почему для главного окна такой способ работает!!!

Какой? smile
Добавлено @ 12:44
Код покажи... smile Для главного окна smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nikkiforum
Дата 27.2.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
}
PM MAIL   Вверх
Coocky
Дата 27.2.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Nikkiforum, ну и? smile
У тебя ж есть void CPage1::OnPaint() ?
Там и рисуется
А в начальном коде не было, поэтому при InvalidateRect(CRect(0, 0, 1000, 1000), FALSE); перерисовывалось неизвестно что..




--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nikkiforum
Дата 27.2.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.1.2006

Репутация: нет
Всего: нет



Да так проблема в том что этот код не работает, хотя для главного окна аналогичный код впорядке! Наверно я где-то глючу smile
PM MAIL   Вверх
Coocky
Дата 27.2.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Не знаю..
Я тебе написал, как правильно рисовать.. smile Так и делай..


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nikkiforum
Дата 27.2.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.1.2006

Репутация: нет
Всего: нет



Спасибо за советы smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.