void CTempDlg::MenuDraw()
{
UpdateData(FALSE);
graph=true;
//ShowDialog
OnPaint();
Invalidate();
UpdateWindow();
SendMessage(WM_PAINT,0, 0);
}
Как обновить окно?
Код:
ну вот и сам Paint, он в принципе не нужен, я его навсякий случай показываю.....
Проблема: главное окно по должно перерисовать после функции MenuDraw..... но этого не происходит
и чтоб увидеть рузельтат моих действий мне приходится убирать окно и снова открывать :( что не допустимо........ что мне поможет ?
Код:
void CTempDlg::OnPaint()
{
CMyPaintDC dc(this); // ??? ?????
if (graph==true)
{
CPen MyPen(PS_SOLID,1,RGB(255,0,0)); // ???????????? ????
CPen MyPen2(PS_SOLID,1,RGB(255,255,0)); // ???????????? ????
CPen MyPen3(PS_SOLID,1,RGB(0,255,255)); // ???????????? ????
CPen MyPen4(PS_SOLID,1,RGB(255,0,255)); // ???????????? ????
dc.SelectObject(MyPen); // ???????? ????
int x_shift=40;
int y_lower=520;
int y_shift=20;
int x_step_for=23;
/// mi imeem vse dannie chtob narisovat grafik
//bool flag1; usd
//bool flag2; euro
//bool flag3; ger
//int sa;
// dla nachala nado sdlelat mashtabirovanie po osi Y
// dla etogo naxodim maximalniy element iz vsego massiva
double max=0;
for (int i=0;i<10000;i++)
{
if (global.flag1==true)
{
if (global.get_type(i)==0)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
if (global.flag2==true)
{
if (global.get_type(i)==1)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
if (global.flag3==true)
{
if (global.get_type(i)==2)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
}
dc.DrawDekart(max,x_shift,y_lower,y_shift,x_step_for);
//setka postroena teper nanosim grafik v vide linn raznix cvetov
double y_st=490/max; //step po y
for (int j=0;j<3;j++)
{
if (global.flag1==false && j==0) continue;
if (global.flag1==true && j==0) dc.SelectObject(MyPen2); // ???????? ????
if (global.flag2==false && j==1) continue;
if (global.flag2==true && j==1) dc.SelectObject(MyPen3); // ???????? ????
if (global.flag3==false && j==2) continue;
if (global.flag3==true && j==2)dc.SelectObject(MyPen4); // ???????? ????
int day_counter=1;
for (int i=0;i<10000;i++)
{
if (global.get_type(i)==j && global.get_mounth(i)==global.sa)
{
if (global.get_day(i)==day_counter)
{
int y=floor(global.get_price(i)*y_st);
if (day_counter==1)
{
dc.MoveTo(x_shift,y_lower-y);
}
else {dc.LineTo(x_shift+(x_step_for*(day_counter-1)),y_lower-y);}
day_counter++;
}
}
if (day_counter>30) break;
}
}
}
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
CPaintDC dc(this); // device context for painting
}
}
{
CMyPaintDC dc(this); // ??? ?????
if (graph==true)
{
CPen MyPen(PS_SOLID,1,RGB(255,0,0)); // ???????????? ????
CPen MyPen2(PS_SOLID,1,RGB(255,255,0)); // ???????????? ????
CPen MyPen3(PS_SOLID,1,RGB(0,255,255)); // ???????????? ????
CPen MyPen4(PS_SOLID,1,RGB(255,0,255)); // ???????????? ????
dc.SelectObject(MyPen); // ???????? ????
int x_shift=40;
int y_lower=520;
int y_shift=20;
int x_step_for=23;
/// mi imeem vse dannie chtob narisovat grafik
//bool flag1; usd
//bool flag2; euro
//bool flag3; ger
//int sa;
// dla nachala nado sdlelat mashtabirovanie po osi Y
// dla etogo naxodim maximalniy element iz vsego massiva
double max=0;
for (int i=0;i<10000;i++)
{
if (global.flag1==true)
{
if (global.get_type(i)==0)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
if (global.flag2==true)
{
if (global.get_type(i)==1)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
if (global.flag3==true)
{
if (global.get_type(i)==2)
{
if (global.get_mounth(i)==global.sa)
{
if (global.get_price(i)>max) max=global.get_price(i);
}
}
}
}
dc.DrawDekart(max,x_shift,y_lower,y_shift,x_step_for);
//setka postroena teper nanosim grafik v vide linn raznix cvetov
double y_st=490/max; //step po y
for (int j=0;j<3;j++)
{
if (global.flag1==false && j==0) continue;
if (global.flag1==true && j==0) dc.SelectObject(MyPen2); // ???????? ????
if (global.flag2==false && j==1) continue;
if (global.flag2==true && j==1) dc.SelectObject(MyPen3); // ???????? ????
if (global.flag3==false && j==2) continue;
if (global.flag3==true && j==2)dc.SelectObject(MyPen4); // ???????? ????
int day_counter=1;
for (int i=0;i<10000;i++)
{
if (global.get_type(i)==j && global.get_mounth(i)==global.sa)
{
if (global.get_day(i)==day_counter)
{
int y=floor(global.get_price(i)*y_st);
if (day_counter==1)
{
dc.MoveTo(x_shift,y_lower-y);
}
else {dc.LineTo(x_shift+(x_step_for*(day_counter-1)),y_lower-y);}
day_counter++;
}
}
if (day_counter>30) break;
}
}
}
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
CPaintDC dc(this); // device context for painting
}
}
никогда не вызывай метод OnPaint напрямую. Или посылай окну сообщение WM_PAINT или используй метод RedrawWindow().