文書ビューに通知を追加
文書の変更を通知するための BitmapDocument::refreshViews メソッドを呼び出すために使用された DrawRectangleCommand メソッド (この手順については既
述)。ここでは、このメソッドを実装します。
void
BitmapDocument::refreshViews(const IlvRegion& region)
{
notifyViews(IlvGetSymbol("BitmapHasChanged"), 0, ®ion);
}
このメソッドは、指定した四角形を引数として与え、BitmapHasChanged メッセージをブロードキャストします。メッセージをキャッチするために、BitmapView がそのインターフェースでメソッドを宣言します。
IlvDvBeginInterface(BitmapView)
Method1(BitmapHasChanged, bitmapHasChanged, IlAny, region)
IlvDvEndInterface1(IlvDvFormView)
Method1 マクロの最初の引数は、メッセージ名です。
2 番目の引数は、メッセージ
BitmapHasChanged を受け取るときに呼び出される
BitmapView のメソッドです。
3 番目の引数は、
bitmapHasChanged メソッドを呼び出すときに渡される最初の引数のタイプです。
4 番目の引数は、
bitmapHasChanged メソッドを呼び出すときに渡される最初の引数の名前です。
メモ:インターフェース宣言では、簡単なタイプのみがサポートされています。変更された四角形がどれかを知るために IlvRegion が必要になるため、 IlAny (つまり、non-typed ポインター) が使用されます。 |
以下に bitmapHasChanged メソッドのコードを示します。
void
BitmapView::bitmapHasChanged(IlAny region)
{
IlvRegion redrawRegion(*(IlvRegion*)region);
IlvContainer* container = IlvContainer::GetContainer(_icon);
// Deal with the container transformer
if (container->getTransformer())
redrawRegion.apply(container->getTransformer());
// Optimization:Clip using the visible size of the container
IlvRect rect;
container->sizeVisible(rect);
redrawRegion.intersection(rect);
// Then redraw the region
container->bufferedDraw(redrawRegion);
}
Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.