Здравствуйте! Тема много раз поднималась, хотелось бы все-таки обобщить как правильно отрисовывать пользовательские объекты в прикладных задачах написанных на PanApi используя mapapi функции ? Универсально, с возможностью использовать на Windows и Linux.
Исходные данные: имеется приложение с mdi окнами, карта в них рисуется по аналоргии с Вашим классом(буфер выводиться в XImage), интересует вопрос как правильно на событие paintEvent отрисовать в прикладной задачи произвольный объект. PaintEvent Mdi окна привожу ниже, здесь XCONTEXT context - глобальная переменная, в саму задачу он приходит но
Код |
---|
int res = mapPaintOffsetMapObject95(HMap, dc.operator HDC(), &rect, &ObjectImage, Info, &delta, PP_PLANE);
qDebug()<<res; всегда 0; |
При перемщение мышки объект рисуется через
Код |
---|
mapViewOffsetMapObject(HMap, GetMapWindowHandle(),
&MapLeftTop, &ObjectImage, Info, &delta, PP_PLANE); |
тоже с подмигиваниями.
Пробывал в задачу передовать QImage ScreenImageBuffer и отрисовывать с помощью
Код |
---|
int res = mapPaintUserObjectToXImage(HMap, &ximage, 0, 0, &rect, &ObjectImage, &data, PP_PLANE); |
Здесь возращается 1, но в метрику добавляю delta на смещение, на mousemove все рисуется со смещением, на Paint не рисует, как быть?
Код |
---|
void MdiChild::paintEvent(QPaintEvent *event){
RECT rect =qrectToRect(event->rect());
//qDebug() << event->rect();
LONGPOINT pos;
pos.x = horizontalScrollBar()->value();
pos.y = verticalScrollBar()->value();
VarHorzPos = pos.x;
VarVertPos = pos.y;
#ifdef __linux
memset(&context,0,sizeof(XCONTEXT));
context.xcDisplay = QX11Info::display();
context.xcWindow = this->viewport()->winId();
context.xcContext = XCreateGC(context.xcDisplay, context.xcWindow, 0, NULL);
context.xcPoint.X = 0;
context.xcPoint.Y = 0;
mdicontext = (HDC)&context;
#else
mdicontext = this->viewport()->winId();
#endif
mapWindowLink.OnPaintEx(mdicontext, 0, &pos, rect); // в linux HDC == HWND
} |