Поиск:

Ответ в темуСоздание новой темы Создание опроса
> зависание при рисовании в памяти 
:(
    Опции темы
16alex
Дата 7.5.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Данный метод Dr вызывается при необходимости перерисовать объект(при изменении размеров окна, выборе команд меню, которые вызывают Ondraw а данный метод вызывается из Ondraw), после нескольких перерисовок метод перестает работать, развертывание или свертывание позволяет получить результаты работы метода, а в некоторых случаях приводит к зависанию приложения. 
Ни могу понять как устранить данную ошибку.
Прошу строго не судить так как я новичок в visual c++ и не отправлять к google (уже
искал и ничего там не нашел) 

Код

Dr(CDC *p,CRect rectClient)
{
CBitmap *pBMP_Buf, *pBMP_OldBuf;
// Ñîçäàåì êîíòåêñò
p->SetMapMode(MM_ISOTROPIC);
int K=round(this->size);
int s=400;
p->SetWindowExt(s,s);
p->SetViewportExt(rectClient.right,-rectClient.bottom);
p->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);
CDC *pDC;
pDC = new CDC;
pDC->CreateCompatibleDC(p);
pBMP_Buf = new CBitmap;

pBMP_Buf->CreateCompatibleBitmap(p,2*rectClient.right,2*rec tClient.bottom);
pBMP_OldBuf = pDC->SelectObject(pBMP_Buf);
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(s,s);
pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);
int maxX = ::GetSystemMetrics(SM_CXSCREEN);
int maxY = ::GetSystemMetrics(SM_CYSCREEN);
CBrush backBrush(RGB(0, 0, 0));
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->FillSolidRect(-s,s,2*s,-2*s,RGB(0,0,0));
pDC->GetClipBox(&rect); // Ñòèðàåì íóæíóþ îáëàñòü
pDC->SelectObject(pOldBrush);
CPen* pBrushOld=pDC->SelectObject(&m_Pen2);
pDC->SelectStockObject(NULL_BRUSH);
int N=23;
int i,j;
double v;
CFont font;
font.CreateFont(-4,0,-900,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_P RECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_ PITCH|FF_SWISS,"Arial");
CFont *pOldFont=pDC->SelectObject(&font);
CString s_string;
pDC->SetBkColor(RGB(0,0,0));
pDC->SetTextColor(RGB(0,255,0));
for (i=0;i<11;i++)
{
Show(pDC,K*(this->m_a_R[i]/(1+m_a_R[i])),0,K*(1/(1+this->m_a_R[i])));
}
CPen Pen0(PS_DASHDOTDOT,1, RGB(255,255,0));

pBrushOld=pDC->SelectObject(&m_Pen0);
for (j=0;j<10;j++)
{
if(j<4)
{
Rect(pDC,this->m_a_X[j],K,this->m_a_R[5]);
} 
else
if(j==4)
{

Rect(pDC,this->m_a_X[j],K,-1);
}
else
if(j<8)
Rect(pDC,this->m_a_X[j],K,this->m_a_R[9]);
else
{
if (j==8)
{
Rect(pDC,this->m_a_X[j],K,this->m_a_R[10]);

}
if(j==9)
{
Rect(pDC,this->m_a_X[j],K,-2);
}
}
}

for (i=0; i<10;i++)
{
s_string.Format("%2.1f",m_a_R[i]);
pDC->TextOut(K*(m_a_R[i]/(1+m_a_R[i]))-K*(1/(1+m_a_R[i]))+2,1,s_string);
}
pDC->MoveTo(-K,0);
pDC->LineTo(K,0);
p->BitBlt(-s,s,2*s,-2*s, pDC, -s, s, SRCCOPY);
DeleteObject(pBrushOld);
DeleteObject(pOldBrush);
DeleteObject(pBMP_Buf);
DeleteObject(pDC);
delete pDC;
}

PM MAIL   Вверх
Greeen
Дата 7.5.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А тебя самого не смущает, что вызовов new больше чем вызовов delete? Делай выводы.


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
16alex
Дата 7.5.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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