Вернуться к статье

Листинг 1. Заголовок класса CMandelApp

class CMandelApp : public CWinApp, public CArrayNetFsa
{
public:
        CMandelApp();
// Overrides
...
        virtual BOOL OnIdle(LONG lCount);
        //}}AFX_VIRTUAL
...
};

Листинг 2. Реализация метода OnIdle

BOOL CMandelApp::OnIdle(LONG lCount)
{
        CWinApp::OnIdle(lCount);
        OnIdleFsa(lCount);
        return TRUE;
}

Вернуться к статье

Листинг 3. Реализация метода OnTimer

void CMainFrame::OnTimer(UINT nIDEvent)
{
        CMDIFrameWnd::OnTimer(nIDEvent);
        ((CFairApp*)AfxGetApp())->OnIdleFsa(0);
}

Вернуться к статье

Листинг 4. Реализация метода OnCreate

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
  if (!SetTimer(1, 0, NULL))
  {
    MessageBox(_T("Not enough timers available for this window."),
               _T("Thermo:Asutp"), MB_ICONEXCLAMATION | MB_OK);
    return -1;
  }
  return 0;
}

Вернуться к статье

Листинг 5. Модифицированный класс CMandelView.

class CFMandelView : public CView
{
private:
   ...
   int m_Row;
   int m_RowMax;
   ...
}

CFMandelView::CFMandelView()
{
        // TODO: add construction code here
   m_Col = 0;
   m_CR = (float)CRMIN;
   m_Row = 0;
   CI = (float)CIMAX;
}

void CMandelView::DrawCol ()
{
   CClientDC ClientDC (this);
   int ColorVal;
   float I;
   float ISqr;
   float R;
   float RSqr;

   if (m_Col >= m_ColMax || GetParentFrame ()->IsIconic ())
      return;

if (m_Row < m_RowMax)
      {
      R = (float)0.0;
      I = (float)0.0;
      RSqr = (float)0.0;
      ISqr = (float)0.0;
      ColorVal = 0;
      while (ColorVal < NMAX && RSqr + ISqr < 4)
         {
         ++ColorVal;
         RSqr = R * R;
         ISqr = I * I;
         I *= R;
         I += I + CI;
         R = RSqr - ISqr + m_CR;
         }
      ClientDC.SetPixelV (m_Col, m_Row, ColorTable [ColorVal % 6]);
      CI -= m_DCI;
          ++m_Row;
      }
   if (m_Row >= m_RowMax) {
      m_Col++;
      m_CR += m_DCR;
      m_Row = 0;
      CI = (float)CIMAX;
   }
}

Вернуться к статье

Листинг 6. Автоматный класс отображения CMandelView.

extern CMandelApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CMandelView construction/destruction
extern LArc TableFSA[];
CMandelView::CMandelView(): LFsaAppl(TableFSA)

{
...
        FLoad(theApp.pNetFsa,1);
        theApp.pNetFsa->go_task();
}
...
//===================================================================
//                             F S A
//===================================================================
LArc TableFSA[] = {
                LArc("S1", "S1", "--","y1"),
                LArc()
          };
void CMandelView::y1()
{
        ...
}

void CMandelView::y2() { DrawCol(); }

Вернуться к статье
578