управление прогрессбаром из другого класса
От: teran2000  
Дата: 06.10.06 06:51
Оценка:
помогите начинающему!

есть два класса
class CSerialPort
{
public:
virtual int program(); работает с последовательным портом..шлет кучу байтов
}

#include "SerialPort.h"
class CMy777Dlg : public CDialog
,protected CSerialPort
{}
public:
CProgressCtrl Progress1;


так вот, в диалоге есть фукция:
CMy777Dlg :: prog()
{
Progress1.SetRange(0,sss); sss это количество записываемых байтов
Progress1.SetPos(0);

CSerialPort::program();


}

выполнение CSerialPort::program(); занимает много времени и нужно это показывать
прогресс баром
как объявить Progress1 чтобы можно было из CSerialPort
им управлять..
например CMy777Dlg::Progress1.SetPos(х); x-число посланных байтов

или есть другие более оптимальные способы?
Re: управление прогрессбаром из другого класса
От: Ulfur Россия  
Дата: 06.10.06 07:29
Оценка:
Здравствуйте, teran2000, Вы писали:

T>выполнение CSerialPort::program(); занимает много времени и нужно это показывать

T>прогресс баром
T>как объявить Progress1 чтобы можно было из CSerialPort
T>им управлять..
T>например CMy777Dlg::Progress1.SetPos(х); x-число посланных байтов

T>или есть другие более оптимальные способы?


CSerialPort работает в другом потоке и делает PostMessage диалогу, обновляя прогресс бар. Только не споткнись на потоках (см. мой вопрос ниже)
Re: управление прогрессбаром из другого класса
От: pivoo Россия  
Дата: 06.10.06 11:10
Оценка: 3 (1)
Здравствуйте, teran2000, Вы писали:


Во-первых не стоит в данной ситуации наследовать CMy777Dlg от CSerialPort. Нужно включить CSerialPort в качестве мембера.
А CProgressCtrl, видимо, надо передать в program() в качестве параметра.


class CSerialPort
{
public:
virtual int program(CProgressControl& control)
{
...
control.SetPos(...);
...
}

}

class CMy777Dlg : public CDialog 
{
public:
      ...
      void prog()
      {
          Progress1.SetRange(0,sss); sss это количество записываемых байтов
          Progress1.SetPos(0);

          m_serialPort.program(m_Progress1);
      }

}     

private:
      CProgressCtrl m_Progress1;
      СSerialPort   m_serialPort;

}
Re[2]: управление прогрессбаром из другого класса
От: teran2000  
Дата: 06.10.06 13:05
Оценка:
оч. благодарен!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.