Работа с определенными с помощью приложения функциями

Панель инструментов Фильма позволяет Вашему приложению определять функции, вызывающиеся во время определенных операций. Например, можно создать функцию прогресса, контролирующую динамику Панели инструментов Фильма на длинных операциях, и можно создать функцию покрытия, позволяющую приложению выполнять пользовательскую обработку дисплея.

Демонстрационные функции покрытия

 Перечисление 4-1 показывает две демонстрационных функции покрытия. Каждый раз, когда фильм касается части окна, MyCoverProc функция удаляет покрытую область из области отсечения окна. Когда фильм раскрывает экранную область, MyUncoverProc функция лишает законной силы область и добавляет его к области отсечения окна. Путем лишения законной силы области эта функция заставляет приложение получать событие обновления, информирования приложения для перерисовки его окна. InitCoverProcs функция инициализирует область отсечения окна и устанавливает эти функции покрытия.

Перечисление 4-1  Две демонстрационных функции покрытия фильма

 
pascal OSErr MyCoverProc (Movie aMovie, RgnHandle changedRgn,
                                    long refcon) 
{
    CGrafPtr        mPort;
    GDHandle        mGD;
    
    GetMovieGWorld (aMovie, &mPort, &mGD);
    DiffRgn (mPort->clipRgn, changedRgn, mPort->clipRgn);
    return noErr;
}
pascal OSErr MyUnCoverProc (Movie aMovie, RgnHandle changedRgn,
                                    long refcon) 
{
    CGrafPtr        mPort, curPort;
    GDHandle        mGD, curGD;
    
    GetMovieGWorld (aMovie, &mPort, &mGD);
    GetGWorld (&curPort, &curGD);
    SetGWorld (mPort, mGD);
    InvalRgn (changedRgn);
    UnionRgn (mPort->clipRgn, changedRgn, mPort->clipRgn);
    
    SetGWorld (curPort, curGD);
    return noErr;
}
void InitCoverProcs (WindowPtr aWindow, Movie aMovie)
{
    RgnHandle       displayBounds;
    GrafPtr         curPort;
    displayBounds = GetMovieDisplayBoundsRgn (aMovie);
    if (displayBounds == nil) return;
    
    GetPort (&curPort);
    SetPort (aWindow);
    ClipRect (&aWindow->portRect);
    DiffRgn (aWindow->clipRgn, displayBounds, aWindow->clipRgn);
    DisposeRgn( displayBounds );
    SetPort (curPort);
    
    SetMovieCoverProcs (aMovie, &MyUnCoverProc, &MyCoverProc, 0);
}