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

Ваш аккаунт

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

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

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

Как обновить окно?

11K
15 марта 2006 года
General
27 / / 09.03.2006
здесь пытаемся вызвать
 
Код:
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

     
    }
   
}
351
15 марта 2006 года
PitxBull
633 / / 22.12.2004
никогда не вызывай метод OnPaint напрямую. Или посылай окну сообщение WM_PAINT или используй метод RedrawWindow().
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог