а) Как остановить процесс создания матрицы высот из activeX компонента mapScreen? (и как получить данные о прогрессе создания?)
Если перегрузить WndProc компонента mapScreen - то туда сообщение 0x0581 не приходит, подходящих хендлеров в классе не нашёл.
UPD сделал через mapapi, но всётаки хотелось бы знать как через компонент это делать
под спойлером код c++/cli, вдруг кому пригодится
Скрытый текст |
---|
Код |
---|
#pragma pack(push)
#pragma pack(1)
struct TBUILDMTW
{
int StructSize;
int NotCheckDiskFreeSpace;
double BeginX;
double BeginY;
double Width;
double Height;
double ElemSizeMeters;
int ElemSizeBytes;
int UnitH;
int ReliefType;
int UserType;
int Scale;
int HeightSuper;
int FastBuilding;
int Method;
int Extremum;
int hObj; // не использую, поэтому оставил int
int LimitMatrixFrame;
int NotUse3DMetric;
int SurfaceSquare3DObject;
int AltitudeMarksNet;
int LimitMatrixByFramesOfSheets;
char res[20];
};
#pragma pack(pop)
|
Код |
---|
//перегрузка в форме
virtual void WndProc(Message %m) override
{
Form::WndProc(m);
if( m.Msg == 0x0581 )
int a = 0; // сюда прийдёт сообщение
}
|
Код |
---|
[DllImport("c:\\windows\\syswow64\\gisacces.dll", CharSet = CharSet::Ansi)]
extern "C" long int mapBuildMtw(Int32 hMap, const char *mtrname, const char *filtername, TBUILDMTW %mtrparm, IntPtr handle);
//в потоке, запуск построения
TBUILDMTW buildMtw;
buildMtw.StructSize = sizeof(buildMtw);
buildMtw.NotCheckDiskFreeSpace = false;
buildMtw.BeginX = dx;
buildMtw.BeginY = dy;
buildMtw.Width = w;
buildMtw.Height = h;
buildMtw.ElemSizeMeters = 50;
buildMtw.ElemSizeBytes = (int)axGisToolKit::TxElementSizeBytes::es32bit;
buildMtw.UnitH = (int)axGisToolKit::TxUnitHeight::uhMeter;
buildMtw.UserType = 0;
buildMtw.Scale = 0;
buildMtw.HeightSuper = (int)axGisToolKit::TxHeightSuper::hsMiddle;
buildMtw.FastBuilding = 0; // must be zero
buildMtw.Method = (int)axGisToolKit::TxBuidlMtwMethod::bmMiddleIP16;
buildMtw.Extremum = (int)axGisToolKit::TxLocalExtremum::leCreating;
buildMtw.hObj = 0;
buildMtw.LimitMatrixFrame =(int)axGisToolKit::TxLimitMatrixFrame::imfRestictionRegion;
buildMtw.NotUse3DMetric = 0;
buildMtw.SurfaceSquare3DObject = 1;
buildMtw.AltitudeMarksNet = 0;
buildMtw.LimitMatrixByFramesOfSheets = 1;
for(int i = 0; i < sizeof(buildMtw.res)/sizeof(char); i++)
buildMtw.res[i] = 0;
int nBuildRes = mapBuildMtw(axMap->MapHandle, szMtwName, nullptr, buildMtw, (IntPtr)dlgHandle);
|
|
б) Получаю сообщения 581h со значениями wparam
сначала 0,1,1,1,1,1,2,2,2,2,3,3,3,3,3, ... , 14, 14, 14
потом 1, 2, 3, ..., 99
и в конце 1, 1, 1, 100
оно так и задумано? сначала чтото распараллелили и несколько потоков отсылают, потом обычное построение, а потом какойто процесс сжатия начинает отсылать?
прогрессбар будет прыгать если всё рисовать "как есть"...
пока что сделал три прогрессбара на процесс создания матрицы высот...
в) (самое важное) куда нужно запихать 0x0581 для стопа операции? в msg.wParam? не работает ни в wParam ни в lParam, процесс построения продолжается до конца.