模拟人工操作Micaps1.0的C++类源代码

来源:互联网 发布:python 二维矩阵画图 编辑:程序博客网 时间:2024/06/08 06:17
通过应用Windows的消息传递机制,在应用程序中模拟Micaps系统的人工操作,以实现文件的检索、图像的显隐、缩放甚至勾画等值线、标天气符号、显示指定站点的时序图、TlogP图等交互工作,使得Micaps的二次开发产品及预报工具能够与Micaps系统本身更加紧密结合,更有效地发挥Micaps的预报操作平台功能。

 


CMicaps.cpp
0001 //***************************************************************************
0002 //      功能:与Micaps系统的交互访问
0003 //    文件名:CMicaps.cpp
0004 //    头文件:CMicaps.h
0005 //  相关文件:SMicaps.hpp
0006 //           FStrings.p        - 字符串处理
0007 //           SFloatPoint.hpp   - Point类的浮点版
0008 //           CCoordinate.h     - 地图坐标处理
0009 //           CDiamond19.h      - Micaps 初始化参数文件
0010 //    编写者:刘泽军
0011 //  开始日期:2001-08-04
0012 //  更新日期:2002-05-04
0013 //      备注:
0014 //***************************************************************************
0015 
0016 //===========================================================================
0017 //  程序名:CMicaps.cpp
0018 //    功能:
0019 //程序设计:广西壮族自治区柳州地区气象台 刘泽军
0020 //   EMail:BJ0773@gmail.com
0021 //===========================================================================
0022 //  本文件:CMicaps.cpp
0023 //  头文件:CMicaps.h
0024 //         SMicaps.hpp
0025 //开发平台:Microsoft Windows 2000 + Borland C++Builder 5.0
0026 //辅助工具:Microsoft Spy++ 6.0, Borland WorkShop 4.5
0027 //相关文章:《应用程序与Micaps系统的交互访问》 2001-10-19已投给《气象》,未获录用。
0028 //开始日期:2001-08-04
0029 //更新日期:2001-11-26
0030 //===========================================================================
0031 //开发历程:
0032 //          2001-08-04 启动、关闭Micaps
0033 //          2001-08-05 访问Micaps菜单项 - 打开
0034 //          2001-08-07 访问显示设置窗口
0035 //          2001-08-08 访问图形检索窗口、其它的Micaps菜单项
0036 //          2001-08-27 在Micaps主窗口 显示 工具窗口 指定的符号(Lambert投影下)
0037 //          2001-09-06 打开多个文件
0038 //          2001-09-17 完善Micaps菜单访问(因键盘方式访问Micaps菜单在Win98不正常)
0039 //                     WM_SYSCOMMAND+SC_KEYMENU => WM_COMMAND+MenuID
0040 //          2001-10-13 在Lambert投影方式下的 经纬度 => Micaps主窗口坐标
0041 //          2001-10-15 完成《应用程序与Micaps系统的交互访问》
0042 //          2001-11-12 相互独立的函数 => CMicaps 类
0043 //          2001-11-22 根据预定义的操作记录文件来控制Micaps
0044 //===========================================================================
0045 #include <vcl.h>
0046 #include <clipbrd.hpp>
0047 #pragma hdrstop
0048 
0049 #include "CMicaps.h"
0050 //---------------------------------------------------------------------------
0051 #include <FileCtrl.hpp>
0052 #include "../Common/CDiamondList.h"
0053 //---------------------------------------------------------------------------
0054 #pragma package(smart_init)
0055 //---------------------------------------------------------------------------
0056 CMicaps::~CMicaps(void)
0057 //功能:析构函数
0058 {
0059 //    if( FOwnerExecute )//若Micaps是由应用程序本身运行则关闭Micaps。
0060 //        Close();
0061 }
0062 //---------------------------------------------------------------------------
0063 CMicaps::CMicaps(void)
0064 //功能:结构函数
0065 {
0066     FOwnerExecute = false;
0067     Enabled = Setup("C://Micaps");
0068     ifEnabled )
0069         SetMicapsParameter(FMicapsParameter);
0070     FCurrentOpenFileName = "";
0071 }
0072 //---------------------------------------------------------------------------
0073 CMicaps::CMicaps(AnsiString FMicapsPath)
0074 //功能:结构函数
0075 //参数:
0076 //FMicapsPath - Micaps的安装目录(如:C:/Micaps)
0077 {
0078     FOwnerExecute = false;
0079     Enabled = Setup(FMicapsPath);
0080     ifEnabled )
0081         SetMicapsParameter(FMicapsParameter);
0082     FCurrentOpenFileName = "";
0083 }
0084 //---------------------------------------------------------------------------
0085 CMicaps::CMicaps(AnsiString FMicapsPath, AnsiString FMicapsParam)
0086 //功能:结构函数
0087 //参数:
0088 //FMicapsPath  - Micaps的安装目录(如:C:/Micaps)
0089 //FMicapsParam - 运行Micaps的参数文件(diamond 19)
0090 {
0091     FOwnerExecute = false;
0092     Enabled = Setup(FMicapsPath);
0093     ifEnabled && FileExists(FMicapsParam) )
0094         {
0095         FMicapsParameter = FMicapsParam;
0096         SetMicapsParameter(FMicapsParameter);
0097         }
0098 }
0099 //---------------------------------------------------------------------------
0100 HWND CMicaps::FindMicapsWindow(void)
0101 //功能:查找Micaps主窗口
0102 {
0103     return(FindWindow("MainClass","气象信息综合分析处理系统(MICAPS)"));
0104 }
0105 //---------------------------------------------------------------------------
0106 bool CMicaps::Setup(AnsiString FMicapsPath)
0107 //功能:设置本机的Micaps安装目录
0108 //参数:
0109 //FMicapsPath   - 本机的Micaps安装目录 缺省为 C:/Micaps
0110 {
0111     bool    FEnabled        = false;
0112     FCoordinateEnabled      = false;
0113     FMicapsDirectory        = FMicapsPath.Trim();
0114     ifFMicapsDirectory[FMicapsDirectory.Length()] != '//' )
0115         FMicapsDirectory    = FMicapsDirectory + "//";
0116     FMicapsExecuteFile      = FMicapsDirectory + "Code//Micaps.exe";
0117     FMicapsParameter        = FMicapsDirectory + "Code//Para1.dat";
0118     if!FileExists(FMicapsExecuteFile) )
0119         {
0120         ifSelectDirectory("请选择 Micaps 的安装目录!(例如:C://Micaps)""我的电脑",FMicapsDirectory) )
0121             FEnabled = Setup(FMicapsDirectory);
0122         else
0123             FEnabled = false;
0124         }
0125     else
0126         FEnabled = true;
0127     return(FEnabled);
0128 }
0129 //---------------------------------------------------------------------------
0130 AnsiString CMicaps::GetMicapsDirectory(void)
0131 //功能:返回Micaps安装目录
0132 {
0133     returnFMicapsDirectory );
0134 }
0135 //---------------------------------------------------------------------------
0136 AnsiString CMicaps::GetMicapsParameter(void)
0137 //功能:返回Micaps启动参数
0138 {
0139     returnFMicapsParameter );
0140 }
0141 //---------------------------------------------------------------------------
0142 bool CMicaps::SetMicapsParameter(AnsiString FMicapsParam)
0143 //功能:设置Micaps启动参数
0144 {
0145     bool    FMessage = false;
0146     FParameterCorrect    = false;
0147 
0148     ifFileExists(FMicapsParam) )
0149         {
0150         FMicapsParameter = FMicapsParam;
0151         CDiamond19 *d19 = new CDiamond19(FMicapsParam);
0152         FParameterCorrect    = d19->Enabled;
0153         ifd19->Enabled )
0154             {
0155             FStartData = d19->GetStartData();
0156             RECT lpRect;
0157             ifIsMicapsRunning() )
0158                 MicapsClientRect&lpRect );
0159             else
0160                 lpRect = Rect(0,0,Screen->Width - 8,Screen->Height - 46);
0161             FCoordinate = new CCoordinate(
0162                 1,//Lambert
0163                 d19->GetCenterLongitudeLatitude(),//TFloatPoint(100,35),
0164                 TFloatPoint(lpRect.right/2,lpRect.bottom/2+2),
0165                 d19->GetZoom() );      //缩放系数
0166             FCoordinateEnabled = true;
0167             FMessage == true;
0168             }
0169         delete d19;
0170         }
0171     returnFMessage );
0172 }
0173 //---------------------------------------------------------------------------
0174 bool CMicaps::IsMicapsRunning(void)
0175 //功能:判断Micaps是否运行
0176 {
0177     returnFindMicapsWindow() != NULL );
0178 }
0179 //---------------------------------------------------------------------------
0180 bool CMicaps::MenuFromId(int FMicapsMenuId)
0181 //功能:执行ID号为FMicapsMenuId的Micaps菜单
0182 //参数:
0183 //FMicapsMenuId - 指定的Micaps菜单ID号
0184 {
0185     HWND    hWndMicaps = FindMicapsWindow();
0186     bool    FMessage = false;
0187     ifhWndMicaps != NULL )
0188         {
0189         FMessage = PostMessage(hWndMicaps,WM_COMMAND,MAKELONG(FMicapsMenuId,0),NULL);
0190 //        FMessage = SendMessage(hWndMicaps,WM_COMMAND,MAKELONG(FMicapsMenuId,0),NULL);
0191         Sleep(132);
0192         }
0193     return(FMessage);
0194 }
0195 //---------------------------------------------------------------------------
0196 bool CMicaps::Execute(bool FExecuteType)//private member function
0197 //功能:运行Micaps
0198 //参数:
0199 //FExecuteType: 运行方式
0200 //              true 强制运行并返回运行结果
0201 //              false 若Micaps已运行则返回true,否则返回运行结果
0202 {
0203     ifFExecuteType )//强制运行方式
0204         {
0205         Close();
0206         Sleep(1032);
0207         }
0208     bool    FMessage = IsMicapsRunning();
0209     if!FMessage )//Micaps未运行
0210         {
0211         FMessage = (int)ShellExecute(
0212                         Application->Handle,
0213                         "open",
0214                         FMicapsExecuteFile.c_str(),
0215                         FMicapsParameter.c_str(),
0216                         ExtractFilePath(FMicapsExecuteFile).c_str(),
0217                         SW_SHOWNORMAL )
0218                     32;
0219         FOwnerExecute = true;
0220         SetMicapsParameter(FMicapsParameter);
0221         }
0222     else
0223         {
0224         HWND    hWndMicaps = FindMicapsWindow();
0225         ifhWndMicaps != NULL )
0226             {
0227             ShowWindow(hWndMicaps,SW_SHOWNORMAL);//显示Micaps主窗口
0228             SetForegroundWindow(hWndMicaps)//设置Micaps为当前活动窗口
0229             }
0230         }
0231     return(FMessage);
0232 }
0233 //---------------------------------------------------------------------------
0234 bool CMicaps::Execute(void)
0235 //功能:运行Micaps(非强制方式)
0236 {
0237     returnExecute(false) );//非强制方式运行Micaps
0238 }
0239 //---------------------------------------------------------------------------
0240 bool CMicaps::Execute(AnsiString FMicapsParam)
0241 //功能:带参数运行Micaps(非强制方式)
0242 //参数:
0243 //FMicapsParam - 指向一个文件名(diamond 19),该文件包含Micaps的启动设置
0244 {
0245     if!IsMicapsRunning() && FileExists(FMicapsParam.Trim()) )
0246         FMicapsParameter = FMicapsParam.Trim();
0247     returnExecute(false) );
0248 }
0249 //---------------------------------------------------------------------------
0250 bool CMicaps::ForceExecute(void)
0251 //功能:运行Micaps(强制方式)
0252 {
0253     returnExecute(true) );//非运行Micaps
0254 }
0255 //---------------------------------------------------------------------------
0256 bool CMicaps::ForceExecute(AnsiString FMicapsParam)
0257 //功能:带参数运行Micaps(强制方式)
0258 //参数:
0259 //FMicapsParam - 指向一个文件名(diamond 19),该文件包含Micaps的启动设置
0260 {
0261     ifFileExists(FMicapsParam.Trim()) )
0262         FMicapsParameter = FMicapsParam.Trim();
0263     returnExecute(true) );
0264 }
0265 //---------------------------------------------------------------------------
0266 bool CMicaps::Close(void)//关闭 Micaps
0267 {
0268     bool    FMessage = false;
0269 try {
0270     HWND    hWndMicaps = FindMicapsWindow();
0271     ifhWndMicaps != NULL )
0272         {
0273         FMessage = PostMessagehWndMicaps, WM_CLOSE, 0);
0274         HWND hWndMicapsClose = NULL;
0275         int     iSleepCount = 0;
0276         whilehWndMicapsClose == NULL && iSleepCount < 12 )
0277             {
0278             Sleep(132);//延时
0279             hWndMicapsClose = FindWindow("#32770","退出Micaps");
0280             iSleepCount ++;
0281             }
0282         if( ( FParameterCorrect && FStartData.WindowClose == )
0283             || hWndMicapsClose != NULL )
0284             {
0285             SendDlgItemMessage(
0286                 hWndMicapsClose, MICAPS_DLG_CLOSE_OKBUTTON, BM_CLICK, 00);
0287             FMessage = true;
0288             }
0289         FOwnerExecute = false;
0290         }
0291     return(FMessage);
0292     }
0293 catch(...)
0294     {
0295     return(FMessage);
0296     }
0297 }
0298 //---------------------------------------------------------------------------
0299 bool CMicaps::OpenFile(AnsiString FOpenFileName)
0300 //功能:打开文件
0301 //参数:
0302 //FOpenFileName     - 要打开的文件名
0303 {
0304     bool    FMessage = false;
0305 try {
0306     ifFOpenFileName.Pos("*"|| FOpenFileName.Pos("?") )
0307         FOpenFileName = SearchFile(FOpenFileName,FSM_NEW);//搜索最新文件
0308     if!FileExists(FOpenFileName|| !IsMicapsRunning() )
0309         return(FMessage);//指定文件不存在 或 Micaps未运行
0310     HWND    hWndMicaps = FindMicapsWindow();
0311     int     iSleepCount = 0;
0312     HWND    hWndMicapsOpenFile = NULL;
0313     ifhWndMicaps != NULL
0314 //      && ShowWindow(hWndMicaps,SW_SHOWNORMAL)//显示Micaps主窗口
0315 //      && SetForegroundWindow(hWndMicaps) //设置Micaps为当前活动窗口
0316         )
0317         {
0318         MenuFromId(MICAPS_MENU_FILE);
0319         whilehWndMicapsOpenFile == NULL && iSleepCount < 12 )
0320             {//找 打开新文件 窗口
0321             Sleep(512);
0322             hWndMicapsOpenFile = FindWindow"#32770""打开新文件" );
0323             iSleepCount++;
0324             }
0325         if(hWndMicapsOpenFile!=NULL)// && GetParent(hWndMicapsOpenFile) == hWndMicaps )
0326             {
0327             //清除 文件编辑框 文本
0328             SendDlgItemMessagehWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_CLEAR, 00);
0329             FCurrentOpenFileName = FOpenFileName;
0330             //将文件名放入剪切板
0331             Clipboard()->SetTextBuf(FOpenFileName.c_str());
0332             //从剪切板粘贴文本
0333             SendDlgItemMessagehWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_PASTE, 00);
0334 //            Application->MainForm->Caption = FOpenFileName;
0335 
0336             //按 打开新文件 窗口的 确定 按钮
0337             SendDlgItemMessagehWndMicapsOpenFile, MICAPS_DLG_OPEN_OKBUTTON, BM_CLICK, 00);
0338             FMessage = true;
0339             }
0340 //判断 打开新文件 窗口是否仍未关闭
0341         iSleepCount = 0;
0342         hWndMicapsOpenFile = NULL;
0343         whilehWndMicapsOpenFile == NULL && iSleepCount < )
0344             {//找 打开新文件 窗口
0345             Sleep(132);
0346             hWndMicapsOpenFile = FindWindow"#32770""打开新文件" );
0347             iSleepCount++;
0348             }
0349         ifhWndMicapsOpenFile != NULL )
0350             {//按 打开新文件 窗口的 取消 按钮
0351             SendDlgItemMessagehWndMicapsOpenFile, MICAPS_DLG_OPEN_CANCELBUTTON, BM_CLICK, 00);
0352             FMessage = true;
0353             }
0354         }
0355     return(FMessage);
0356     }
0357 catch(...)
0358     {
0359     return(FMessage);
0360     }
0361 }
0362 //---------------------------------------------------------------------------
0363 bool CMicaps::OpenFiles(AnsiString FFiles)
0364 //功能:打开多个文件
0365 //参数:
0366 //FFiles - 包括多个指定要打开的文件名,以 ; 或 | 号分隔
0367 {
0368     returnOpenFiles(FFiles,";","|") );
0369 }
0370 //---------------------------------------------------------------------------
0371 bool CMicaps::OpenFiles(AnsiString FFiles, AnsiString FAndStr, AnsiString FOrStr)
0372 //功能:在Micaps中打开多个文件
0373 //参数:
0374 //FFiles  - 包括多个指定要打开的文件名,以 FAdnStr 或 ForStr 指定的符号分隔
0375 //FAndStr - 表示 和 的符号
0376 //FOrStr  - 表示 或 的符号
0377 {
0378 //缺省 FAndStr - ;
0379 //缺省 FOrStr  - |
0380 //间隔号(;) - 所有文件均打开
0381 //例: a,b,c 打开文件a及b及c
0382 //间隔号(|) - 打开第一个存在的文件
0383 //例: a|b|c 若a存在则打开a并返回,否则若b存在则打开b并返回...
0384     TStringList *StringList = new TStringList();
0385     TStringList *ChildStringList = new TStringList();
0386     ExtractString(FFiles,FAndStr,false,StringList);
0387 
0388 //2002-01-30
0389 //   修改 CMicaps 类中有关 Micaps 文件的打开方式,根据记录文件 Code/File.lst,
0390 //   当需要打开的文件已被 Micaps 打开时,程序只是将该文件设为“显示”状态,而不是
0391 //   重新打开,否则将打开该文件;其他不需要显示的文件则从“显示设置”窗口中删除掉。
0392     for(int i=0;i<StringList->Count;i++ )
0393         {
0394         ifStringList->Strings[i].Pos(FOrStr)
0395             {
0396             ExtractString(StringList->Strings[i],FOrStr,false,ChildStringList);
0397             for(int j=0;j<ChildStringList->Count;j++ )
0398                 ifChildStringList->Strings[j].Pos("*")
0399                     || ChildStringList->Strings[j].Pos("?") )
0400                     ChildStringList->Strings[j=
0401                         SearchFile(ChildStringList->Strings[j],FSM_NEW);//搜索最新文件
0402             for(int j=0;j<ChildStringList->Count;j++ )
0403                 ifFileExists(ChildStringList->Strings[j]) )
0404                     {
0405                     StringList->Strings[i= ChildStringList->Strings[j];
0406                     j = ChildStringList->Count;
0407                     }
0408             }
0409         else ifStringList->Strings[i].Pos("*")
0410             ||   StringList->Strings[i].Pos("?") )
0411             {
0412             StringList->Strings[i=
0413                 SearchFile(StringList->Strings[i],FSM_NEW);//搜索最新文件
0414             }
0415         }
0416     for(int i=StringList->Count-1;i>=0;i-- )
0417         ifStringList->Strings[i].Trim() == ""
0418             || !FileExists(StringList->Strings[i].Trim()) )
0419             StringList->Delete(i);
0420     TMicapsOpenFileList *mofl = new TMicapsOpenFileList(
0421         GetMicapsDirectory()+"Code//File.LST" );
0422     ifmofl->Enabled )
0423         {
0424         bool    *bFile = new bool[mofl->GetCount()+1];
0425         mofl->CurrentOpened(StringList,bFile);
0426         forint i=0;i<mofl->GetCount();i++ )
0427             bFile[i= !bFile[i];
0428         Status(bFile,mofl->GetCount(),MICAPS_FILE_STATUS_MOVE);//让Micaps删除所有不需要打开的文件
0429         Status(-1,MICAPS_FILE_STATUS_VIEW);//让Micaps显示所有已打开的文件
0430         delete bFile;
0431         }
0432     else
0433         Status(-1,MICAPS_FILE_STATUS_MOVE);//让Micaps删除所有已打开的文件
0434     delete mofl;
0435 
0436 //打开文件
0437     for(int i=0;i<StringList->Count;i++ )
0438         ifStringList->Strings[i].Trim() != "" )
0439             OpenFile(StringList->Strings[i].Trim());
0440 
0441     delete ChildStringList;
0442     delete StringList;
0443     return(true);
0444 }
0445 //---------------------------------------------------------------------------
0446 bool CMicaps::SaveToFile(AnsiString FSaveFileName)
0447 //功能:保存文件
0448 //参数:
0449 //FSaveFileName     - 要保存的文件名
0450 {
0451     bool    FMessage = false;
0452     if!IsMicapsRunning() )    return(false);
0453     AnsiString  TempFSaveFileName = "C://TempSave.LZJ";
0454 try {
0455     ifFileExists(TempFSaveFileName) )
0456         DeleteFile(TempFSaveFileName.c_str());
0457     HWND hWndMicaps = FindMicapsWindow();
0458     ifhWndMicaps == NULL )    return(false);
0459     FMessage = Explore(3);
0460     if!FMessage return(FMessage);
0461     int iSleepCount = 0;
0462     HWND hWndMicapsSaveFile = NULL;
0463     whilehWndMicapsSaveFile == NULL && iSleepCount < 12 )
0464         {
0465         Sleep(132);
0466         hWndMicapsSaveFile = FindWindow"#32770""保存文件" );
0467         iSleepCount++;
0468         }
0469     ifhWndMicapsSaveFile != NULL
0470         && GetParent(hWndMicapsSaveFile== FindWindow("OperateClass","工具") )
0471         {
0472         Clipboard()->SetTextBuf(TempFSaveFileName.c_str());
0473         SendDlgItemMessage(
0474             hWndMicapsSaveFile,
0475             MICAPS_DLG_SAVE_EDITCTRL,
0476             WM_CLEAR,
0477             00);
0478         SendDlgItemMessage(
0479             hWndMicapsSaveFile,
0480             MICAPS_DLG_SAVE_EDITCTRL,
0481             WM_PASTE,
0482             00);
0483         SendDlgItemMessage(
0484             hWndMicapsSaveFile,
0485             MICAPS_DLG_SAVE_OKBUTTON,
0486             BM_CLICK,
0487             0);
0488         FMessage = true;
0489         }
0490     ifFileExists(TempFSaveFileName) )
0491         {
0492         FMessage = CopyFile(
0493             TempFSaveFileName.c_str(),
0494             FSaveFileName.c_str(),
0495             false);
0496         DeleteFile(TempFSaveFileName.c_str());
0497         }
0498     else
0499         FMessage = false;
0500     return(FMessage);
0501     }
0502 catch(...)
0503     {
0504     return(FMessage);
0505     }
0506 }
0507 //---------------------------------------------------------------------------
0508 bool CMicaps::Status(int FFileIndex, int FFileStatus)
0509 //功能:设置Micaps文件状态
0510 //参数:
0511 //FFileIndex    - 文件序号 -2, -1, 0, 1, 2 ... -2 为所有项 -1 为除0项外
0512 //FFileStatus   - 状态 {MICAPS_FILE_STATUS_VIEW,MICAPS_FILE_STATUS_HIDE, MICAPS_FILE_STATUS_MODIFY, MICAPS_FILE_STATUS_EDIT, MICAPS_FILE_STATUS_MOVE}
0513 {
0514     ifFFileIndex < -)   FFileIndex == -2;
0515     bool    FMessage = false;
0516 try {
0517     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0518     HWND    hWndMicaps = FindMicapsWindow();
0519     ifhWndMicaps == NULL )    return(FMessage);//无法定位Micaps窗口
0520     DialogOption(true);
0521     HWND    hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0522     int     iSleepCount = 0;
0523     ifhWndMicaps != NULL
0524         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0525         && SetForegroundWindow(hWndMicaps)
0526         )
0527         {
0528         iSleepCount = 0;
0529         whilehWndMicapsFileStatus == NULL && iSleepCount < 12 )
0530             {
0531             Sleep(132);
0532             hWndMicapsFileStatus = FindWindow"#32770""显示设置" );
0533             iSleepCount++;
0534             }
0535         int FItemCount = 0;
0536         if(    hWndMicapsFileStatus!=NULL
0537             && ShowWindow(hWndMicapsFileStatus,SW_SHOWNORMAL)//显示Micaps主窗口
0538             && SetForegroundWindow(hWndMicapsFileStatus//设置Micaps为当前活动窗口
0539             && GetDlgItem(hWndMicapsFileStatus, FFileStatus!= NULL//有状态按钮
0540             && (FItemCount = SendDlgItemMessage(
0541                     hWndMicapsFileStatus,
0542                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0543                     LB_GETCOUNT, 00)) 0
0544             )
0545             {
0546             SendDlgItemMessage(//不选所有项
0547                 hWndMicapsFileStatus,
0548                 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0549                 LB_SELITEMRANGE,
0550                 false,
0551                 MAKELONG(0,FItemCount-1));
0552             switchFFileIndex )
0553                 {
0554                 case -2://设置所有项
0555                     SendDlgItemMessage(
0556                         hWndMicapsFileStatus,
0557                         MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0558                         LB_SELITEMRANGE,
0559                         true,
0560                         MAKELONG(0,FItemCount-1));
0561                     break;
0562                 case -1://设置非0项
0563                     ifFItemCount > )
0564                         SendDlgItemMessage(//选定项目
0565                             hWndMicapsFileStatus,
0566                             MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0567                             LB_SELITEMRANGE,
0568                             true,
0569                             MAKELONG(1,FItemCount-1));
0570                     break;
0571                 default:
0572                     ifFFileIndex < FItemCount )//设置指定项
0573                         SendDlgItemMessage(
0574                             hWndMicapsFileStatus,
0575                             MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0576                             LB_SETSEL,
0577                             true,
0578                             FFileIndex);
0579                     break;
0580                 }//siwtch
0581             ifSendDlgItemMessage(//已选择有项目
0582                     hWndMicapsFileStatus,
0583                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0584                     LB_GETSELCOUNT,
0585                     0,
0586                     0)
0587                 {//单击 显示设置 窗口的指定按钮
0588                 SendDlgItemMessage(
0589                     hWndMicapsFileStatus,
0590                     FFileStatus,
0591                     BM_CLICK,
0592                     0,
0593                     0);
0594                 FMessage = true;
0595                 }
0596             }//if hWndMicapsFileStatus!=NULL
0597         }//if hWndMicaps != NULL
0598     return(FMessage);
0599     }
0600 catch(...)
0601     {
0602     return(FMessage);
0603     }
0604 }
0605 //---------------------------------------------------------------------------
0606 bool CMicaps::Status(int FFileFirst, int FFileLast, int FFileStatus)
0607 //功能:设置Micaps文件状态
0608 //参数:
0609 //FFileFirst    - 始文件序号
0610 //FFileLast     - 止文件序号
0611 //FFileStatus   - 状态 {MICAPS_FILE_STATUS_VIEW,MICAPS_FILE_STATUS_HIDE, MICAPS_FILE_STATUS_MODIFY, MICAPS_FILE_STATUS_EDIT, MICAPS_FILE_STATUS_MOVE}
0612 //                若 FFileFirst < 0 或 FFileLast < 0 则仅设置状态
0613 {
0614     bool    FMessage = false;
0615 try {
0616     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0617     HWND    hWndMicaps = FindMicapsWindow();
0618     ifhWndMicaps == NULL )    return(FMessage);//无法定位Micaps窗口
0619     DialogOption(true);
0620     HWND    hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0621     int     iSleepCount = 0;
0622     ifhWndMicaps != NULL
0623         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0624         && SetForegroundWindow(hWndMicaps)
0625         )
0626         {
0627         iSleepCount = 0;
0628         whilehWndMicapsFileStatus == NULL && iSleepCount < 12 )
0629             {
0630             Sleep(132);
0631             hWndMicapsFileStatus = FindWindow"#32770""显示设置" );
0632             iSleepCount++;
0633             }
0634         int FItemCount = 0;
0635         if(hWndMicapsFileStatus!=NULL
0636             && ShowWindow(hWndMicapsFileStatus,SW_SHOWNORMAL)//显示Micaps主窗口
0637             && SetForegroundWindow(hWndMicapsFileStatus//设置Micaps为当前活动窗口
0638             && GetDlgItem(hWndMicapsFileStatus, FFileStatus!= NULL//有状态按钮
0639             && (FItemCount = SendDlgItemMessage(
0640                     hWndMicapsFileStatus,
0641                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0642                     LB_GETCOUNT, 00)) 0
0643             )
0644             {
0645             ifFFileFirst < || FFileLast < )
0646                 {//仅设置文件状态
0647                 ifSendDlgItemMessage(
0648                         hWndMicapsFileStatus,
0649                         MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0650                         LB_GETSELCOUNT,
0651                         0,
0652                         0)//已选择有项目
0653                     {
0654                     SendDlgItemMessage(
0655                         hWndMicapsFileStatus,
0656                         FFileStatus,
0657                         BM_CLICK,
0658                         0,
0659                         0);
0660                     FMessage = true;
0661                     }
0662                 }//if 0 0
0663             else ifFFileFirst == 9999 && FFileLast == 9999 )//所有项均不选
0664                 {
0665                 SendDlgItemMessage(
0666                     hWndMicapsFileStatus,
0667                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0668                     LB_SELITEMRANGE,
0669                     false,
0670                     MAKELONG(0,FItemCount-1));
0671                 }//else if 9999 9999
0672             else
0673                 {//选择项目
0674                 ifFFileFirst > FItemCount - )
0675                     FFileFirst = FItemCount - 1;
0676                 ifFFileLast  > FItemCount - )
0677                     FFileLast  = FItemCount - 1;
0678                 ifFFileFirst > FFileLast )
0679                     {
0680                     FItemCount = FFileFirst;
0681                     FFileFirst = FFileLast;
0682                     FFileLast  = FItemCount;
0683                     }
0684                 SendDlgItemMessage(//选择指定项
0685                     hWndMicapsFileStatus,
0686                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0687                     LB_SELITEMRANGE,
0688                     true,
0689                     MAKELONG(FFileFirst,FFileLast));
0690                 ifSendDlgItemMessage(
0691                         hWndMicapsFileStatus,
0692                         MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0693                         LB_GETSELCOUNT,
0694                         0,
0695                         0)//已选择有项目
0696                     {//设置文件状态
0697                     SendDlgItemMessage(
0698                         hWndMicapsFileStatus,
0699                         FFileStatus,
0700                         BM_CLICK,
0701                         0,
0702                         0);
0703                     FMessage = true;
0704                     }
0705                 }//else
0706             }//if(hWndMicapsFileStatus!=NULL
0707         }//if( hWndMicaps != NULL
0708     return(FMessage);
0709     }
0710 catch(...)
0711     {
0712     return(FMessage);
0713     }
0714 }
0715 //---------------------------------------------------------------------------
0716 bool CMicaps::Status(bool FFile[]int FFileCount, int FFileStatus)
0717 //功能:设置Micaps指定项目的文件状态
0718 //参数:
0719 //FFile[]       - 待选值(true为选择,false为不选)
0720 //FFileCount    - 总数
0721 //FFileStatus   - 状态 {MICAPS_FILE_STATUS_VIEW,MICAPS_FILE_STATUS_HIDE, MICAPS_FILE_STATUS_MODIFY, MICAPS_FILE_STATUS_EDIT, MICAPS_FILE_STATUS_MOVE}
0722 //                若 FFileFirst < 0 或 FFileLast < 0 则仅设置状态
0723 {
0724     bool    FMessage = false;
0725 try {
0726     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0727     HWND    hWndMicaps = FindMicapsWindow();
0728     ifhWndMicaps == NULL )    return(FMessage);//无法定位Micaps窗口
0729     DialogOption(true);
0730     HWND    hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0731     int     iSleepCount = 0;
0732     ifhWndMicaps != NULL
0733         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0734         && SetForegroundWindow(hWndMicaps)
0735         )
0736         {
0737         iSleepCount = 0;
0738         whilehWndMicapsFileStatus == NULL && iSleepCount < 12 )
0739             {
0740             Sleep(132);
0741             hWndMicapsFileStatus = FindWindow"#32770""显示设置" );
0742             iSleepCount++;
0743             }
0744         int FItemCount = 0;
0745         ifhWndMicapsFileStatus != NULL
0746             && ShowWindow(hWndMicapsFileStatus,SW_SHOWNORMAL)//显示Micaps主窗口
0747             && SetForegroundWindow(hWndMicapsFileStatus//设置Micaps为当前活动窗口
0748             && GetDlgItem(hWndMicapsFileStatus, FFileStatus!= NULL//有状态按钮
0749             && (FItemCount = SendDlgItemMessage(
0750                     hWndMicapsFileStatus,
0751                     MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0752                     LB_GETCOUNT, 00)) 0
0753             )
0754             {
0755             SendDlgItemMessage(//取消所有项目的选择状态
0756                 hWndMicapsFileStatus,
0757                 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0758                 LB_SELITEMRANGE,
0759                 false,
0760                 MAKELONG(0,FItemCount-1));
0761             forint i=0;i<FItemCount;i++ )
0762                 ifi<FFileCount )
0763                     SendDlgItemMessage(//选择指定项
0764                         hWndMicapsFileStatus,
0765                         MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0766                         LB_SETSEL,
0767                         FFile[i],
0768                         i);
0769             ifSendDlgItemMessage(
0770                 hWndMicapsFileStatus,
0771                 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0772                 LB_GETSELCOUNT,
0773                 0,
0774                 0)//已选择有项目
0775                 {//设置文件状态
0776                 SendDlgItemMessage(
0777                     hWndMicapsFileStatus,
0778                     FFileStatus,
0779                     BM_CLICK,
0780                     0,
0781                     0);
0782                 FMessage = true;
0783                 }
0784             }//if(hWndMicapsFileStatus!=NULL
0785         }//if( hWndMicaps != NULL
0786     return(FMessage);
0787     }
0788 catch(...)
0789     {
0790     return(FMessage);
0791     }
0792 }
0793 //---------------------------------------------------------------------------
0794 bool CMicaps::Explore(int FTools)
0795 //功能:按下图形检索窗口的第FTools个按钮
0796 //参数:
0797 //FTools   - 按钮序号 自上而下 由0开始
0798 {
0799     bool    FMessage = false;
0800     TPoint  FToolsPoint = OperateTools(FTools);
0801 try {
0802     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0803     HWND    hWndMicaps = FindMicapsWindow();
0804     HWND    hWndMicapsTools;//检索窗口
0805     ifhWndMicaps != NULL
0806         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0807         && SetForegroundWindow(hWndMicaps)
0808         )
0809         {
0810         hWndMicapsTools = FindWindow("OperateClass","工具");
0811         FMessage = hWndMicapsTools != NULL
0812             && PostMessagehWndMicapsTools, WM_LBUTTONDOWN, MK_LBUTTON,  MAKELONG(FToolsPoint.x,FToolsPoint.y) )
0813             && PostMessagehWndMicapsTools, WM_LBUTTONUP,   MK_LBUTTON,  MAKELONG(FToolsPoint.x,FToolsPoint.y) );
0814         }
0815     return(FMessage);
0816     }
0817 catch(...)
0818     {
0819     return(FMessage);
0820     }
0821 }
0822 //---------------------------------------------------------------------------
0823 bool CMicaps::ZoomStatus(void)
0824 //功能:设置Micaps窗口为缩放状态
0825 {
0826     returnExplore(11) );
0827 }
0828 //---------------------------------------------------------------------------
0829 bool CMicaps::Zoom(bool FZoom)
0830 //功能:缩放
0831 //参数:
0832 //FZoom     - 缩放标志  {true(放大), false(缩小)}
0833 {
0834     RECT    lpRect;
0835     HWND    hWndMicaps = FindMicapsWindow();
0836     int     x, y;
0837     ifGetWindowRecthWndMicaps, &lpRect ) )
0838         {
0839         x = lpRect.left + lpRect.right 2;
0840         y = lpRect.top  + lpRect.bottom 2;
0841         }
0842     return(Zoom(FZoom,Point(x,y)));
0843 }
0844 //---------------------------------------------------------------------------
0845 bool CMicaps::Zoom(bool FZoom, TPoint FPlace)
0846 //功能:缩放
0847 //参数:
0848 //FZoom     - 缩放标志  {true(放大), false(缩小)}
0849 //FPoint    - 窗口位置
0850 {
0851     bool    FMessage = false;
0852 try {
0853     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0854     HWND    hWndMicaps = FindMicapsWindow();
0855     ifhWndMicaps != NULL
0856         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0857         && SetForegroundWindow(hWndMicaps)
0858         )
0859         {
0860         ifFZoom ZoomStatus();//放大时需要将Micaps的缩放按钮设为按下状态
0861         ifFZoom )
0862             FMessage = PostMessagehWndMicaps, WM_LBUTTONDBLCLK, MK_LBUTTON,  MAKELONG(FPlace.x,FPlace.y) );
0863         else
0864             FMessage = PostMessagehWndMicaps, WM_RBUTTONDBLCLK, MK_RBUTTON,  MAKELONG(FPlace.x,FPlace.y) );
0865         }
0866     return(FMessage);
0867     }
0868 catch(...)
0869     {
0870     return(FMessage);
0871     }
0872 }
0873 //---------------------------------------------------------------------------
0874 bool CMicaps::Revert(void)
0875 //功能:还原
0876 {
0877     returnExplore(1) );
0878 }
0879 //---------------------------------------------------------------------------
0880 bool CMicaps::LongitudeLatitude(void)
0881 //功能:经纬度隐现
0882 {
0883     returnExplore(0) );
0884 }
0885 //---------------------------------------------------------------------------
0886 bool CMicaps::Print(void)
0887 //功能:打印Micaps主窗口
0888 {
0889     returnExplore(2) );
0890 }
0891 //---------------------------------------------------------------------------
0892 bool CMicaps::Background(int FBackgroundType)
0893 //功能:设置Micaps背景图类型
0894 //参数:
0895 //FBackgroundType   - 类型 {
0896 //    MICAPS_BACKGROUNG_TYPE_BBQ,
0897 //    MICAPS_BACKGROUNG_TYPE_LAMBERT,
0898 //    MICAPS_BACKGROUNG_TYPE_MECATOR,
0899 //    MICAPS_BACKGROUNG_TYPE_LINEAR}
0900 {
0901     AnsiString  FBackFileName = FMicapsDirectory;
0902     switchFBackgroundType )
0903         {
0904         case MICAPS_BACKGROUNG_TYPE_BBQ:
0905             FBackFileName = FMicapsDirectory + "Code//BBQMAPXY.dat";
0906             break;
0907         case MICAPS_BACKGROUNG_TYPE_LAMBERT:
0908             FBackFileName = FMicapsDirectory + "Code//LAMBERTM.dat";
0909             break;
0910         case MICAPS_BACKGROUNG_TYPE_MECATOR:
0911             FBackFileName = FMicapsDirectory + "Code//MECATORM.dat";
0912             break;
0913         case MICAPS_BACKGROUNG_TYPE_LINEAR:
0914             FBackFileName = FMicapsDirectory + "Code//LINEARMA.dat";
0915             break;
0916         default:
0917             FBackFileName = FMicapsDirectory + "Code//BBQMAPXY.dat";
0918             break;
0919         }
0920     returnFileExists(FBackFileName&& OpenFile(FBackFileName) );
0921 }
0922 //---------------------------------------------------------------------------
0923 bool CMicaps::Palette(int FPaletteIndex)
0924 //功能:调置Micaps调色板
0925 //参数:
0926 //FPaletteIndex - 调色板索引值 0~16 缺省为 0
0927 {
0928     bool    FMessage = IsMicapsRunning();
0929     if!FMessage return(FMessage);
0930     AnsiString  FPaletteFile;
0931     FPaletteFile = FMicapsDirectory + "ColorMap//ColorMap." + FormatFloat("000",FPaletteIndex);
0932     returnFileExists(FPaletteFile&& OpenFile(FPaletteFile) );
0933 }
0934 //---------------------------------------------------------------------------
0935 bool CMicaps::PrevTime(void)
0936 //功能:前翻
0937 {
0938     return(MenuFromId(MICAPS_MENU_PREVTIME));
0939 }
0940 //---------------------------------------------------------------------------
0941 bool CMicaps::NextTime(void)
0942 //功能:后翻
0943 {
0944     return(MenuFromId(MICAPS_MENU_NEXTTIME));
0945 }
0946 //---------------------------------------------------------------------------
0947 bool CMicaps::Animate(void)
0948 //功能:动画
0949 {
0950     return(MenuFromId(MICAPS_MENU_ANIMATE));
0951 }
0952 //---------------------------------------------------------------------------
0953 bool CMicaps::Tools(int FColIndex, int FRowIndex)
0954 //功能:针对图形检索窗口的操作
0955 //参数:
0956 //FColIndex - 列数
0957 //FRowIndex - 行数
0958 {
0959     return(Tools(EditTools(FColIndex,FRowIndex)));
0960 }
0961 //---------------------------------------------------------------------------
0962 bool CMicaps::Tools(TPoint FEditPoint)
0963 //功能:针对工具窗口的操作
0964 //参数说明:
0965 //FEditPoint   - 位置
0966 {
0967     bool    FMessage = false;
0968 try {
0969     if!IsMicapsRunning() )    return(FMessage);//Micaps未运行
0970     HWND    hWndMicaps = FindMicapsWindow();
0971     HWND    hWndMicapsEditTools = NULL;//工具窗口
0972     ifhWndMicaps != NULL
0973         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0974         && SetForegroundWindow(hWndMicaps)
0975         )
0976         {
0977         MenuFromId(MICAPS_MENU_EDITTOOL);
0978         hWndMicapsEditTools = FindWindow("EditClass","工具");
0979         ifhWndMicapsEditTools != NULL )
0980             {
0981             FMessage =
0982                 PostMessagehWndMicapsEditTools, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(FEditPoint.x,FEditPoint.y) )
0983              && PostMessagehWndMicapsEditTools, WM_LBUTTONUP,   MK_LBUTTON, MAKELONG(FEditPoint.x,FEditPoint.y) );
0984             }
0985         }
0986     return(FMessage);
0987     }
0988 catch(...)
0989     {
0990     return(FMessage);
0991     }
0992 }
0993 //---------------------------------------------------------------------------
0994 bool CMicaps::Transparency(void)
0995 //功能:清透明板
0996 {
0997     returnMenuFromId(MICAPS_MENU_TRANSPARENCY));
0998 }
0999 //---------------------------------------------------------------------------
1000 bool CMicaps::DialogTools(bool FEditToolsDlg)
1001 //功能:隐现工具对话框
1002 //参数:
1003 //FEditToolsDlg - 隐现标志 (true 为显示,false 为消隐)
1004 {
1005     bool    FMessage = false;
1006 try {
1007     ifIsMicapsRunning() )
1008         {
1009         ifFEditToolsDlg )
1010             FMessage = MenuFromId(MICAPS_MENU_EDITTOOL);
1011         else
1012             {
1013             HWND    hWndMicapsEditTools = FindWindow("EditClass","工具");
1014             ifhWndMicapsEditTools != NULL )
1015                 FMessage = PostMessagehWndMicapsEditTools, WM_CLOSE, 0);
1016             }
1017         }
1018     return(FMessage);
1019     }
1020 catch(...)
1021     {
1022     return(FMessage);
1023     }
1024 }
1025 //---------------------------------------------------------------------------
1026 bool CMicaps::DialogOption(bool FViewOptionDlg)
1027 //功能:隐现显示设置对话框
1028 //参数:
1029 //FViewOptionDlg - 隐现标志 (true 为显示,false 为消隐)
1030 {
1031     bool    FMessage = false;
1032 try {
1033     ifIsMicapsRunning() )
1034         {
1035         ifFViewOptionDlg )
1036             FMessage = MenuFromId(MICAPS_MENU_VIEWOPTION);
1037         else
1038             {
1039             HWND    hWndMicapsViewOption = FindWindow"#32770""显示设置" );
1040             ifhWndMicapsViewOption != NULL )
1041                 FMessage = PostMessagehWndMicapsViewOption, WM_CLOSE, 0);
1042             }
1043         }
1044     return(FMessage);
1045     }
1046 catch(...)
1047     {
1048     return(FMessage);
1049     }
1050 }
1051 //---------------------------------------------------------------------------
1052 bool CMicaps::PointEvent(POINTEVENT *FPointEvent, int FPointCount)
1053 //功能:在指定的窗口位置按下指定的鼠标键
1054 //参数:
1055 //FPointEvent - 包含鼠标操作信息(窗口)的结构地址 &FPointEvent
1056 //FPointCount - FPointEvent[]的总数
1057 {
1058     bool    FMessage = false;
1059     HWND    hWndMicaps = FindMicapsWindow();
1060     ifhWndMicaps == NULL )    return(false);
1061 try {
1062     forint i=0;i<FPointCount;i++ )
1063         {
1064         PostMessage(
1065             hWndMicaps,
1066             FPointEvent[i].Event ? WM_LBUTTONDOWN : WM_RBUTTONDOWN,
1067             FPointEvent[i].Event ? MK_LBUTTON : MK_RBUTTON,
1068             MAKELONG(FPointEvent[i].Place.x,FPointEvent[i].Place.y) );
1069         PostMessage(
1070             hWndMicaps,
1071             FPointEvent[i].Event ? WM_LBUTTONUP : WM_RBUTTONUP,
1072             FPointEvent[i].Event ? MK_LBUTTON : MK_RBUTTON,
1073             MAKELONG(FPointEvent[i].Place.x,FPointEvent[i].Place.y) );
1074         }
1075     FMessage = true;
1076     return(FMessage);
1077     }
1078 catch(...)
1079     {
1080     return(FMessage);
1081     }
1082 }
1083 //---------------------------------------------------------------------------
1084 bool CMicaps::PointEvent(FLOATPOINTEVENT *FFloatPointEvent, int FFloatPointCount)
1085 //功能:在指定的经纬度按下指定的鼠标键
1086 //参数:
1087 //FPointEvent - 包含鼠标操作信息(经纬度)的结构地址 &FPointEvent
1088 //FPointCount - FPointEvent[]的总数
1089 {
1090     bool    FMessage = false;
1091     HWND    hWndMicaps = FindMicapsWindow();
1092     ifhWndMicaps == NULL || !FCoordinateEnabled )    return(false);
1093 try {
1094     TPoint pp;
1095 //    CCoordinate
1096     forint i=0;i<FFloatPointCount;i++ )
1097         {
1098         pp = FCoordinate->WindowPlace(FFloatPointEvent[i].Place);
1099         PostMessage(
1100             hWndMicaps,
1101             FFloatPointEvent[i].Event ? WM_LBUTTONDOWN : WM_RBUTTONDOWN,
1102             FFloatPointEvent[i].Event ? MK_LBUTTON : MK_RBUTTON,
1103             MAKELONG(pp.x,pp.y) );
1104         PostMessage(
1105             hWndMicaps,
1106             FFloatPointEvent[i].Event ? WM_LBUTTONUP : WM_RBUTTONUP,
1107             FFloatPointEvent[i].Event ? MK_LBUTTON : MK_RBUTTON,
1108             MAKELONG(pp.x,pp.y) );
1109         }
1110     FMessage = true;
1111     return(FMessage);
1112     }
1113 catch(...)
1114     {
1115     return(FMessage);
1116     }
1117 }
1118 //---------------------------------------------------------------------------
1119 bool CMicaps::PointEvent(OBJECTEVENT *FObjectEvent, int FObjectEventCount)
1120 //功能:在指定的窗口位置按下指定的鼠标键
1121 //功能:
1122 //参数:
1123 //FObjectEvent      - 包含鼠标操作信息(键、事件、经、纬度)的结构地址
1124 //FObjectEventCount - FObjectEvent 的数据长度
1125 {
1126     bool    FMessage = false;
1127     UINT    FButton, FEvent;
1128     RECT lpRect;
1129     TPoint pp;
1130     HWND    hWndMicaps = FindMicapsWindow();
1131     ifhWndMicaps == NULL || !FCoordinateEnabled )    return(false);
1132 try {
1133     forint i=0;i<FObjectEventCount;i++ )
1134         {
1135         pp = FCoordinate->WindowPlace(FObjectEvent[i].Longitude,FObjectEvent[i].Latitude);
1136 //鼠标键
1137         ifFObjectEvent[i].Button == )
1138             FButton = MK_LBUTTON;
1139         else
1140             FButton = MK_RBUTTON;
1141 //事件
1142         ifFObjectEvent[i].Event  == )
1143             FEvent  = FObjectEvent[i].Button == ? WM_LBUTTONDOWN   : WM_RBUTTONDOWN;
1144         else ifFObjectEvent[i].Event  == )
1145             FEvent  = FObjectEvent[i].Button == ? WM_LBUTTONUP     : WM_RBUTTONUP;
1146         else ifFObjectEvent[i].Event  == )
1147             FEvent  = FObjectEvent[i].Button == ? WM_LBUTTONDBLCLK : WM_RBUTTONDBLCLK;
1148         else FEvent = FObjectEvent[i].Event;
1149         switchFObjectEvent[i].Event )
1150             {
1151             case MICAPS_CONTROL_CLICK://单击事件包含按下和弹起两个事件
1152                 PostMessage(
1153                     hWndMicaps,
1154                     FObjectEvent[i].Event ? WM_LBUTTONDOWN : WM_RBUTTONDOWN,
1155                     FObjectEvent[i].Button ? MK_LBUTTON : MK_RBUTTON,
1156                     MAKELONG(pp.x,pp.y) );
1157                 PostMessage(
1158                     hWndMicaps,
1159                     FObjectEvent[i].Event ? WM_LBUTTONDOWN : WM_RBUTTONDOWN,
1160                     FObjectEvent[i].Button ? MK_LBUTTON : MK_RBUTTON,
1161                     MAKELONG(pp.x,pp.y) );
1162                 break;
1163             default:
1164                 PostMessage(
1165                     hWndMicaps,
1166                     FEvent,
1167                     FButton,
1168                     MAKELONG(pp.x,pp.y) );
1169                 break;
1170             }
1171         }
1172     FMessage = true;
1173     return(FMessage);
1174     }
1175 catch(...)
1176     {
1177     return(FMessage);
1178     }
1179 }
1180 //---------------------------------------------------------------------------
1181 bool CMicaps::MicapsClientRect(LPRECT lpRect)
1182 //功能:获得Micaps窗口区域
1183 //参数:
1184 //lpRect - 指向Micaps窗口区域的RECT结构的指针
1185 {
1186     HWND    hWndMicaps = FindMicapsWindow();
1187     bool    bMessage = ::GetClientRecthWndMicaps, lpRect );
1188     return(bMessage);
1189 }
1190 //---------------------------------------------------------------------------
1191 bool CMicaps::MicapsWindowRect(LPRECT lpRect)
1192 //功能:获得Micaps窗口区域
1193 //参数:
1194 //lpRect - 指向Micaps窗口区域的RECT结构的指针
1195 {
1196     HWND    hWndMicaps = FindMicapsWindow();
1197     bool    bMessage = ::GetWindowRecthWndMicaps, lpRect );
1198     return(bMessage);
1199 }
1200 //---------------------------------------------------------------------------
1201 bool CMicaps::OperateFromFile(AnsiString FOperateFile)
1202 //功能:根据预定义的操作记录文件来执行Micaps操作
1203 //功能:
1204 //参数:
1205 //FOperateFile - 文件名
1206 {
1207     bool FMessage = false;
1208     if!FileExists(FOperateFile) )  return(FMessage);
1209     Sleep(1032);
1210     MICAPSEVENT me;
1211     OBJECTEVENT *oe;
1212 try {
1213     oe = new OBJECTEVENT[12];
1214     int iFileHandle = FileOpen(FOperateFile,fmOpenRead);
1215     int iFileRead   = -1;
1216     char    Symbol[33];
1217     ifiFileHandle != -)
1218         {
1219         iFileRead = FileRead(iFileHandle,(LPSTR)Symbol,32);//First
1220         Symbol[32'/0';
1221         }
1222     ifiFileHandle != -&& AnsiString(Symbol== "MicapsControl-LiuZeJun-CBuilder5" )
1223         {
1224         iFileRead = FileRead(iFileHandle,(LPSTR)&me,sizeof(MICAPSEVENT));//First
1225         while(  iFileRead == sizeof(MICAPSEVENT)
1226                 && me.Object != MICAPS_OBJECT_NULL
1227                 && me.Count > 0)
1228             {
1229             oe = new OBJECTEVENT[me.Count];
1230             forint i=0;i<me.Count;i++ )
1231                 iFileRead = FileRead(iFileHandle,(LPSTR)&oe[i], sizeof(OBJECTEVENT));
1232 
1233             FMessage = Operate(me, oe);
1234             iFileRead = FileRead(iFileHandle,(LPSTR)&me,sizeof(MICAPSEVENT));//Next
1235             }
1236         FileClose(iFileHandle);
1237         iFileHandle = -1;
1238         delete oe;
1239         }
1240     ifiFileHandle != -)
1241         FileClose(iFileHandle);
1242     return(FMessage);
1243     }
1244 catch(...)
1245     {
1246     return(FMessage);
1247     }
1248 }
1249 //---------------------------------------------------------------------------
1250 bool CMicaps::Operate(MICAPSEVENT FMicapsEvent, OBJECTEVENT *FObjectEvent)
1251 //功能:执行Micaps操作
1252 //参数:
1253 //FMicapsEvent - 包含要操纵的Micaps对象及次数的数据结构
1254 //FObjectEvent - 包含鼠标操作信息(键、事件、经、纬度)的结构地址
1255 {
1256     bool    FMessage = false;
1257     switchFMicapsEvent.Object )
1258         {
1259         case MICAPS_OBJECT_NULL:
1260             break;
1261         case MICAPS_OBJECT_MICAPS://Micaps主窗口
1262             Revert();//还原
1263             FMessage = PointEvent(FObjectEvent,FMicapsEvent.Count);
1264             break;
1265         case MICAPS_OBJECT_MENU://Micaps主菜单
1266             forint i=0;i<FMicapsEvent.Count;i++ )
1267                 FMessage = MenuFromId(FObjectEvent[i].Event);
1268             break;
1269         case MICAPS_OBJECT_TOOLS://Micaps工具窗口
1270             forint i=0;i<FMicapsEvent.Count;i++ )
1271                 {
1272                 ifFObjectEvent[i].Longitude == -|| FObjectEvent[i].Latitude == -)
1273                     FMessage = DialogTools(false);
1274                 else ifFObjectEvent[i].Longitude == -|| FObjectEvent[i].Latitude == -)
1275                     FMessage = DialogTools(true);
1276                 else
1277                     FMessage = Tools(
1278                         FObjectEvent[i].Longitude,
1279                         FObjectEvent[i].Latitude);
1280                 }
1281             break;
1282         case MICAPS_OBJECT_EXPLORE://Micaps检索窗口
1283             forint i=0;i<FMicapsEvent.Count;i++ )
1284                 FMessage = Explore(FObjectEvent[i].Latitude);
1285             break;
1286         case MICAPS_OBJECT_OPTION://Micaps显示设置窗口
1287             forint i=0;i<FMicapsEvent.Count;i++ )
1288                 {
1289                 ifFObjectEvent[i].Longitude == -|| FObjectEvent[i].Latitude == -)
1290                     FMessage = DialogOption(false);
1291                 else ifFObjectEvent[i].Longitude == -|| FObjectEvent[i].Latitude == -)
1292                     FMessage = DialogOption(true);
1293                 else
1294                     FMessage = Status(
1295                         FObjectEvent[i].Longitude,//First Item Index
1296                         FObjectEvent[i].Latitude,//Last Item Index
1297                         FObjectEvent[i].Event);
1298                 }
1299             break;
1300         default:
1301             break;
1302         }
1303     return(FMessage);
1304 }
1305 //---------------------------------------------------------------------------
1306 AnsiString CMicaps::GetOpenFileName(void)
1307 //功能:返回当前Micaps打开的文件名
1308 {
1309     return(FCurrentOpenFileName);
1310 }
1311 //---------------------------------------------------------------------------
1312 bool CMicaps::SetParentWindow(HWND hNewParentWindow)
1313 {
1314     ifhNewParentWindow != NULL )
1315         returnSetParentFindMicapsWindow(), hNewParentWindow != NULL );
1316     else
1317         returnfalse );
1318 }
1319 //---------------------------------------------------------------------------
1320 bool CMicaps::SetChildWindow(HWND hNewChildWindow)
1321 {
1322     ifhNewChildWindow != NULL )
1323         returnSetParenthNewChildWindow, FindMicapsWindow() ) != NULL );
1324     else
1325         returnfalse );
1326 }
1327 //---------------------------------------------------------------------------
1328 bool CMicaps::Show(void)
1329 {
1330     HWND    hWndMicaps = FindMicapsWindow();
1331     returnhWndMicaps != NULL
1332         && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
1333         && SetForegroundWindow(hWndMicaps) );
1334 }
1335 //---------------------------------------------------------------------------
1336 bool CMicaps::SaveMicapsImage(AnsiString ImageFileName)
1337 //功能:以Bitmap位图方式保存Micaps主窗口的图像信息 - 用于气象信息网站建设所需
1338 //
1339 //ImageFileName - 目标文件名
1340 //
1341 {
1342     HWND    hWndMicaps = FindMicapsWindow();
1343     ifhWndMicaps == NULL )    return(false);
1344     HWND    hWndMicapsTools = FindWindow("OperateClass","工具");
1345     ifhWndMicapsTools == NULL )   return(false);
1346     TRect   mrect;
1347     bool    move =
1348                     GetWindowRect(hWndMicapsTools,&mrect)
1349                 &&  MoveWindow(hWndMicapsTools,
1350                         -mrect.Right-1,mrect.Top,-mrect.Right-1+mrect.Width(),mrect.Height(),true);
1351     bool    ok = false;
1352 
1353     if(     hWndMicaps != NULL//主窗口
1354         &&  hWndMicapsTools != NULL//数据检索窗口
1355         &&  GetDC(hWndMicaps!= NULL//主窗口设备描述表
1356         &&  ShowWindow(hWndMicaps,SW_SHOWNORMAL)//显示主窗口
1357         &&  SetForegroundWindow(hWndMicaps)//将主窗口设置为前端显示
1358         &&  DialogTools(false)//隐藏工具窗口
1359         &&  DialogOption(false) )//隐藏显示设置窗口
1360         {
1361         HDC dc = GetDC(hWndMicaps);
1362         TRect    rect;
1363         Graphics::TBitmap   *bitmap = new Graphics::TBitmap();
1364         MicapsClientRect(&rect);
1365         bitmap->Width = rect.Width();
1366         bitmap->Height = rect.Height();
1367         UpdateWindow(hWndMicaps);
1368         bool ok1 = BitBlt(
1369             (HDC)bitmap->Canvas->Handle,    // handle to destination device context
1370             0,                              // x-coordinate of destination rectangle's upper-left corner
1371             0,                              // y-coordinate of destination rectangle's upper-left corner
1372             rect.Width(),                   // width of destination rectangle
1373             rect.Height(),                  // height of destination rectangle
1374             dc,                             // handle to source device context
1375             0,                              // x-coordinate of source rectangle's upper-left corner
1376             0,                              // y-coordinate of source rectangle's upper-left corner
1377             SRCCOPY                         // raster operation code
1378             );
1379         ifok1 )
1380             {
1381             bitmap->SaveToFile(ImageFileName);
1382             ok = ok1 && FileExists(ImageFileName);
1383             }
1384         delete bitmap;
1385         }
1386     ifmove )
1387         MoveWindow(hWndMicapsTools,mrect.Left,mrect.Top,mrect.Width(),mrect.Height(),true);
1388     return(ok);
1389 }
1390 //---------------------------------------------------------------------------
原创粉丝点击