Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

зависание при рисовании в памяти

25K
07 мая 2007 года
16alex
6 / / 07.05.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*rectClient.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_PRECIS,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/(1+m_a_R)),0,K*(1/(1+this->m_a_R)));
}
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);
pDC->TextOut(K*(m_a_R/(1+m_a_R))-K*(1/(1+m_a_R))+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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог