地図投影図法 > インポートした地図の上にグラフィック・オブジェクトを追加する > マウス位置の表示
 
マウス位置の表示
データが地図にロードされたら、マウスの位置を表示するために入力コールバックを設定します。
if (_mapInfo) {
view->setInputCallback(_showMousePosition, this);
}
このコールバックは、ビューで入力イベントが発生するたびに showMousePosition メソッドを呼び出します。
void _showMousePosition(IlvView* view, IlvEvent& event, IlvAny arg)
{
SimpleMapViewer* mapViewer = (SimpleMapViewer*) arg;
mapViewer->showMousePosition(view, event);
}
このメソッドは最初に、情報を表示するため、いくつかのバッファーを初期化します。
void
SimpleMapViewer::showMousePosition(IlvView* view, IlvEvent& event)
{
char buf1[12];
char buf2[12];
char label[50];
}
次に、マウスの位置の下に最後にあったオブジェクトを取得します、さらに、都市名として表示するそのオブジェクトの名前があれば、それも取得します。
IlvManager* manager = _mapInfo->getManager();
 
const char* name = "";
IlvPoint p(event.x(), event.y());
IlvGraphic* g = manager->lastContains(p, view);
if (g && g->getName())
name = g->getName();
ここで再び、IlvMapInfo インスタンスによって、マウス位置のマネージャー座標を地理座標に変換します。
IlvCoordinate ll;
if (_mapInfo->inverse(event, view, ll) == IlvMaps::NoError())
sprintf(label, "%s %s %s",
IlvMaps::RadianToDMS(buf1, ll.x(), IlFalse),
IlvMaps::RadianToDMS(buf2, ll.y(), IlTrue),
name);
else
sprintf(label, "Unable to invert mouse position");
最後に、ステータス・バーにラベルを設定します。
_statusBar->setLabel(label);
_statusBar->reDraw();

Version 5.6
Copyright © 2012, Rogue Wave Software, Inc. All Rights Reserved.