模拟人工操作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 if( Enabled )
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 if( Enabled )
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 if( Enabled && 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 if( FMicapsDirectory[FMicapsDirectory.Length()] != '//' )
0115 FMicapsDirectory = FMicapsDirectory + "//";
0116 FMicapsExecuteFile = FMicapsDirectory + "Code//Micaps.exe";
0117 FMicapsParameter = FMicapsDirectory + "Code//Para1.dat";
0118 if( !FileExists(FMicapsExecuteFile) )
0119 {
0120 if( SelectDirectory("请选择 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 return( FMicapsDirectory );
0134 }
0135 //---------------------------------------------------------------------------
0136 AnsiString CMicaps::GetMicapsParameter(void)
0137 //功能:返回Micaps启动参数
0138 {
0139 return( FMicapsParameter );
0140 }
0141 //---------------------------------------------------------------------------
0142 bool CMicaps::SetMicapsParameter(AnsiString FMicapsParam)
0143 //功能:设置Micaps启动参数
0144 {
0145 bool FMessage = false;
0146 FParameterCorrect = false;
0147
0148 if( FileExists(FMicapsParam) )
0149 {
0150 FMicapsParameter = FMicapsParam;
0151 CDiamond19 *d19 = new CDiamond19(FMicapsParam);
0152 FParameterCorrect = d19->Enabled;
0153 if( d19->Enabled )
0154 {
0155 FStartData = d19->GetStartData();
0156 RECT lpRect;
0157 if( IsMicapsRunning() )
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 return( FMessage );
0172 }
0173 //---------------------------------------------------------------------------
0174 bool CMicaps::IsMicapsRunning(void)
0175 //功能:判断Micaps是否运行
0176 {
0177 return( FindMicapsWindow() != 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 if( hWndMicaps != 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 if( FExecuteType )//强制运行方式
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 if( hWndMicaps != 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 return( Execute(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 return( Execute(false) );
0248 }
0249 //---------------------------------------------------------------------------
0250 bool CMicaps::ForceExecute(void)
0251 //功能:运行Micaps(强制方式)
0252 {
0253 return( Execute(true) );//非运行Micaps
0254 }
0255 //---------------------------------------------------------------------------
0256 bool CMicaps::ForceExecute(AnsiString FMicapsParam)
0257 //功能:带参数运行Micaps(强制方式)
0258 //参数:
0259 //FMicapsParam - 指向一个文件名(diamond 19),该文件包含Micaps的启动设置
0260 {
0261 if( FileExists(FMicapsParam.Trim()) )
0262 FMicapsParameter = FMicapsParam.Trim();
0263 return( Execute(true) );
0264 }
0265 //---------------------------------------------------------------------------
0266 bool CMicaps::Close(void)//关闭 Micaps
0267 {
0268 bool FMessage = false;
0269 try {
0270 HWND hWndMicaps = FindMicapsWindow();
0271 if( hWndMicaps != NULL )
0272 {
0273 FMessage = PostMessage( hWndMicaps, WM_CLOSE, 0, 0 );
0274 HWND hWndMicapsClose = NULL;
0275 int iSleepCount = 0;
0276 while( hWndMicapsClose == NULL && iSleepCount < 12 )
0277 {
0278 Sleep(132);//延时
0279 hWndMicapsClose = FindWindow("#32770","退出Micaps");
0280 iSleepCount ++;
0281 }
0282 if( ( FParameterCorrect && FStartData.WindowClose == 1 )
0283 || hWndMicapsClose != NULL )
0284 {
0285 SendDlgItemMessage(
0286 hWndMicapsClose, MICAPS_DLG_CLOSE_OKBUTTON, BM_CLICK, 0, 0);
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 if( FOpenFileName.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 if( hWndMicaps != NULL
0314 // && ShowWindow(hWndMicaps,SW_SHOWNORMAL)//显示Micaps主窗口
0315 // && SetForegroundWindow(hWndMicaps) //设置Micaps为当前活动窗口
0316 )
0317 {
0318 MenuFromId(MICAPS_MENU_FILE);
0319 while( hWndMicapsOpenFile == NULL && iSleepCount < 12 )
0320 {//找 打开新文件 窗口
0321 Sleep(512);
0322 hWndMicapsOpenFile = FindWindow( "#32770", "打开新文件" );
0323 iSleepCount++;
0324 }
0325 if(hWndMicapsOpenFile!=NULL)// && GetParent(hWndMicapsOpenFile) == hWndMicaps )
0326 {
0327 //清除 文件编辑框 文本
0328 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_CLEAR, 0, 0);
0329 FCurrentOpenFileName = FOpenFileName;
0330 //将文件名放入剪切板
0331 Clipboard()->SetTextBuf(FOpenFileName.c_str());
0332 //从剪切板粘贴文本
0333 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_PASTE, 0, 0);
0334 // Application->MainForm->Caption = FOpenFileName;
0335
0336 //按 打开新文件 窗口的 确定 按钮
0337 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_OKBUTTON, BM_CLICK, 0, 0);
0338 FMessage = true;
0339 }
0340 //判断 打开新文件 窗口是否仍未关闭
0341 iSleepCount = 0;
0342 hWndMicapsOpenFile = NULL;
0343 while( hWndMicapsOpenFile == NULL && iSleepCount < 6 )
0344 {//找 打开新文件 窗口
0345 Sleep(132);
0346 hWndMicapsOpenFile = FindWindow( "#32770", "打开新文件" );
0347 iSleepCount++;
0348 }
0349 if( hWndMicapsOpenFile != NULL )
0350 {//按 打开新文件 窗口的 取消 按钮
0351 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_CANCELBUTTON, BM_CLICK, 0, 0);
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 return( OpenFiles(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 if( StringList->Strings[i].Pos(FOrStr) > 0 )
0395 {
0396 ExtractString(StringList->Strings[i],FOrStr,false,ChildStringList);
0397 for(int j=0;j<ChildStringList->Count;j++ )
0398 if( ChildStringList->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 if( FileExists(ChildStringList->Strings[j]) )
0404 {
0405 StringList->Strings[i] = ChildStringList->Strings[j];
0406 j = ChildStringList->Count;
0407 }
0408 }
0409 else if( StringList->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 if( StringList->Strings[i].Trim() == ""
0418 || !FileExists(StringList->Strings[i].Trim()) )
0419 StringList->Delete(i);
0420 TMicapsOpenFileList *mofl = new TMicapsOpenFileList(
0421 GetMicapsDirectory()+"Code//File.LST" );
0422 if( mofl->Enabled )
0423 {
0424 bool *bFile = new bool[mofl->GetCount()+1];
0425 mofl->CurrentOpened(StringList,bFile);
0426 for( int 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 if( StringList->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 if( FileExists(TempFSaveFileName) )
0456 DeleteFile(TempFSaveFileName.c_str());
0457 HWND hWndMicaps = FindMicapsWindow();
0458 if( hWndMicaps == NULL ) return(false);
0459 FMessage = Explore(3);
0460 if( !FMessage ) return(FMessage);
0461 int iSleepCount = 0;
0462 HWND hWndMicapsSaveFile = NULL;
0463 while( hWndMicapsSaveFile == NULL && iSleepCount < 12 )
0464 {
0465 Sleep(132);
0466 hWndMicapsSaveFile = FindWindow( "#32770", "保存文件" );
0467 iSleepCount++;
0468 }
0469 if( hWndMicapsSaveFile != 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 0, 0);
0478 SendDlgItemMessage(
0479 hWndMicapsSaveFile,
0480 MICAPS_DLG_SAVE_EDITCTRL,
0481 WM_PASTE,
0482 0, 0);
0483 SendDlgItemMessage(
0484 hWndMicapsSaveFile,
0485 MICAPS_DLG_SAVE_OKBUTTON,
0486 BM_CLICK,
0487 0, 0 );
0488 FMessage = true;
0489 }
0490 if( FileExists(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 if( FFileIndex < -2 ) FFileIndex == -2;
0515 bool FMessage = false;
0516 try {
0517 if( !IsMicapsRunning() ) return(FMessage);//Micaps未运行
0518 HWND hWndMicaps = FindMicapsWindow();
0519 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0520 DialogOption(true);
0521 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0522 int iSleepCount = 0;
0523 if( hWndMicaps != NULL
0524 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0525 && SetForegroundWindow(hWndMicaps)
0526 )
0527 {
0528 iSleepCount = 0;
0529 while( hWndMicapsFileStatus == 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, 0, 0)) > 0
0544 )
0545 {
0546 SendDlgItemMessage(//不选所有项
0547 hWndMicapsFileStatus,
0548 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0549 LB_SELITEMRANGE,
0550 false,
0551 MAKELONG(0,FItemCount-1));
0552 switch( FFileIndex )
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 if( FItemCount > 1 )
0564 SendDlgItemMessage(//选定项目
0565 hWndMicapsFileStatus,
0566 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0567 LB_SELITEMRANGE,
0568 true,
0569 MAKELONG(1,FItemCount-1));
0570 break;
0571 default:
0572 if( FFileIndex < FItemCount )//设置指定项
0573 SendDlgItemMessage(
0574 hWndMicapsFileStatus,
0575 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0576 LB_SETSEL,
0577 true,
0578 FFileIndex);
0579 break;
0580 }//siwtch
0581 if( SendDlgItemMessage(//已选择有项目
0582 hWndMicapsFileStatus,
0583 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0584 LB_GETSELCOUNT,
0585 0,
0586 0) > 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 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0619 DialogOption(true);
0620 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0621 int iSleepCount = 0;
0622 if( hWndMicaps != NULL
0623 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0624 && SetForegroundWindow(hWndMicaps)
0625 )
0626 {
0627 iSleepCount = 0;
0628 while( hWndMicapsFileStatus == 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, 0, 0)) > 0
0643 )
0644 {
0645 if( FFileFirst < 0 || FFileLast < 0 )
0646 {//仅设置文件状态
0647 if( SendDlgItemMessage(
0648 hWndMicapsFileStatus,
0649 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0650 LB_GETSELCOUNT,
0651 0,
0652 0) > 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 if( FFileFirst == 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 if( FFileFirst > FItemCount - 1 )
0675 FFileFirst = FItemCount - 1;
0676 if( FFileLast > FItemCount - 1 )
0677 FFileLast = FItemCount - 1;
0678 if( FFileFirst > 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 if( SendDlgItemMessage(
0691 hWndMicapsFileStatus,
0692 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0693 LB_GETSELCOUNT,
0694 0,
0695 0) > 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 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0729 DialogOption(true);
0730 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0731 int iSleepCount = 0;
0732 if( hWndMicaps != NULL
0733 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0734 && SetForegroundWindow(hWndMicaps)
0735 )
0736 {
0737 iSleepCount = 0;
0738 while( hWndMicapsFileStatus == NULL && iSleepCount < 12 )
0739 {
0740 Sleep(132);
0741 hWndMicapsFileStatus = FindWindow( "#32770", "显示设置" );
0742 iSleepCount++;
0743 }
0744 int FItemCount = 0;
0745 if( hWndMicapsFileStatus != 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, 0, 0)) > 0
0753 )
0754 {
0755 SendDlgItemMessage(//取消所有项目的选择状态
0756 hWndMicapsFileStatus,
0757 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0758 LB_SELITEMRANGE,
0759 false,
0760 MAKELONG(0,FItemCount-1));
0761 for( int i=0;i<FItemCount;i++ )
0762 if( i<FFileCount )
0763 SendDlgItemMessage(//选择指定项
0764 hWndMicapsFileStatus,
0765 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0766 LB_SETSEL,
0767 FFile[i],
0768 i);
0769 if( SendDlgItemMessage(
0770 hWndMicapsFileStatus,
0771 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0772 LB_GETSELCOUNT,
0773 0,
0774 0) > 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 if( hWndMicaps != NULL
0806 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0807 && SetForegroundWindow(hWndMicaps)
0808 )
0809 {
0810 hWndMicapsTools = FindWindow("OperateClass","工具");
0811 FMessage = hWndMicapsTools != NULL
0812 && PostMessage( hWndMicapsTools, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(FToolsPoint.x,FToolsPoint.y) )
0813 && PostMessage( hWndMicapsTools, 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 return( Explore(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 if( GetWindowRect( hWndMicaps, &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 if( hWndMicaps != NULL
0856 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0857 && SetForegroundWindow(hWndMicaps)
0858 )
0859 {
0860 if( FZoom ) ZoomStatus();//放大时需要将Micaps的缩放按钮设为按下状态
0861 if( FZoom )
0862 FMessage = PostMessage( hWndMicaps, WM_LBUTTONDBLCLK, MK_LBUTTON, MAKELONG(FPlace.x,FPlace.y) );
0863 else
0864 FMessage = PostMessage( hWndMicaps, 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 return( Explore(1) );
0878 }
0879 //---------------------------------------------------------------------------
0880 bool CMicaps::LongitudeLatitude(void)
0881 //功能:经纬度隐现
0882 {
0883 return( Explore(0) );
0884 }
0885 //---------------------------------------------------------------------------
0886 bool CMicaps::Print(void)
0887 //功能:打印Micaps主窗口
0888 {
0889 return( Explore(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 switch( FBackgroundType )
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 return( FileExists(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 return( FileExists(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 if( hWndMicaps != NULL
0973 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0974 && SetForegroundWindow(hWndMicaps)
0975 )
0976 {
0977 MenuFromId(MICAPS_MENU_EDITTOOL);
0978 hWndMicapsEditTools = FindWindow("EditClass","工具");
0979 if( hWndMicapsEditTools != NULL )
0980 {
0981 FMessage =
0982 PostMessage( hWndMicapsEditTools, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(FEditPoint.x,FEditPoint.y) )
0983 && PostMessage( hWndMicapsEditTools, 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 return( MenuFromId(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 if( IsMicapsRunning() )
1008 {
1009 if( FEditToolsDlg )
1010 FMessage = MenuFromId(MICAPS_MENU_EDITTOOL);
1011 else
1012 {
1013 HWND hWndMicapsEditTools = FindWindow("EditClass","工具");
1014 if( hWndMicapsEditTools != NULL )
1015 FMessage = PostMessage( hWndMicapsEditTools, WM_CLOSE, 0, 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 if( IsMicapsRunning() )
1034 {
1035 if( FViewOptionDlg )
1036 FMessage = MenuFromId(MICAPS_MENU_VIEWOPTION);
1037 else
1038 {
1039 HWND hWndMicapsViewOption = FindWindow( "#32770", "显示设置" );
1040 if( hWndMicapsViewOption != NULL )
1041 FMessage = PostMessage( hWndMicapsViewOption, WM_CLOSE, 0, 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 if( hWndMicaps == NULL ) return(false);
1061 try {
1062 for( int 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 if( hWndMicaps == NULL || !FCoordinateEnabled ) return(false);
1093 try {
1094 TPoint pp;
1095 // CCoordinate
1096 for( int 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 if( hWndMicaps == NULL || !FCoordinateEnabled ) return(false);
1132 try {
1133 for( int i=0;i<FObjectEventCount;i++ )
1134 {
1135 pp = FCoordinate->WindowPlace(FObjectEvent[i].Longitude,FObjectEvent[i].Latitude);
1136 //鼠标键
1137 if( FObjectEvent[i].Button == 0 )
1138 FButton = MK_LBUTTON;
1139 else
1140 FButton = MK_RBUTTON;
1141 //事件
1142 if( FObjectEvent[i].Event == 0 )
1143 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONDOWN : WM_RBUTTONDOWN;
1144 else if( FObjectEvent[i].Event == 1 )
1145 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONUP : WM_RBUTTONUP;
1146 else if( FObjectEvent[i].Event == 3 )
1147 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONDBLCLK : WM_RBUTTONDBLCLK;
1148 else FEvent = FObjectEvent[i].Event;
1149 switch( FObjectEvent[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 = ::GetClientRect( hWndMicaps, 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 = ::GetWindowRect( hWndMicaps, 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 if( iFileHandle != -1 )
1218 {
1219 iFileRead = FileRead(iFileHandle,(LPSTR)Symbol,32);//First
1220 Symbol[32] = '/0';
1221 }
1222 if( iFileHandle != -1 && 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 for( int 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 if( iFileHandle != -1 )
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 switch( FMicapsEvent.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 for( int i=0;i<FMicapsEvent.Count;i++ )
1267 FMessage = MenuFromId(FObjectEvent[i].Event);
1268 break;
1269 case MICAPS_OBJECT_TOOLS://Micaps工具窗口
1270 for( int i=0;i<FMicapsEvent.Count;i++ )
1271 {
1272 if( FObjectEvent[i].Longitude == -1 || FObjectEvent[i].Latitude == -1 )
1273 FMessage = DialogTools(false);
1274 else if( FObjectEvent[i].Longitude == -2 || FObjectEvent[i].Latitude == -2 )
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 for( int i=0;i<FMicapsEvent.Count;i++ )
1284 FMessage = Explore(FObjectEvent[i].Latitude);
1285 break;
1286 case MICAPS_OBJECT_OPTION://Micaps显示设置窗口
1287 for( int i=0;i<FMicapsEvent.Count;i++ )
1288 {
1289 if( FObjectEvent[i].Longitude == -3 || FObjectEvent[i].Latitude == -3 )
1290 FMessage = DialogOption(false);
1291 else if( FObjectEvent[i].Longitude == -4 || FObjectEvent[i].Latitude == -4 )
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 if( hNewParentWindow != NULL )
1315 return( SetParent( FindMicapsWindow(), hNewParentWindow ) != NULL );
1316 else
1317 return( false );
1318 }
1319 //---------------------------------------------------------------------------
1320 bool CMicaps::SetChildWindow(HWND hNewChildWindow)
1321 {
1322 if( hNewChildWindow != NULL )
1323 return( SetParent( hNewChildWindow, FindMicapsWindow() ) != NULL );
1324 else
1325 return( false );
1326 }
1327 //---------------------------------------------------------------------------
1328 bool CMicaps::Show(void)
1329 {
1330 HWND hWndMicaps = FindMicapsWindow();
1331 return( hWndMicaps != 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 if( hWndMicaps == NULL ) return(false);
1344 HWND hWndMicapsTools = FindWindow("OperateClass","工具");
1345 if( hWndMicapsTools == 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 if( ok1 )
1380 {
1381 bitmap->SaveToFile(ImageFileName);
1382 ok = ok1 && FileExists(ImageFileName);
1383 }
1384 delete bitmap;
1385 }
1386 if( move )
1387 MoveWindow(hWndMicapsTools,mrect.Left,mrect.Top,mrect.Width(),mrect.Height(),true);
1388 return(ok);
1389 }
1390 //---------------------------------------------------------------------------
CMicaps.cpp
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 if( Enabled )
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 if( Enabled )
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 if( Enabled && 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 if( FMicapsDirectory[FMicapsDirectory.Length()] != '//' )
0115 FMicapsDirectory = FMicapsDirectory + "//";
0116 FMicapsExecuteFile = FMicapsDirectory + "Code//Micaps.exe";
0117 FMicapsParameter = FMicapsDirectory + "Code//Para1.dat";
0118 if( !FileExists(FMicapsExecuteFile) )
0119 {
0120 if( SelectDirectory("请选择 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 return( FMicapsDirectory );
0134 }
0135 //---------------------------------------------------------------------------
0136 AnsiString CMicaps::GetMicapsParameter(void)
0137 //功能:返回Micaps启动参数
0138 {
0139 return( FMicapsParameter );
0140 }
0141 //---------------------------------------------------------------------------
0142 bool CMicaps::SetMicapsParameter(AnsiString FMicapsParam)
0143 //功能:设置Micaps启动参数
0144 {
0145 bool FMessage = false;
0146 FParameterCorrect = false;
0147
0148 if( FileExists(FMicapsParam) )
0149 {
0150 FMicapsParameter = FMicapsParam;
0151 CDiamond19 *d19 = new CDiamond19(FMicapsParam);
0152 FParameterCorrect = d19->Enabled;
0153 if( d19->Enabled )
0154 {
0155 FStartData = d19->GetStartData();
0156 RECT lpRect;
0157 if( IsMicapsRunning() )
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 return( FMessage );
0172 }
0173 //---------------------------------------------------------------------------
0174 bool CMicaps::IsMicapsRunning(void)
0175 //功能:判断Micaps是否运行
0176 {
0177 return( FindMicapsWindow() != 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 if( hWndMicaps != 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 if( FExecuteType )//强制运行方式
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 if( hWndMicaps != 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 return( Execute(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 return( Execute(false) );
0248 }
0249 //---------------------------------------------------------------------------
0250 bool CMicaps::ForceExecute(void)
0251 //功能:运行Micaps(强制方式)
0252 {
0253 return( Execute(true) );//非运行Micaps
0254 }
0255 //---------------------------------------------------------------------------
0256 bool CMicaps::ForceExecute(AnsiString FMicapsParam)
0257 //功能:带参数运行Micaps(强制方式)
0258 //参数:
0259 //FMicapsParam - 指向一个文件名(diamond 19),该文件包含Micaps的启动设置
0260 {
0261 if( FileExists(FMicapsParam.Trim()) )
0262 FMicapsParameter = FMicapsParam.Trim();
0263 return( Execute(true) );
0264 }
0265 //---------------------------------------------------------------------------
0266 bool CMicaps::Close(void)//关闭 Micaps
0267 {
0268 bool FMessage = false;
0269 try {
0270 HWND hWndMicaps = FindMicapsWindow();
0271 if( hWndMicaps != NULL )
0272 {
0273 FMessage = PostMessage( hWndMicaps, WM_CLOSE, 0, 0 );
0274 HWND hWndMicapsClose = NULL;
0275 int iSleepCount = 0;
0276 while( hWndMicapsClose == NULL && iSleepCount < 12 )
0277 {
0278 Sleep(132);//延时
0279 hWndMicapsClose = FindWindow("#32770","退出Micaps");
0280 iSleepCount ++;
0281 }
0282 if( ( FParameterCorrect && FStartData.WindowClose == 1 )
0283 || hWndMicapsClose != NULL )
0284 {
0285 SendDlgItemMessage(
0286 hWndMicapsClose, MICAPS_DLG_CLOSE_OKBUTTON, BM_CLICK, 0, 0);
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 if( FOpenFileName.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 if( hWndMicaps != NULL
0314 // && ShowWindow(hWndMicaps,SW_SHOWNORMAL)//显示Micaps主窗口
0315 // && SetForegroundWindow(hWndMicaps) //设置Micaps为当前活动窗口
0316 )
0317 {
0318 MenuFromId(MICAPS_MENU_FILE);
0319 while( hWndMicapsOpenFile == NULL && iSleepCount < 12 )
0320 {//找 打开新文件 窗口
0321 Sleep(512);
0322 hWndMicapsOpenFile = FindWindow( "#32770", "打开新文件" );
0323 iSleepCount++;
0324 }
0325 if(hWndMicapsOpenFile!=NULL)// && GetParent(hWndMicapsOpenFile) == hWndMicaps )
0326 {
0327 //清除 文件编辑框 文本
0328 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_CLEAR, 0, 0);
0329 FCurrentOpenFileName = FOpenFileName;
0330 //将文件名放入剪切板
0331 Clipboard()->SetTextBuf(FOpenFileName.c_str());
0332 //从剪切板粘贴文本
0333 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_EDITCTRL, WM_PASTE, 0, 0);
0334 // Application->MainForm->Caption = FOpenFileName;
0335
0336 //按 打开新文件 窗口的 确定 按钮
0337 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_OKBUTTON, BM_CLICK, 0, 0);
0338 FMessage = true;
0339 }
0340 //判断 打开新文件 窗口是否仍未关闭
0341 iSleepCount = 0;
0342 hWndMicapsOpenFile = NULL;
0343 while( hWndMicapsOpenFile == NULL && iSleepCount < 6 )
0344 {//找 打开新文件 窗口
0345 Sleep(132);
0346 hWndMicapsOpenFile = FindWindow( "#32770", "打开新文件" );
0347 iSleepCount++;
0348 }
0349 if( hWndMicapsOpenFile != NULL )
0350 {//按 打开新文件 窗口的 取消 按钮
0351 SendDlgItemMessage( hWndMicapsOpenFile, MICAPS_DLG_OPEN_CANCELBUTTON, BM_CLICK, 0, 0);
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 return( OpenFiles(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 if( StringList->Strings[i].Pos(FOrStr) > 0 )
0395 {
0396 ExtractString(StringList->Strings[i],FOrStr,false,ChildStringList);
0397 for(int j=0;j<ChildStringList->Count;j++ )
0398 if( ChildStringList->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 if( FileExists(ChildStringList->Strings[j]) )
0404 {
0405 StringList->Strings[i] = ChildStringList->Strings[j];
0406 j = ChildStringList->Count;
0407 }
0408 }
0409 else if( StringList->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 if( StringList->Strings[i].Trim() == ""
0418 || !FileExists(StringList->Strings[i].Trim()) )
0419 StringList->Delete(i);
0420 TMicapsOpenFileList *mofl = new TMicapsOpenFileList(
0421 GetMicapsDirectory()+"Code//File.LST" );
0422 if( mofl->Enabled )
0423 {
0424 bool *bFile = new bool[mofl->GetCount()+1];
0425 mofl->CurrentOpened(StringList,bFile);
0426 for( int 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 if( StringList->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 if( FileExists(TempFSaveFileName) )
0456 DeleteFile(TempFSaveFileName.c_str());
0457 HWND hWndMicaps = FindMicapsWindow();
0458 if( hWndMicaps == NULL ) return(false);
0459 FMessage = Explore(3);
0460 if( !FMessage ) return(FMessage);
0461 int iSleepCount = 0;
0462 HWND hWndMicapsSaveFile = NULL;
0463 while( hWndMicapsSaveFile == NULL && iSleepCount < 12 )
0464 {
0465 Sleep(132);
0466 hWndMicapsSaveFile = FindWindow( "#32770", "保存文件" );
0467 iSleepCount++;
0468 }
0469 if( hWndMicapsSaveFile != 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 0, 0);
0478 SendDlgItemMessage(
0479 hWndMicapsSaveFile,
0480 MICAPS_DLG_SAVE_EDITCTRL,
0481 WM_PASTE,
0482 0, 0);
0483 SendDlgItemMessage(
0484 hWndMicapsSaveFile,
0485 MICAPS_DLG_SAVE_OKBUTTON,
0486 BM_CLICK,
0487 0, 0 );
0488 FMessage = true;
0489 }
0490 if( FileExists(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 if( FFileIndex < -2 ) FFileIndex == -2;
0515 bool FMessage = false;
0516 try {
0517 if( !IsMicapsRunning() ) return(FMessage);//Micaps未运行
0518 HWND hWndMicaps = FindMicapsWindow();
0519 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0520 DialogOption(true);
0521 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0522 int iSleepCount = 0;
0523 if( hWndMicaps != NULL
0524 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0525 && SetForegroundWindow(hWndMicaps)
0526 )
0527 {
0528 iSleepCount = 0;
0529 while( hWndMicapsFileStatus == 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, 0, 0)) > 0
0544 )
0545 {
0546 SendDlgItemMessage(//不选所有项
0547 hWndMicapsFileStatus,
0548 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0549 LB_SELITEMRANGE,
0550 false,
0551 MAKELONG(0,FItemCount-1));
0552 switch( FFileIndex )
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 if( FItemCount > 1 )
0564 SendDlgItemMessage(//选定项目
0565 hWndMicapsFileStatus,
0566 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0567 LB_SELITEMRANGE,
0568 true,
0569 MAKELONG(1,FItemCount-1));
0570 break;
0571 default:
0572 if( FFileIndex < FItemCount )//设置指定项
0573 SendDlgItemMessage(
0574 hWndMicapsFileStatus,
0575 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0576 LB_SETSEL,
0577 true,
0578 FFileIndex);
0579 break;
0580 }//siwtch
0581 if( SendDlgItemMessage(//已选择有项目
0582 hWndMicapsFileStatus,
0583 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0584 LB_GETSELCOUNT,
0585 0,
0586 0) > 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 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0619 DialogOption(true);
0620 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0621 int iSleepCount = 0;
0622 if( hWndMicaps != NULL
0623 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0624 && SetForegroundWindow(hWndMicaps)
0625 )
0626 {
0627 iSleepCount = 0;
0628 while( hWndMicapsFileStatus == 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, 0, 0)) > 0
0643 )
0644 {
0645 if( FFileFirst < 0 || FFileLast < 0 )
0646 {//仅设置文件状态
0647 if( SendDlgItemMessage(
0648 hWndMicapsFileStatus,
0649 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0650 LB_GETSELCOUNT,
0651 0,
0652 0) > 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 if( FFileFirst == 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 if( FFileFirst > FItemCount - 1 )
0675 FFileFirst = FItemCount - 1;
0676 if( FFileLast > FItemCount - 1 )
0677 FFileLast = FItemCount - 1;
0678 if( FFileFirst > 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 if( SendDlgItemMessage(
0691 hWndMicapsFileStatus,
0692 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0693 LB_GETSELCOUNT,
0694 0,
0695 0) > 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 if( hWndMicaps == NULL ) return(FMessage);//无法定位Micaps窗口
0729 DialogOption(true);
0730 HWND hWndMicapsFileStatus = NULL;//Micaps的显示设置对话框
0731 int iSleepCount = 0;
0732 if( hWndMicaps != NULL
0733 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0734 && SetForegroundWindow(hWndMicaps)
0735 )
0736 {
0737 iSleepCount = 0;
0738 while( hWndMicapsFileStatus == NULL && iSleepCount < 12 )
0739 {
0740 Sleep(132);
0741 hWndMicapsFileStatus = FindWindow( "#32770", "显示设置" );
0742 iSleepCount++;
0743 }
0744 int FItemCount = 0;
0745 if( hWndMicapsFileStatus != 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, 0, 0)) > 0
0753 )
0754 {
0755 SendDlgItemMessage(//取消所有项目的选择状态
0756 hWndMicapsFileStatus,
0757 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0758 LB_SELITEMRANGE,
0759 false,
0760 MAKELONG(0,FItemCount-1));
0761 for( int i=0;i<FItemCount;i++ )
0762 if( i<FFileCount )
0763 SendDlgItemMessage(//选择指定项
0764 hWndMicapsFileStatus,
0765 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0766 LB_SETSEL,
0767 FFile[i],
0768 i);
0769 if( SendDlgItemMessage(
0770 hWndMicapsFileStatus,
0771 MICAPS_DLG_VIEWOPTION_LISTBOXCTRL,
0772 LB_GETSELCOUNT,
0773 0,
0774 0) > 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 if( hWndMicaps != NULL
0806 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0807 && SetForegroundWindow(hWndMicaps)
0808 )
0809 {
0810 hWndMicapsTools = FindWindow("OperateClass","工具");
0811 FMessage = hWndMicapsTools != NULL
0812 && PostMessage( hWndMicapsTools, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(FToolsPoint.x,FToolsPoint.y) )
0813 && PostMessage( hWndMicapsTools, 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 return( Explore(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 if( GetWindowRect( hWndMicaps, &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 if( hWndMicaps != NULL
0856 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0857 && SetForegroundWindow(hWndMicaps)
0858 )
0859 {
0860 if( FZoom ) ZoomStatus();//放大时需要将Micaps的缩放按钮设为按下状态
0861 if( FZoom )
0862 FMessage = PostMessage( hWndMicaps, WM_LBUTTONDBLCLK, MK_LBUTTON, MAKELONG(FPlace.x,FPlace.y) );
0863 else
0864 FMessage = PostMessage( hWndMicaps, 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 return( Explore(1) );
0878 }
0879 //---------------------------------------------------------------------------
0880 bool CMicaps::LongitudeLatitude(void)
0881 //功能:经纬度隐现
0882 {
0883 return( Explore(0) );
0884 }
0885 //---------------------------------------------------------------------------
0886 bool CMicaps::Print(void)
0887 //功能:打印Micaps主窗口
0888 {
0889 return( Explore(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 switch( FBackgroundType )
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 return( FileExists(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 return( FileExists(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 if( hWndMicaps != NULL
0973 && ShowWindow(hWndMicaps,SW_SHOWNORMAL)
0974 && SetForegroundWindow(hWndMicaps)
0975 )
0976 {
0977 MenuFromId(MICAPS_MENU_EDITTOOL);
0978 hWndMicapsEditTools = FindWindow("EditClass","工具");
0979 if( hWndMicapsEditTools != NULL )
0980 {
0981 FMessage =
0982 PostMessage( hWndMicapsEditTools, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(FEditPoint.x,FEditPoint.y) )
0983 && PostMessage( hWndMicapsEditTools, 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 return( MenuFromId(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 if( IsMicapsRunning() )
1008 {
1009 if( FEditToolsDlg )
1010 FMessage = MenuFromId(MICAPS_MENU_EDITTOOL);
1011 else
1012 {
1013 HWND hWndMicapsEditTools = FindWindow("EditClass","工具");
1014 if( hWndMicapsEditTools != NULL )
1015 FMessage = PostMessage( hWndMicapsEditTools, WM_CLOSE, 0, 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 if( IsMicapsRunning() )
1034 {
1035 if( FViewOptionDlg )
1036 FMessage = MenuFromId(MICAPS_MENU_VIEWOPTION);
1037 else
1038 {
1039 HWND hWndMicapsViewOption = FindWindow( "#32770", "显示设置" );
1040 if( hWndMicapsViewOption != NULL )
1041 FMessage = PostMessage( hWndMicapsViewOption, WM_CLOSE, 0, 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 if( hWndMicaps == NULL ) return(false);
1061 try {
1062 for( int 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 if( hWndMicaps == NULL || !FCoordinateEnabled ) return(false);
1093 try {
1094 TPoint pp;
1095 // CCoordinate
1096 for( int 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 if( hWndMicaps == NULL || !FCoordinateEnabled ) return(false);
1132 try {
1133 for( int i=0;i<FObjectEventCount;i++ )
1134 {
1135 pp = FCoordinate->WindowPlace(FObjectEvent[i].Longitude,FObjectEvent[i].Latitude);
1136 //鼠标键
1137 if( FObjectEvent[i].Button == 0 )
1138 FButton = MK_LBUTTON;
1139 else
1140 FButton = MK_RBUTTON;
1141 //事件
1142 if( FObjectEvent[i].Event == 0 )
1143 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONDOWN : WM_RBUTTONDOWN;
1144 else if( FObjectEvent[i].Event == 1 )
1145 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONUP : WM_RBUTTONUP;
1146 else if( FObjectEvent[i].Event == 3 )
1147 FEvent = FObjectEvent[i].Button == 0 ? WM_LBUTTONDBLCLK : WM_RBUTTONDBLCLK;
1148 else FEvent = FObjectEvent[i].Event;
1149 switch( FObjectEvent[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 = ::GetClientRect( hWndMicaps, 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 = ::GetWindowRect( hWndMicaps, 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 if( iFileHandle != -1 )
1218 {
1219 iFileRead = FileRead(iFileHandle,(LPSTR)Symbol,32);//First
1220 Symbol[32] = '/0';
1221 }
1222 if( iFileHandle != -1 && 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 for( int 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 if( iFileHandle != -1 )
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 switch( FMicapsEvent.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 for( int i=0;i<FMicapsEvent.Count;i++ )
1267 FMessage = MenuFromId(FObjectEvent[i].Event);
1268 break;
1269 case MICAPS_OBJECT_TOOLS://Micaps工具窗口
1270 for( int i=0;i<FMicapsEvent.Count;i++ )
1271 {
1272 if( FObjectEvent[i].Longitude == -1 || FObjectEvent[i].Latitude == -1 )
1273 FMessage = DialogTools(false);
1274 else if( FObjectEvent[i].Longitude == -2 || FObjectEvent[i].Latitude == -2 )
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 for( int i=0;i<FMicapsEvent.Count;i++ )
1284 FMessage = Explore(FObjectEvent[i].Latitude);
1285 break;
1286 case MICAPS_OBJECT_OPTION://Micaps显示设置窗口
1287 for( int i=0;i<FMicapsEvent.Count;i++ )
1288 {
1289 if( FObjectEvent[i].Longitude == -3 || FObjectEvent[i].Latitude == -3 )
1290 FMessage = DialogOption(false);
1291 else if( FObjectEvent[i].Longitude == -4 || FObjectEvent[i].Latitude == -4 )
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 if( hNewParentWindow != NULL )
1315 return( SetParent( FindMicapsWindow(), hNewParentWindow ) != NULL );
1316 else
1317 return( false );
1318 }
1319 //---------------------------------------------------------------------------
1320 bool CMicaps::SetChildWindow(HWND hNewChildWindow)
1321 {
1322 if( hNewChildWindow != NULL )
1323 return( SetParent( hNewChildWindow, FindMicapsWindow() ) != NULL );
1324 else
1325 return( false );
1326 }
1327 //---------------------------------------------------------------------------
1328 bool CMicaps::Show(void)
1329 {
1330 HWND hWndMicaps = FindMicapsWindow();
1331 return( hWndMicaps != 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 if( hWndMicaps == NULL ) return(false);
1344 HWND hWndMicapsTools = FindWindow("OperateClass","工具");
1345 if( hWndMicapsTools == 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 if( ok1 )
1380 {
1381 bitmap->SaveToFile(ImageFileName);
1382 ok = ok1 && FileExists(ImageFileName);
1383 }
1384 delete bitmap;
1385 }
1386 if( move )
1387 MoveWindow(hWndMicapsTools,mrect.Left,mrect.Top,mrect.Width(),mrect.Height(),true);
1388 return(ok);
1389 }
1390 //---------------------------------------------------------------------------
- 模拟人工操作Micaps1.0的C++类源代码
- 模拟人工操作Micaps1.0的C++类源代码(头文件及数据结构定义文件)
- 人工蜂群算法源代码的获取
- IAccessible模拟人工点击网页操作查询封号
- C语言 大整数乘法,模拟人工计算
- httpclient模拟需要登陆之后才能访问第三方网站(并且需要一些人工参与的操作)
- 二叉树的基本操作C源代码
- 使用 JNA 模拟C语言结构体的完整源代码
- 人工生命模拟程序
- C#/模拟键盘和鼠标的操作
- Lua 模拟类的操作
- python使用win32*模块模拟人工操作——城通网盘下载器(零)
- python使用win32*模块模拟人工操作——城通网盘下载器(一)
- 结构体人工模拟洗牌
- 电子词典模拟软件 c语言源代码
- C语言中操作字符串的一些函数源代码
- C语言中操作字符串的一些函数源代码
- C语言中操作字符串的一些函数源代码
- 关联文件类型
- 模拟人工操作Micaps1.0的C++类源代码(头文件及数据结构定义文件)
- 一分钟内搞定!熊猫杀毒软件研发提升扫描速度的技术
- 卡巴斯基正式起诉瑞星公司涉嫌不正当竞争
- Oracle 使用一条语句删除重复数据
- 模拟人工操作Micaps1.0的C++类源代码
- 清除病毒的完整步骤流程图解(附删除病毒文件流程图)
- 泛域名
- 数千万聊天用户遇到挂马危险--BlueSkyCat ActiveX远程代码执行漏洞
- Java路径问题最终解决方案
- 教你几招判断你的系统是否被流氓侵犯
- 忘记OUTLOOK标识密码—解决方案
- 一分正式的工作
- 计算机小技巧集锦 (增加你计算机的安全系数以及一些问题的解决方法)