На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты
АРХИВ ФОРУМА...
здесь вы можете ознакомиться с материалами форума до 08.06.2008

Что такое hwnd?

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти  
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Что такое hwnd?, Что такое hwnd?
Только пожалуйста не отвечайте, что это "идентификатор окна". Хотелось подробно узнать что это и с чем его едят. Было бы просто замечательно получить кратенький примерчик создания объекта такого типа и работы с ним. И примерчик применения в функциях ГИСа. Можно на мыло: oleg_nw117@rambler.ru
Изменено: Олег Капенов - 23.07.2009 22:47:08
hwnd, hdc - для Linux это указатель на структуру XCONTEXT.
Заполняется она следующим образом:

XCONTEXT FxDC;
FxDC.xcDisplay = x11AppDisplay();
FxDC.xcWindow = winId();
FxDC.xcContext = XCreateGC(FxDC.xcDisplay, FxDC.xcWindow, 0, NULL);
FxDC.xcPoint.X = 0;
FxDC.xcPoint.Y = 0;
Идентификатор окна запрашивается функцией winId() для QDialog.

Подробный пример находится в каталоге ./Sdk инсталяции ГИС Панорамы версии 9.16.0 для AltLinux 4.0, МСВС 3.0
А чем отличаются hwnd и hdc?
Для Linux - ни чем.
Здравствуйте! Подскажите, пожалуйста, нет ли примера работы с hwnd в каталогах установленного ГИС Конструктора для Qt Designer (версия 9, Qt3, SUSE Linux 10.3). Hwnd понадобился при использовании функции mapViewMapObject(…). Заранее спасибо!
Для ГИС Конструктора для Qt Designer (версия 9, Qt3, SUSE Linux 10.3) примера нет. Предлагаю в разделе скачать по ссылке http://gistoolkit.ru/download/gisdesigner10_mc_2_4.zip взять инсталляцию ГИС конструктор.
В каталоге ./Sdk/Qt3 находится пример, демонстрирующий работу с HDC. Повторюсь, что для Linux разницы между HDC и HWND нет.
С получением HDC вроде разобралась, но объект все равно не отображается. Функция mapViewMapObject(┘) изначально понадобилась, чтобы повторить функцию TMapObj.PaintObjectUp() из GisToolkit.

Описание типа объекта и задание метрики:
{
FMapObj = new QDMapObj(MapView1);
FMapObj->SetMapView( MapView1 );

QDMapPoint *MapPoint = NULL;
STypeDescription TypeDesc;

TypeDesc = TypeDescription(Key); //получение ExCode, InCode, Local, Name, Key объекта
if(TypeDesc.ExCode == -1)
return;


MapPoint = new QDMapPoint(MapView());
MapPoint->SetMapView(MapView());
MapObj()->CreateObject(1, IDDOUBLE2, false, 1, TypeDesc.ExCode,
LOCAL_VECTOR);
//MapObj() возвращает FMapObj
MapPoint->SetPlaceIn(PP_PLANE);
int X = 5728000;
int Y = 23130000;
MapPoint->SetPoint(X, Y);
MapObj()->VarMetric->Append(0, MapPoint->VarMapPoint);
Place = SavePlace;

MapPoint->SetPoint(X + 1000, Y + 1000);
MapObj()->VarMetric->Append(0, MapPoint->VarMapPoint);
PaintObjectUp(TypeDesc);
}


Моя функция PaintObjectUp (пример взят из MapObj.pas):
void CECustomMapObj::PaintObjectUp(STypeDescription TypeDesc)
{
DOUBLEPOINT dp;
PAINTPARM aImage;
IMGOBJECT aImageObj;

if(!MapObj() || !MapView())
return false;

int left;
int top;
MapView()->GetMapLeftTop( &left, &top );
dp.X = left;
dp.Y = top;

aImage.Image = IMG_OBJECT;
aImage.Mode = 3;//R2_COPYPEN;
aImage.Parm = (char*)(&aImageObj);

aImageObj.Color = IMGC_NOMARK;
aImageObj.Incode = TypeDesc.InCode;
HMAP hMap = MapView()->GetMapHandle();
HOBJ hObj = MapObj()->GetObjHandle();

int res = mapViewMapObject(hMap, ((QDMapViewWindow*)MapView())->VarHDC, &dp, &aImage, hObj, PP_PICTURE);
}

res в результате равно 0. В чем может быть проблема? Было предположение, что это может быть из-за несовпадения систем координат при добавлени метрик в объект и при отображении объекта. Пробовала добавлять метрики, используя систему координат PP_PICTURE, но проблему это не устранило.
Для Linux советую всегда инциализировать структуры
Код

PAINTPARM aImage;
IMGOBJECT aImageObj;

memset(&aImage, 0, sizeof(aImage));
memset(&aImageObj, 0, sizeof(aImageObj));

Применять MAPAPI-интерфейс в компонентах ГИС Конструктор для отображения объектов нельзя. Примеры применения HDC даны специально для программ, написанных только на MAPAPI! Переменную VarHDC не советую вообще трогать, она только для служебного пользования.
Поясните, пожалуйста, почему нельзя использовать MAPAPI-интерфейс для отображения объектов? Чем тогда можно заменить mapViewMapObject(...) из PaintObjectUp(...)?
В ГИС Конструктор отображение карты идет через системные функции отрисовки Qt, в которых производится заполнение служебной переменной VarHDC. Она применяется только для служебного пользования!
Отображения движущегося объекта поверх карты предлагается в примере ./Sdk/MapImage из инсталляции http://gistoolkit.ru/download/gisdesigner10_mc_2_4.zip. Функция QDMapViewWindow::GoObject().
Страницы: 1 2 След.
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)


© КБ Панорама, 1991-2012