IDEView.cpp 79 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459
  1. // VectorView.cpp : implementation of the CIDEView class
  2. //
  3. #include "stdafx.h"
  4. #include "IDEView.h"
  5. #include "PicSizeDlg.h"
  6. #include "gooddc.h"
  7. #include "graphdef.h"
  8. #include "MainFrm.h"
  9. #include "PicListDlg.h"
  10. #include ".\ideview.h"
  11. #include "BaseProDlg.h"
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17. #pragma warning (disable: 4700)
  18. CDrawObjList g_Copied;
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CIDEView
  21. IMPLEMENT_DYNCREATE(CIDEView, CScrollView)
  22. BEGIN_MESSAGE_MAP(CIDEView, CScrollView)
  23. //{{AFX_MSG_MAP(CIDEView)
  24. ON_WM_CREATE()
  25. ON_WM_DESTROY()
  26. ON_COMMAND(ID_EDIT_UNFREEZE, OnEditUnfreeze)
  27. ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
  28. ON_COMMAND(ID_EDIT_MOVETOFRONT, OnEditMovetofront)
  29. ON_COMMAND(ID_EDIT_MOVETOBACK, OnEditMovetoback)
  30. ON_COMMAND(ID_EDIT_HINVERT, OnEditHinvert)
  31. ON_COMMAND(ID_EDIT_FREEZE, OnEditFreeze)
  32. ON_COMMAND(ID_EDIT_CUT, OnEditCut)
  33. ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
  34. ON_COMMAND(ID_EDIT_CLEAR, OnEditDelete)
  35. ON_COMMAND(ID_DESK_GRID, OnDeskGrid)
  36. ON_COMMAND(ID_ALIGN_TOP, OnAlignTop)
  37. ON_COMMAND(ID_ALIGN_VCENTER, OnAlignVcenter)
  38. ON_COMMAND(ID_ALIGN_RIGHT, OnAlignRight)
  39. ON_COMMAND(ID_ALIGN_LEFT, OnAlignLeft)
  40. ON_COMMAND(ID_ALIGN_HCENTER, OnAlignHcenter)
  41. ON_COMMAND(ID_ALIGN_BOTTOM, OnAlignBottom)
  42. ON_COMMAND(ID_EDIT_VINVERT, OnEditVinvert)
  43. ON_WM_MOUSEMOVE()
  44. ON_WM_LBUTTONDOWN()
  45. ON_WM_LBUTTONUP()
  46. ON_COMMAND(ID_POINTER, OnPointer)
  47. ON_WM_KEYDOWN()
  48. ON_COMMAND(ID_FILE_NEW, OnFileNew)
  49. ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  50. ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  51. ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  52. ON_COMMAND(ID_APP_EXIT, OnAppExit)
  53. ON_UPDATE_COMMAND_UI(ID_DESK_GRID, OnUpdateDeskGrid)
  54. ON_UPDATE_COMMAND_UI(ID_EDIT_FREEZE, OnUpdateEditFreeze)
  55. ON_COMMAND(ID_REDO, OnRedo)
  56. ON_COMMAND(ID_UNDO, OnUndo)
  57. ON_UPDATE_COMMAND_UI(ID_UNDO, OnUpdateUndo)
  58. ON_UPDATE_COMMAND_UI(ID_REDO, OnUpdateRedo)
  59. ON_COMMAND(ID_PICSIZE, OnPicsize)
  60. ON_UPDATE_COMMAND_UI(ID_ALIGN_BOTTOM, OnUpdateAlignBottom)
  61. ON_UPDATE_COMMAND_UI(ID_ALIGN_HCENTER, OnUpdateAlignHcenter)
  62. ON_UPDATE_COMMAND_UI(ID_ALIGN_LEFT, OnUpdateAlignLeft)
  63. ON_UPDATE_COMMAND_UI(ID_ALIGN_RIGHT, OnUpdateAlignRight)
  64. ON_UPDATE_COMMAND_UI(ID_ALIGN_TOP, OnUpdateAlignTop)
  65. ON_UPDATE_COMMAND_UI(ID_ALIGN_VCENTER, OnUpdateAlignVcenter)
  66. ON_UPDATE_COMMAND_UI(ID_EDIT_HINVERT, OnUpdateEditHinvert)
  67. ON_UPDATE_COMMAND_UI(ID_EDIT_MOVETOBACK, OnUpdateEditMovetoback)
  68. ON_UPDATE_COMMAND_UI(ID_EDIT_MOVETOFRONT, OnUpdateEditMovetofront)
  69. ON_UPDATE_COMMAND_UI(ID_EDIT_VINVERT, OnUpdateEditVinvert)
  70. ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
  71. ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
  72. ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateEditClear)
  73. ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
  74. ON_COMMAND(ID_DRAW_TLINE, OnDrawTline)
  75. ON_COMMAND(ID_DRAW_TEXT, OnDrawText)
  76. ON_COMMAND(ID_DRAW_RECT, OnDrawRect)
  77. ON_COMMAND(ID_DRAW_DATA, OnDrawData)
  78. ON_COMMAND(ID_DRAW_BUTTON, OnDraw3drect)
  79. ON_COMMAND(ID_DRAW_3CIRCLE, OnDraw3circle)
  80. ON_UPDATE_COMMAND_UI(ID_POINTER, OnUpdatePointer)
  81. ON_WM_LBUTTONDBLCLK()
  82. ON_WM_TIMER()
  83. ON_UPDATE_COMMAND_UI(ID_DRAW_3CIRCLE, OnUpdateDraw3circle)
  84. ON_UPDATE_COMMAND_UI(ID_DRAW_BUTTON, OnUpdateDraw3drect)
  85. ON_UPDATE_COMMAND_UI(ID_DRAW_DATA, OnUpdateDrawData)
  86. ON_UPDATE_COMMAND_UI(ID_DRAW_TEXT, OnUpdateDrawText)
  87. ON_UPDATE_COMMAND_UI(ID_DRAW_TLINE, OnUpdateDrawTline)
  88. ON_WM_RBUTTONDOWN()
  89. ON_COMMAND(ID_EDIT_SAVE, OnEditSave)
  90. ON_UPDATE_COMMAND_UI(ID_EDIT_SAVE, OnUpdateEditSave)
  91. ON_WM_ERASEBKGND()
  92. ON_UPDATE_COMMAND_UI(ID_DRAW_RECT, OnUpdateDrawRect)
  93. ON_UPDATE_COMMAND_UI(ID_PICSIZE, OnUpdatePicsize)
  94. ON_COMMAND(ID_DRAW_BITMAP, OnDrawBitmap)
  95. ON_UPDATE_COMMAND_UI(ID_DRAW_BITMAP, OnUpdateDrawBitmap)
  96. ON_COMMAND(ID_DRAW_CURVE, OnDrawCurve)
  97. ON_UPDATE_COMMAND_UI(ID_DRAW_CURVE, OnUpdateDrawCurve)
  98. ON_COMMAND(ID_DRAW_WATCH, OnDrawWatch)
  99. ON_UPDATE_COMMAND_UI(ID_DRAW_WATCH, OnUpdateDrawWatch)
  100. ON_COMMAND(ID_DRAW_BAR, OnDrawBar)
  101. ON_UPDATE_COMMAND_UI(ID_DRAW_BAR, OnUpdateDrawBar)
  102. ON_COMMAND(ID_VERSPACE, OnVerspace)
  103. ON_UPDATE_COMMAND_UI(ID_VERSPACE, OnUpdateVerspace)
  104. ON_COMMAND(ID_SAMEWIDTH, OnSamewidth)
  105. ON_UPDATE_COMMAND_UI(ID_SAMEWIDTH, OnUpdateSamewidth)
  106. ON_COMMAND(ID_SAMEHEIGHT, OnSameheight)
  107. ON_UPDATE_COMMAND_UI(ID_SAMEHEIGHT, OnUpdateSameheight)
  108. ON_COMMAND(ID_HORSPACE, OnHorspace)
  109. ON_UPDATE_COMMAND_UI(ID_HORSPACE, OnUpdateHorspace)
  110. ON_COMMAND(ID_ALLSAME, OnAllsame)
  111. ON_UPDATE_COMMAND_UI(ID_ALLSAME, OnUpdateAllsame)
  112. ON_COMMAND(ID_OPENPIC, OnOpenpic)
  113. ON_COMMAND(ID_DRAW_ARC, OnDrawArc)
  114. ON_COMMAND(ID_DRAW_BREAKER, OnDrawBreaker)
  115. ON_COMMAND(ID_DRAW_FAN, OnDrawFan)
  116. ON_COMMAND(ID_DRAW_GRID, OnDrawGrid)
  117. ON_COMMAND(ID_DRAW_HISCURVE, OnDrawHiscurve)
  118. ON_COMMAND(ID_DRAW_LINE, OnDrawLine)
  119. ON_COMMAND(ID_DRAW_PIE, OnDrawPie)
  120. ON_COMMAND(ID_DRAW_PIPE, OnDrawPipe)
  121. ON_COMMAND(ID_DRAW_POLYGON, OnDrawPolygon)
  122. ON_COMMAND(ID_DRAW_REPORT, OnDrawReport)
  123. ON_COMMAND(ID_DRAW_SINGLEBAR, OnDrawSinglebar)
  124. ON_COMMAND(ID_DRAW_TRANSFER, OnDrawTransfer)
  125. ON_COMMAND(ID_DRAW_YPIPE, OnDrawYpipe)
  126. ON_COMMAND(ID_DRAW_ZHELINE, OnDrawZheline)
  127. ON_COMMAND(ID_DRAW_ZHEPIPE, OnDrawZhepipe)
  128. ON_COMMAND(ID_DRAW_ARROW, OnDrawArrow)
  129. ON_COMMAND(ID_DRAW_ELLIPSE, OnDrawEllipse)
  130. ON_COMMAND(ID_DRAW_SWITCH, OnDrawSwitch)
  131. ON_COMMAND(ID_DRAW_OCX, OnDrawOCX)
  132. ON_COMMAND(ID_DRAW_FLASH, OnDrawFlash)
  133. ON_COMMAND(ID_COMBINE, OnCombine)
  134. ON_COMMAND(ID_DISCOMBINE, OnDiscombine)
  135. ON_COMMAND(ID_DRAW_ROUNDRECT, OnDrawRoundrect)
  136. ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
  137. ON_UPDATE_COMMAND_UI(ID_DRAW_SWITCH, OnUpdateDrawSwitch)
  138. ON_UPDATE_COMMAND_UI(ID_DRAW_ARC, OnUpdateDrawArc)
  139. ON_UPDATE_COMMAND_UI(ID_DRAW_ARROW, OnUpdateDrawArrow)
  140. ON_UPDATE_COMMAND_UI(ID_DRAW_BREAKER, OnUpdateDrawBreaker)
  141. ON_UPDATE_COMMAND_UI(ID_DRAW_ELLIPSE, OnUpdateDrawEllipse)
  142. ON_UPDATE_COMMAND_UI(ID_DRAW_FAN, OnUpdateDrawFan)
  143. ON_UPDATE_COMMAND_UI(ID_DRAW_GRID, OnUpdateDrawGrid)
  144. ON_UPDATE_COMMAND_UI(ID_DRAW_HISCURVE, OnUpdateDrawHiscurve)
  145. ON_UPDATE_COMMAND_UI(ID_DRAW_PIE, OnUpdateDrawPie)
  146. ON_UPDATE_COMMAND_UI(ID_DRAW_PIPE, OnUpdateDrawPipe)
  147. ON_UPDATE_COMMAND_UI(ID_DRAW_POLYGON, OnUpdateDrawPolygon)
  148. ON_UPDATE_COMMAND_UI(ID_DRAW_REPORT, OnUpdateDrawReport)
  149. ON_UPDATE_COMMAND_UI(ID_DRAW_SINGLEBAR, OnUpdateDrawSinglebar)
  150. ON_UPDATE_COMMAND_UI(ID_DRAW_TRANSFER, OnUpdateDrawTransfer)
  151. ON_UPDATE_COMMAND_UI(ID_DRAW_YPIPE, OnUpdateDrawYpipe)
  152. ON_UPDATE_COMMAND_UI(ID_DRAW_ZHELINE, OnUpdateDrawZheline)
  153. ON_UPDATE_COMMAND_UI(ID_DRAW_ZHEPIPE, OnUpdateDrawZhepipe)
  154. ON_UPDATE_COMMAND_UI(ID_DRAW_LINE, OnUpdateDrawLine)
  155. ON_UPDATE_COMMAND_UI(ID_DISCOMBINE, OnUpdateDiscombine)
  156. ON_UPDATE_COMMAND_UI(ID_COMBINE, OnUpdateCombine)
  157. ON_UPDATE_COMMAND_UI(ID_DRAW_ROUNDRECT, OnUpdateDrawRoundrect)
  158. ON_UPDATE_COMMAND_UI(ID_DRAW_OCX, OnUpdateDrawOCX)
  159. ON_UPDATE_COMMAND_UI(ID_DRAW_FLASH, OnUpdateDrawFlash)
  160. ON_WM_MOUSEWHEEL()
  161. //}}AFX_MSG_MAP
  162. // Standard printing commands
  163. ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
  164. ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
  165. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
  166. ON_COMMAND(ID_PROPERTY, OnProperty)
  167. ON_UPDATE_COMMAND_UI(ID_PROPERTY, OnUpdateProperty)
  168. ON_COMMAND(IDM_EDITVAR, OnEditVar)
  169. ON_UPDATE_COMMAND_UI(IDM_EDITVAR, OnUpdateEditVar)
  170. ON_COMMAND(IDM_REALTIMECURVE, OnRealTimeCurve)
  171. ON_UPDATE_COMMAND_UI(IDM_REALTIMECURVE, OnUpdateRealTimeCurve)
  172. ON_WM_CLOSE()
  173. ON_WM_KILLFOCUS()
  174. ON_WM_SETFOCUS()
  175. ON_WM_HSCROLL()
  176. ON_WM_RBUTTONDBLCLK()
  177. END_MESSAGE_MAP()
  178. /////////////////////////////////////////////////////////////////////////////
  179. // CIDEView construction/destruction
  180. CIDEView::CIDEView()
  181. {
  182. // TODO: add construction code here
  183. m_mouseState = FALSE;
  184. m_bDrag = FALSE;
  185. m_nDragHandle = 0;
  186. m_nBDragHandle = 0;
  187. m_bMoveElements = FALSE;
  188. m_bFreezed = FALSE;
  189. m_bRectSelect = FALSE;
  190. m_mouseRect = CRect(0, 0, 0, 0);
  191. m_pCurActionObj = NULL;
  192. m_bPolygon = FALSE;
  193. //创建临时文件
  194. char tmpPathc[_MAX_PATH + 1];
  195. GetTempPath(_MAX_PATH, tmpPathc);
  196. CString tmpPath = tmpPathc;
  197. ::CreateDirectory(tmpPath + "\\VDTemp", NULL);
  198. CGraph* pGraph = new CGraph(CSize(0, 0));
  199. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\First.ed");
  200. pGraph->Store();
  201. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\Second.ed");
  202. pGraph->Store();
  203. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\Third.ed");
  204. pGraph->Store();
  205. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\Forth.ed");
  206. pGraph->Store();
  207. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed");
  208. pGraph->Store();
  209. pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\Six.ed");
  210. pGraph->Store();
  211. delete pGraph;
  212. m_nRudoPosition = 0;
  213. m_nCanUndoTimes = 0;
  214. m_nCanRedoTimes = 0;
  215. m_tblTime = CTime::GetCurrentTime();
  216. m_bOcxCreate = false;
  217. m_bIsHaveOCX = false;//是否有OCX
  218. m_bModified = FALSE;
  219. }
  220. CIDEView::~CIDEView()
  221. {
  222. int test = 0;
  223. }
  224. BOOL CIDEView::PreCreateWindow(CREATESTRUCT& cs)
  225. {
  226. // TODO: Modify the Window class or styles here by modifying
  227. // the CREATESTRUCT cs
  228. return CScrollView::PreCreateWindow(cs);
  229. }
  230. /////////////////////////////////////////////////////////////////////////////
  231. // CIDEView drawing
  232. void CIDEView::OnDraw(CDC* pDC)
  233. {
  234. CIDEDoc* pDoc = GetDocument();
  235. ASSERT_VALID(pDoc);
  236. // TODO: add draw code for native data here
  237. //if( !m_bIsHaveOCX )
  238. {
  239. // 1.创建内存DC;
  240. CRect rect = NULL;
  241. CGoodDC dc;
  242. dc.Create(pDC);
  243. CRect rectClip;
  244. dc.GetClipBox(&rectClip);
  245. dc.FillSolidRect(rectClip, RGB(128, 128, 128));
  246. LAYOUTSTRUCT layout;
  247. CRect m_rect = layout.rect;
  248. CString sOCXPath;
  249. int nOcxIndex = 0;
  250. // 2.在指定的DC环境设备上绘制所有的图元;
  251. rect = m_pGraph->Draw(&dc, sOCXPath, nOcxIndex);
  252. // 3.编辑状态下,显示选中图元的手势边框;
  253. if (/*m_bHandle*/g_bRun == FALSE)
  254. {// 编辑状态选中时,显示的选中的边框;
  255. POSITION pos = m_selection.GetHeadPosition();
  256. while (pos != NULL)
  257. {
  258. CDrawObj* pObj = m_selection.GetNext(pos);
  259. pObj->DrawTracker(&dc);
  260. }
  261. }
  262. // 画响应动作的图元的外框;
  263. //if (m_pCurActionObj != NULL )
  264. //{
  265. // m_pCurActionObj->DrawFrame(&dc);
  266. //}
  267. // 4.编辑状态下,以虚线框显示区选时的矩形范围;
  268. CPen dotpen;
  269. dotpen.CreatePen(PS_DOT, 1, RGB(195, 195, 195));
  270. CPen* oldobj = dc.SelectObject(&dotpen);
  271. // 区选图元时显示的4条边框;
  272. dc.MoveTo(m_mouseRect.left, m_mouseRect.top);
  273. dc.LineTo(m_mouseRect.right, m_mouseRect.top);
  274. dc.LineTo(m_mouseRect.right, m_mouseRect.bottom);
  275. dc.LineTo(m_mouseRect.left, m_mouseRect.bottom);
  276. dc.LineTo(m_mouseRect.left, m_mouseRect.top);
  277. dc.SelectObject(oldobj);
  278. if (rect.Width() > 0 && rect.Height() > 0 && g_bRun && nOcxIndex >= 0 && nOcxIndex <= 9)
  279. {
  280. if (!m_bOcxCreate && sOCXPath != "")
  281. {
  282. m_bOcxCreate = true;
  283. ShowOCX(rect, sOCXPath, nOcxIndex, g_sCurrentPageName);
  284. }
  285. dc.Destroy();
  286. }
  287. else
  288. dc.Destroy();
  289. DeleteObject(dotpen);
  290. }
  291. }
  292. /////////////////////////////////////////////////////////////////////////////
  293. // CIDEView printing
  294. BOOL CIDEView::OnPreparePrinting(CPrintInfo* pInfo)
  295. {
  296. // default preparation
  297. pInfo->SetMinPage(1);
  298. pInfo->SetMaxPage(1);
  299. return DoPreparePrinting(pInfo);
  300. }
  301. void CIDEView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  302. {
  303. // TODO: add extra initialization before printing
  304. CString sTemp;
  305. int nTemp = 0;
  306. if (m_pGraph->m_Type == 0)
  307. {
  308. int nOffsetX = pDC->GetDeviceCaps(PHYSICALOFFSETX);
  309. int nOffsetY = pDC->GetDeviceCaps(PHYSICALOFFSETY);
  310. int nLogPixelX = pDC->GetDeviceCaps(LOGPIXELSX);
  311. int nLogPixelY = pDC->GetDeviceCaps(LOGPIXELSY);
  312. pDC->SetMapMode(MM_ISOTROPIC);
  313. pDC->SetWindowExt(100, 100);
  314. pDC->SetViewportExt(nLogPixelX, nLogPixelY);
  315. pDC->SetViewportOrg(-nOffsetX, -nOffsetY);
  316. m_pGraph->Draw(pDC, sTemp, nTemp);
  317. }
  318. else
  319. {
  320. CSize size = m_pGraph->m_sizePic;
  321. int nHScale = pInfo->m_rectDraw.Width() / size.cx;
  322. int nVScale = pInfo->m_rectDraw.Height() / size.cy;
  323. int nScale = min(nHScale, nVScale);
  324. pDC->SetMapMode(MM_ISOTROPIC);
  325. pDC->SetWindowExt(1000, 1000);
  326. pDC->SetViewportExt(1000 * nScale, 1000 * nScale);
  327. int nHOffset = pInfo->m_rectDraw.Width() - nScale*size.cx;
  328. int nVOffset = pInfo->m_rectDraw.Height() - nScale*size.cy;
  329. pDC->SetViewportOrg(nHOffset / 2, nVOffset / 2);
  330. m_pGraph->Print(pDC);
  331. }
  332. }
  333. void CIDEView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  334. {
  335. // TODO: add cleanup after printing
  336. }
  337. /////////////////////////////////////////////////////////////////////////////
  338. // CIDEView diagnostics
  339. #ifdef _DEBUG
  340. void CIDEView::AssertValid() const
  341. {
  342. CScrollView::AssertValid();
  343. }
  344. void CIDEView::Dump(CDumpContext& dc) const
  345. {
  346. CScrollView::Dump(dc);
  347. }
  348. CIDEDoc* CIDEView::GetDocument() // non-debug version is inline
  349. {
  350. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CIDEDoc)));
  351. return (CIDEDoc*)m_pDocument;
  352. }
  353. #endif //_DEBUG
  354. /////////////////////////////////////////////////////////////////////////////
  355. // CIDEView message handlers
  356. BOOL CIDEView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  357. {
  358. // TODO: Add your specialized code here and/or call the base class
  359. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  360. }
  361. int CIDEView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  362. {
  363. if (CScrollView::OnCreate(lpCreateStruct) == -1)
  364. {
  365. return -1;
  366. }
  367. m_bMove = TRUE;
  368. m_bHandle = TRUE;
  369. m_bModified = FALSE;
  370. m_pointMouse = CPoint(0, 0);
  371. CString strPicFile = AfxGetApp()->m_lpCmdLine;
  372. if (!strPicFile.IsEmpty()) m_bMove = FALSE;
  373. m_pGraph = new CGraph(CSize(0, 0));
  374. m_pGraph->SetPicFile(strPicFile);
  375. m_pGraph->SetView(this);
  376. m_pGraph->Load();
  377. RefreshScrollSizes();
  378. //CWnd *pWnd = GetParent(); ////下面这段子框架全屏幕显示
  379. //RECT rect;
  380. //WINDOWPLACEMENT wp,oldwp;
  381. //POINT pmin,pmax;
  382. //GetWindowPlacement(&oldwp);
  383. //if(pWnd != NULL)
  384. // pWnd-> GetClientRect(&rect);
  385. //
  386. //rect.bottom = 900;
  387. //pmax.x = rect.right ;
  388. //pmax.y = rect.bottom ;
  389. //pmin = oldwp.ptMinPosition ;
  390. //wp.length = sizeof(WINDOWPLACEMENT);
  391. //wp.flags = WPF_RESTORETOMAXIMIZED;
  392. //wp.showCmd = SW_SHOWMAXIMIZED;
  393. //wp.rcNormalPosition = rect;
  394. //SetWindowPlacement(&wp); ////上面这段子框架全屏幕显示
  395. SetTimer(3, 1000, NULL);
  396. return 0;
  397. }
  398. void CIDEView::OnDestroy()
  399. {
  400. CScrollView::OnDestroy();
  401. #if VIEW_USE_THREAD
  402. MTVERIFY(SetEvent(m_hFreshGraphObject));
  403. MTVERIFY(SetEvent(m_hIDEViewRunObject));
  404. MTVERIFY(WaitForSingleObject(m_hFreshGraphThread, INFINITE) != WAIT_FAILED);
  405. MTVERIFY(CloseHandle(m_hFreshGraphThread));
  406. m_hFreshGraphThread = NULL;
  407. MTVERIFY(CloseHandle(m_hIDEViewRunObject));
  408. MTVERIFY(CloseHandle(m_hFreshGraphObject));
  409. m_hFreshGraphObject = NULL;
  410. DeleteCriticalSection(&m_csFreshGraph);
  411. #endif
  412. // TODO: Add your message handler code here
  413. POSITION pos = m_copied.GetHeadPosition();
  414. while (pos != NULL)
  415. {
  416. CDrawObj *pObj = m_copied.GetNext(pos);
  417. delete pObj;
  418. }
  419. m_copied.RemoveAll();
  420. pos = g_Copied.GetHeadPosition();
  421. while (pos != NULL)
  422. {
  423. CDrawObj *pObj = g_Copied.GetNext(pos);
  424. delete pObj;
  425. }
  426. g_Copied.RemoveAll();
  427. pos = m_deleted.GetHeadPosition();
  428. while (pos != NULL)
  429. {
  430. CDrawObj *pObj = m_deleted.GetNext(pos);
  431. delete pObj;
  432. }
  433. m_deleted.RemoveAll();
  434. delete m_pGraph;
  435. m_pGraph = NULL;
  436. }
  437. void CIDEView::OnEditUnfreeze()
  438. {
  439. POSITION pos = m_selection.GetHeadPosition();
  440. if (pos != NULL)
  441. {
  442. while (pos != NULL)
  443. {
  444. CDrawObj* pObj = m_selection.GetNext(pos);
  445. pObj->m_bOnMove = false;
  446. }
  447. }
  448. else
  449. {
  450. m_bFreezed = FALSE;
  451. }
  452. }
  453. void CIDEView::OnEditPaste()
  454. {
  455. // TODO: Add your command handler code here
  456. #if 1
  457. m_selection.RemoveAll();
  458. POSITION pos = g_Copied.GetHeadPosition();
  459. while (pos != NULL)
  460. {
  461. CDrawObj *pObj = g_Copied.GetNext(pos);
  462. CDrawObj *pNewObj = pObj->Clone();
  463. pObj->m_rect.OffsetRect(20, 20);
  464. pNewObj->m_rect.OffsetRect(20, 20);
  465. // if (pNewObj->IsKindOf( RUNTIME_CLASS(CDrawPoly) ))
  466. // {
  467. // int nPointCount = ((CDrawPoly*)pNewObj)->m_nPoints;
  468. // for (int i = 0; i<nPointCount; i++)
  469. // {
  470. // ((CDrawPoly*)pNewObj)->m_points[i] += CSize(20,20);
  471. // ((CDrawPoly*)pObj)->m_points[i] += CSize(20,20);
  472. // }
  473. // }
  474. pNewObj->m_pView = this;
  475. m_pGraph->m_DrawObjList.AddTail(pNewObj);
  476. m_selection.AddTail(pNewObj);
  477. }
  478. Invalidate(FALSE);
  479. m_bModified = TRUE;
  480. #else
  481. m_selection.RemoveAll();
  482. POSITION pos = m_copied.GetHeadPosition();
  483. while (pos != NULL)
  484. {
  485. CDrawObj *pObj = m_copied.GetNext(pos);
  486. CDrawObj *pNewObj = pObj->Clone();
  487. pObj->m_rect.OffsetRect(20, 20);
  488. pNewObj->m_rect.OffsetRect(20, 20);
  489. if (pNewObj->IsKindOf(RUNTIME_CLASS(CDrawPoly)))
  490. {
  491. int nPointCount = ((CDrawPoly*)pNewObj)->m_nPoints;
  492. for (int i = 0; i < nPointCount; i++)
  493. {
  494. ((CDrawPoly*)pNewObj)->m_points[i] += CSize(20, 20);
  495. ((CDrawPoly*)pObj)->m_points[i] += CSize(20, 20);
  496. }
  497. }
  498. m_pGraph->m_DrawObjList.AddTail(pNewObj);
  499. m_selection.AddTail(pNewObj);
  500. }
  501. Invalidate(FALSE);
  502. m_bModified = TRUE;
  503. #endif
  504. }
  505. void CIDEView::OnEditMovetofront()
  506. {
  507. // TODO: Add your command handler code here
  508. POSITION pos = m_selection.GetHeadPosition();
  509. while (pos != NULL)
  510. {
  511. CDrawObj* pObj = m_selection.GetNext(pos);
  512. POSITION pos0 = m_pGraph->m_DrawObjList.Find(pObj);
  513. m_pGraph->m_DrawObjList.RemoveAt(pos0);
  514. m_pGraph->m_DrawObjList.AddTail(pObj);
  515. pObj->Invalidate();
  516. }
  517. Invalidate(FALSE);
  518. m_bModified = TRUE;
  519. }
  520. void CIDEView::OnEditMovetoback()
  521. {
  522. // TODO: Add your command handler code here
  523. POSITION pos = m_selection.GetTailPosition();
  524. while (pos != NULL)
  525. {
  526. CDrawObj* pObj = m_selection.GetPrev(pos);
  527. POSITION pos0 = m_pGraph->m_DrawObjList.Find(pObj);
  528. m_pGraph->m_DrawObjList.RemoveAt(pos0);
  529. m_pGraph->m_DrawObjList.AddHead(pObj);
  530. pObj->Invalidate();
  531. }
  532. Invalidate(FALSE);
  533. m_bModified = TRUE;
  534. }
  535. void CIDEView::OnEditHinvert()
  536. {
  537. // TODO: Add your command handler code here
  538. POSITION pos = m_selection.GetHeadPosition();
  539. while (pos != NULL)
  540. {
  541. CDrawObj *pObj = m_selection.GetNext(pos);
  542. int temp = pObj->m_rect.left;
  543. pObj->m_rect.left = pObj->m_rect.right;
  544. pObj->m_rect.right = temp;
  545. pObj->Invalidate();
  546. m_bModified = TRUE;
  547. }
  548. Invalidate(FALSE);
  549. m_bModified = TRUE;
  550. }
  551. void CIDEView::OnEditFreeze()
  552. {
  553. // TODO: Add your command handler code here
  554. CRect freshRect; // 需要刷新的区域
  555. POSITION pos = m_selection.GetHeadPosition();
  556. if (pos != NULL)
  557. {
  558. while (pos != NULL)
  559. {
  560. CDrawObj* pObj = m_selection.GetNext(pos);
  561. pObj->m_bOnMove = true;
  562. }
  563. }
  564. else
  565. {
  566. m_bFreezed = !m_bFreezed;
  567. }
  568. }
  569. void CIDEView::OnEditCut()
  570. {
  571. // TODO: Add your command handler code here
  572. OnEditCopy();
  573. OnEditDelete();
  574. Invalidate(FALSE);
  575. }
  576. void CIDEView::OnEditCopy()
  577. {
  578. // TODO: Add your command handler code here
  579. #if 1
  580. // 复制前,先清除之前的;
  581. POSITION pos = g_Copied.GetHeadPosition();
  582. while (pos != NULL)
  583. {
  584. CDrawObj *pObj = g_Copied.GetNext(pos);
  585. delete pObj;
  586. }
  587. g_Copied.RemoveAll();
  588. pos = m_selection.GetHeadPosition();
  589. while (pos != NULL)
  590. {
  591. CDrawObj* pObj = m_selection.GetNext(pos);
  592. CDrawObj *pNewObj = pObj->Clone();
  593. g_Copied.AddTail(pNewObj);
  594. }
  595. #else
  596. POSITION pos = m_copied.GetHeadPosition();
  597. while (pos != NULL)
  598. {
  599. CDrawObj *pObj = m_copied.GetNext(pos);
  600. delete pObj;
  601. }
  602. m_copied.RemoveAll();
  603. pos = m_selection.GetHeadPosition();
  604. while (pos != NULL)
  605. {
  606. CDrawObj* pObj = m_selection.GetNext(pos);
  607. CDrawObj *pNewObj = pObj->Clone();
  608. m_copied.AddTail(pNewObj);
  609. }
  610. #endif
  611. }
  612. void CIDEView::OnEditDelete()
  613. {
  614. POSITION pos = m_deleted.GetHeadPosition();
  615. while (pos != NULL)
  616. {
  617. CDrawObj* pObj = m_deleted.GetNext(pos);
  618. delete pObj;
  619. }
  620. m_deleted.RemoveAll();
  621. #if 0
  622. pos = m_selection.GetHeadPosition();
  623. while (pos != NULL)
  624. {
  625. CDrawObj* pObj = m_selection.GetNext(pos);
  626. pObj->Invalidate();
  627. Remove(pObj);
  628. m_deleted.AddTail(pObj);
  629. }
  630. m_selection.RemoveAll();
  631. #endif
  632. for (POSITION pos = m_selection.GetHeadPosition(); pos != NULL;)
  633. {
  634. POSITION pos1 = pos; //要在这里做一个备份
  635. CDrawObj* pObj = m_selection.GetNext(pos);//他会改变 pos的值
  636. pObj->Invalidate();
  637. Remove(pObj);
  638. m_deleted.AddTail(pObj);
  639. }
  640. m_selection.RemoveAll();
  641. m_bModified = TRUE;
  642. }
  643. void CIDEView::OnDeskGrid()
  644. {
  645. m_pGraph->m_bGrid = !m_pGraph->m_bGrid;
  646. m_bModified = TRUE;
  647. Invalidate(FALSE);
  648. }
  649. void CIDEView::OnAlignTop()
  650. {
  651. CRect rect = GetAlignRect();
  652. POSITION pos = m_selection.GetHeadPosition();
  653. while (pos != NULL)
  654. {
  655. CDrawObj* pObj = m_selection.GetNext(pos);
  656. CRect r = pObj->m_rect;
  657. r.OffsetRect(0, rect.top - min(r.top, r.bottom));
  658. pObj->MoveTo(r);
  659. m_bModified = TRUE;
  660. }
  661. Invalidate(FALSE);
  662. }
  663. void CIDEView::OnAlignVcenter()
  664. {
  665. CRect rect = GetAlignRect();
  666. int y0 = rect.top + rect.Height() / 2;
  667. POSITION pos = m_selection.GetTailPosition();
  668. m_selection.GetPrev(pos);
  669. while (pos != NULL)
  670. {
  671. CDrawObj* pObj = m_selection.GetPrev(pos);
  672. CRect r = pObj->m_rect;
  673. int y = r.top + r.Height() / 2;
  674. r.OffsetRect(0, y0 - y);
  675. pObj->MoveTo(r);
  676. m_bModified = TRUE;
  677. }
  678. Invalidate(FALSE);
  679. }
  680. void CIDEView::OnAlignRight()
  681. {
  682. CRect rect = GetAlignRect();
  683. POSITION pos = m_selection.GetHeadPosition();
  684. while (pos != NULL)
  685. {
  686. CDrawObj* pObj = m_selection.GetNext(pos);
  687. CRect r = pObj->m_rect;
  688. r.OffsetRect(rect.right - max(r.left, r.right), 0);
  689. pObj->MoveTo(r);
  690. m_bModified = TRUE;
  691. }
  692. Invalidate(FALSE);
  693. }
  694. void CIDEView::OnAlignLeft()
  695. {
  696. CRect rect = GetAlignRect();
  697. POSITION pos = m_selection.GetHeadPosition();
  698. while (pos != NULL)
  699. {
  700. CDrawObj* pObj = m_selection.GetNext(pos);
  701. CRect r = pObj->m_rect;
  702. r.OffsetRect(rect.left - min(r.left, r.right), 0);
  703. pObj->MoveTo(r);
  704. m_bModified = TRUE;
  705. }
  706. Invalidate(FALSE);
  707. }
  708. void CIDEView::OnAlignHcenter()
  709. {
  710. CRect rect = GetAlignRect();
  711. int x0 = rect.left + rect.Width() / 2;
  712. POSITION pos = m_selection.GetTailPosition();
  713. m_selection.GetPrev(pos);
  714. while (pos != NULL)
  715. {
  716. CDrawObj* pObj = m_selection.GetPrev(pos);
  717. CRect r = pObj->m_rect;
  718. int x = r.left + r.Width() / 2;
  719. r.OffsetRect(x0 - x, 0);
  720. pObj->MoveTo(r);
  721. m_bModified = TRUE;
  722. }
  723. Invalidate(FALSE);
  724. }
  725. void CIDEView::OnAlignBottom()
  726. {
  727. CRect rect = GetAlignRect();
  728. POSITION pos = m_selection.GetHeadPosition();
  729. while (pos != NULL)
  730. {
  731. CDrawObj* pObj = m_selection.GetNext(pos);
  732. CRect r = pObj->m_rect;
  733. r.OffsetRect(0, rect.bottom - max(r.top, r.bottom));
  734. pObj->MoveTo(r);
  735. m_bModified = TRUE;
  736. }
  737. Invalidate(FALSE);
  738. }
  739. void CIDEView::OnEditVinvert()
  740. {
  741. POSITION pos = m_selection.GetHeadPosition();
  742. while (pos != NULL)
  743. {
  744. CDrawObj *pObj = m_selection.GetNext(pos);
  745. int temp = pObj->m_rect.top;
  746. pObj->m_rect.top = pObj->m_rect.bottom;
  747. pObj->m_rect.bottom = temp;
  748. pObj->Invalidate();
  749. m_bModified = TRUE;
  750. }
  751. Invalidate(FALSE);
  752. }
  753. void CIDEView::OnMouseMove(UINT nFlags, CPoint point)
  754. {
  755. if (m_mouseState)
  756. _tprintf(_T("按住鼠标移动:x:%d, y:%d\n"), point.x, point.y);
  757. if (CDrawObj::bRuning == TRUE)
  758. {
  759. POSITION pos = m_pGraph->m_DrawObjList.GetHeadPosition();
  760. while (pos != NULL)
  761. {
  762. CDrawObj* pObj = m_pGraph->m_DrawObjList.GetNext(pos);
  763. if ((pObj->m_bOnButtonDown) && 0 != pObj->m_rect.PtInRect(point) && pObj->m_bShow)
  764. {
  765. HCURSOR hCursor;
  766. hCursor = AfxGetApp()->LoadCursor(IDC_HANDCUR);
  767. SetCursor(hCursor);
  768. break;
  769. }
  770. }
  771. // 运行状态下,做动作响应处理
  772. //CClientDC dc(this);
  773. //OnPrepareDC(&dc);
  774. //CPoint local = point;
  775. //dc.DPtoLP(&local);
  776. //CDrawObj* tmp = ObjectAt(local);
  777. //if ( tmp != NULL ) //该图元响应move动作
  778. //{
  779. // if (tmp->m_bOnMove)
  780. // {
  781. // m_nCurActionType = MOUSE_MOVE;
  782. // m_pCurActionObj = tmp;
  783. // tmp->ProcessAction(MOUSE_MOVE);
  784. // }
  785. // if (tmp->IsKindOf( RUNTIME_CLASS(CDrawButton) ) ||
  786. // ( tmp->IsKindOf( RUNTIME_CLASS(CDrawBitmap) ) &&
  787. // ( tmp->m_downAction.m_nActionType == LINK_COMMOND || tmp->m_downAction.m_nActionType == SET_COMMOND ||
  788. // //tmp->m_downAction.m_nActionType == YT_COMMOND || tmp->m_downAction.m_nActionType == YK_COMMOND ||
  789. // tmp->m_downAction.m_nActionType == EXIT_COMMOND || tmp->m_downAction.m_nActionType == EXTERN_COMMOND) ) )
  790. // {
  791. // //::SetCursor(LoadCursor(NULL,(char*) IDC_HAND));
  792. // m_pCurActionObj = tmp;
  793. // }
  794. //}
  795. //else
  796. //{
  797. // m_pCurActionObj = NULL;
  798. //}
  799. return;
  800. }
  801. CClientDC dc(this);
  802. OnPrepareDC(&dc);
  803. CPoint local = point;
  804. dc.DPtoLP(&local);
  805. CSize offset = point - local;
  806. m_pointMouse = local;
  807. bool bFresh = false;
  808. if (m_mouseState == TRUE) // 鼠标按下;
  809. {
  810. if ((g_nElementNo != 0) && (m_tempObj != NULL)) //添加新的图元;
  811. {
  812. //画新图元的外形;
  813. m_tempObj->m_rect = CRect(m_startPoint, m_pointMouse);
  814. m_bModified = TRUE;
  815. CRect freshRect = m_tempObj->m_rect;
  816. freshRect.NormalizeRect();
  817. CRect lastRect = CRect(m_lastPoint, m_lastPoint + CSize(4, 4));
  818. lastRect.NormalizeRect();
  819. freshRect.UnionRect(freshRect, lastRect);
  820. freshRect.InflateRect(4, 4);
  821. freshRect.OffsetRect(offset);
  822. InvalidateRect(freshRect, FALSE);
  823. }
  824. else if (m_bDrag == TRUE) // 改变图元大小;
  825. {
  826. m_selection.GetHead()->MoveHandleTo(m_nBDragHandle, local);
  827. SetCursor(m_selection.GetHead()->GetHandleCursor());
  828. m_bModified = TRUE;
  829. CRect freshRect = m_selection.GetHead()->m_rect;
  830. freshRect.NormalizeRect();
  831. CRect lastRect = CRect(m_lastPoint, m_lastPoint + CSize(4, 4));
  832. lastRect.NormalizeRect();
  833. freshRect.UnionRect(freshRect, lastRect);
  834. freshRect.InflateRect(4, 4);
  835. freshRect.OffsetRect(offset);
  836. InvalidateRect(freshRect, FALSE);
  837. }
  838. else if (m_bRectSelect == TRUE) // 区选图元;
  839. {
  840. m_mouseRect = CRect(m_startPoint, local);
  841. CRect freshRect = m_mouseRect; // 需要刷新的区域;
  842. freshRect.NormalizeRect();
  843. CRect lastRect = CRect(m_startPoint, m_lastPoint);
  844. lastRect.NormalizeRect();
  845. freshRect.UnionRect(freshRect, lastRect);
  846. freshRect.InflateRect(4, 4);
  847. freshRect.OffsetRect(offset);
  848. InvalidateRect(freshRect, FALSE);
  849. }
  850. }
  851. // 如果鼠标没按下,则判断是否到选中图元(一个)的边上了,是的话,改变图标;
  852. if (m_mouseState == FALSE)
  853. {
  854. if ((g_nElementNo == 0) && (m_selection.GetCount() == 1))
  855. {
  856. m_nDragHandle = m_selection.GetHead()->HitTest(local);
  857. if ((m_nDragHandle > 0) && (m_nDragHandle < 9))
  858. {
  859. SetCursor(m_selection.GetHead()->GetHandleCursor());
  860. }
  861. }
  862. }
  863. if ((m_bMoveElements == TRUE) && (!m_bFreezed)) // 移动一个或多个图元;
  864. {
  865. HCURSOR hCursor;
  866. hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR1);
  867. SetCursor(hCursor);
  868. CRect freshRect; // 需要刷新的区域;
  869. bool bFirst = true;
  870. POSITION pos = m_selection.GetHeadPosition();
  871. while (pos != NULL)
  872. {
  873. CDrawObj* pObj = m_selection.GetNext(pos);
  874. if (pObj->m_bOnMove)
  875. continue;
  876. CRect rect = pObj->m_rect;
  877. if (bFirst)
  878. {
  879. freshRect = rect;
  880. freshRect.InflateRect(4, 4);
  881. }
  882. else
  883. freshRect.UnionRect(freshRect, rect);
  884. CPoint delta = CPoint(local - m_lastPoint);
  885. rect += delta;
  886. pObj->MoveTo(rect);
  887. rect.NormalizeRect();
  888. freshRect.UnionRect(freshRect, rect);
  889. freshRect.InflateRect(4, 4);
  890. m_bModified = TRUE;
  891. bFirst = false;
  892. InvalidateRect(freshRect, FALSE);
  893. }
  894. }
  895. CString str;
  896. // 要访问类CMainFrame,需要将mainfrm.h文件引入;
  897. CMainFrame * pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
  898. CStatusBar * pStatus = (CStatusBar *)&pFrame->m_wndStatusBar;
  899. str.Format(g_strLogicDoorinate, local.x, local.y);
  900. pStatus->SetPaneText(1, str);
  901. // 根据情况,刷新部分区域;
  902. if (bFresh)
  903. Invalidate(FALSE);
  904. m_lastPoint = local;
  905. CScrollView::OnMouseMove(nFlags, point);
  906. }
  907. long CIDEView::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
  908. {
  909. return 0;
  910. }
  911. void CIDEView::OnLButtonDown(UINT nFlags, CPoint point) // 鼠标按下:选择或画;
  912. {
  913. if (CDrawObj::bRuning == TRUE)
  914. {
  915. // 运行状态下,做动作响应处理;
  916. CClientDC dc(this);
  917. OnPrepareDC(&dc);
  918. CPoint local = point;
  919. dc.DPtoLP(&local);
  920. CDrawObj* tmp = ObjectAt(local);
  921. if (tmp != NULL && 1) //该图元响应click动作;
  922. {
  923. if (tmp->m_bOnButtonDown && tmp->m_bShow)
  924. {
  925. //AfxMessageBox( tmp->m_strCaption );
  926. m_nCurActionType = MOUSE_CLICK_DOWN;
  927. m_pCurActionObj = tmp;
  928. tmp->ProcessAction(MOUSE_CLICK_DOWN);
  929. }
  930. }
  931. else
  932. {
  933. m_pCurActionObj = NULL;
  934. }
  935. return;
  936. }
  937. CClientDC dc(this);
  938. OnPrepareDC(&dc);
  939. CPoint local = point;
  940. dc.DPtoLP(&local);
  941. // 鼠标按下时,还原拖动为FALSE;
  942. m_bDrag = FALSE;
  943. // 鼠标按下时,设置鼠标状态为TURE表示按下;
  944. m_mouseState = TRUE;
  945. m_startPoint = local;
  946. m_lastPoint = local;
  947. if (ObjectAt(local))
  948. _tprintf(_T("按下鼠标:x:%d, y:%d\n"), point.x, point.y);
  949. if (g_nElementNo != 0)
  950. {// 生成一个图元;
  951. if (g_nElementNo == POLYGON || g_nElementNo == ZHELINE)
  952. {
  953. if (m_bPolygon)
  954. {// 如果是折线(折线需要多次按下松开鼠标);
  955. // ((CDrawPoly*)m_tempObj)->AddPoint(local);
  956. // ((CDrawPoly*)m_tempObj)->RecalcBounds();
  957. CRect freshRect = m_tempObj->m_rect;
  958. freshRect.NormalizeRect();
  959. freshRect.InflateRect(4, 4);
  960. InvalidateRect(freshRect, FALSE);
  961. }
  962. else
  963. {// 如果不是折线,只需要按下和松开鼠标一次;
  964. m_selection.RemoveAll();
  965. // 根据类型创建新图元;
  966. m_tempObj = CreateDrawObjbyNo(g_nElementNo);
  967. if (m_tempObj != NULL)
  968. {
  969. m_pGraph->m_DrawObjList.AddTail(m_tempObj);
  970. m_selection.AddTail(m_tempObj);
  971. //((CDrawPoly*)m_tempObj)->AddPoint(local);
  972. m_bPolygon = true;
  973. }
  974. }
  975. }
  976. else
  977. {
  978. m_selection.RemoveAll();
  979. m_tempObj = CreateDrawObjbyNo(g_nElementNo); /**/
  980. if (m_tempObj != NULL)
  981. {
  982. m_pGraph->m_DrawObjList.AddTail(m_tempObj);
  983. m_selection.AddTail(m_tempObj);
  984. }
  985. }
  986. }
  987. else if (m_nDragHandle == 0)
  988. {// 选择一个图元;
  989. CDrawObj *pObj = ObjectAt(local);
  990. if (pObj != NULL)
  991. {
  992. //selectMode = move;
  993. if (!IsSelected(pObj))
  994. Select(pObj, (nFlags & MK_CONTROL) != 0);
  995. else if ((nFlags & MK_CONTROL) != 0)
  996. {
  997. POSITION ipos = m_selection.Find(pObj);
  998. if (ipos != NULL) m_selection.RemoveAt(ipos);
  999. } //去掉selection中的该图元;
  1000. m_bMoveElements = TRUE;
  1001. }
  1002. else if ((nFlags & MK_CONTROL) == 0)
  1003. {
  1004. m_selection.RemoveAll();
  1005. m_bMoveElements = FALSE;
  1006. m_bRectSelect = TRUE; //rectselect 区域选;
  1007. }
  1008. }
  1009. else // 拉动一个图元;
  1010. {
  1011. m_bDrag = TRUE;
  1012. m_nBDragHandle = m_nDragHandle;
  1013. }
  1014. //Invalidate(FALSE);
  1015. CScrollView::OnLButtonDown(nFlags, point);
  1016. }
  1017. /************************************************************************/
  1018. /* 函数:[5/11/2016 IT];
  1019. /* 描述:;
  1020. /* 参数:;
  1021. /* [IN] :;
  1022. /* [OUT] :;
  1023. /* [IN/OUT] :;
  1024. /* 返回:void;
  1025. /* 注意:1.生成图元时放开鼠标;2.选中时放开鼠标;3.拖动时放开鼠标;
  1026. /* 示例:;
  1027. /*
  1028. /* 修改:;
  1029. /* 日期:;
  1030. /* 内容:;
  1031. /************************************************************************/
  1032. void CIDEView::OnLButtonUp(UINT nFlags, CPoint point) // 松开鼠标,完成画或移动或变形;
  1033. {
  1034. if (CDrawObj::bRuning == TRUE)
  1035. {
  1036. m_pCurActionObj = NULL;
  1037. // 运行状态下,做动作响应处理
  1038. CClientDC dc(this);
  1039. OnPrepareDC(&dc);
  1040. CPoint local = point;
  1041. dc.DPtoLP(&local);
  1042. CDrawObj* tmp = ObjectAt(point);
  1043. if (tmp != NULL && tmp->m_bOnButtonUp && tmp->m_bShow) //该图元响应click动作
  1044. {
  1045. m_nCurActionType = MOUSE_CLICK_UP;
  1046. m_pCurActionObj = tmp;
  1047. if (tmp->m_bOnButtonUp)
  1048. {
  1049. tmp->ProcessAction(MOUSE_CLICK_UP);
  1050. }
  1051. }
  1052. else
  1053. {
  1054. m_pCurActionObj = NULL;
  1055. }
  1056. return;
  1057. }
  1058. CClientDC dc(this);
  1059. OnPrepareDC(&dc);
  1060. CPoint local = point;
  1061. dc.DPtoLP(&local);
  1062. m_mouseState = FALSE;
  1063. m_endPoint = local;
  1064. if (ObjectAt(local))
  1065. _tprintf(_T("松开鼠标:x:%d, y:%d\n"), point.x, point.y);
  1066. // 图元类型不为空,且图元对象不为空,完成新图元;
  1067. if ((g_nElementNo != 0) && (m_tempObj != NULL))
  1068. {//添加新图元;
  1069. if ((g_nElementNo == POLYGON || g_nElementNo == ZHELINE) && m_bPolygon)
  1070. {// 如果是折线,不完成图元;
  1071. ;
  1072. }
  1073. else
  1074. {
  1075. // 图元大小;
  1076. m_tempObj->m_rect = CRect(m_startPoint, m_endPoint);
  1077. if ((abs(CPoint(m_endPoint - m_startPoint).x) < 6) && (abs(CPoint(m_endPoint - m_startPoint).y) < 6))
  1078. {// 如果生成的图元区域过小,删除图元,认为不生成;
  1079. Remove(m_tempObj);
  1080. delete m_tempObj;
  1081. m_tempObj = NULL;
  1082. g_nElementNo = 0;
  1083. }
  1084. else // 图元添加成功了,做临时文件处理;
  1085. {
  1086. if (m_nRudoPosition == 0) //上一次也是编辑;
  1087. {
  1088. ExchangeSave();
  1089. if (m_nCanUndoTimes < 5)
  1090. {
  1091. m_nCanUndoTimes++;
  1092. }
  1093. }
  1094. else //上一次不是编辑;
  1095. {
  1096. FileProcess();
  1097. }
  1098. m_nRudoPosition = 0;
  1099. m_nCanRedoTimes = 0;
  1100. }
  1101. }
  1102. }
  1103. if (m_bRectSelect) //选中一堆图元;
  1104. {
  1105. m_mouseRect.NormalizeRect();
  1106. ObjectIn();
  1107. }
  1108. if ((m_bMoveElements == TRUE) && (!m_bFreezed)) //移动,也要临时文件记录;
  1109. {
  1110. if (m_nRudoPosition == 0) //上一次也是编辑;
  1111. {
  1112. ExchangeSave();
  1113. }
  1114. else //上一次不是编辑;
  1115. {
  1116. FileProcess();
  1117. }
  1118. m_nRudoPosition = 0;
  1119. m_nCanRedoTimes = 0;
  1120. }
  1121. if (m_bDrag)
  1122. {// 放开拖动;
  1123. if (m_nRudoPosition == 0) //上一次也是编辑;
  1124. {
  1125. ExchangeSave();
  1126. }
  1127. else //上一次不是编辑;
  1128. {
  1129. FileProcess();
  1130. }
  1131. m_nRudoPosition = 0;
  1132. m_nCanRedoTimes = 0;
  1133. }
  1134. m_bMoveElements = FALSE;
  1135. m_bDrag = FALSE;
  1136. m_mouseRect = CRect(0, 0, 0, 0);
  1137. m_bRectSelect = FALSE;
  1138. Invalidate(FALSE);
  1139. CScrollView::OnLButtonUp(nFlags, point);
  1140. }
  1141. void CIDEView::OnRButtonDblClk(UINT nFlags, CPoint point)
  1142. {
  1143. // TODO: 在此添加消息处理程序代码和/或调用默认值
  1144. CScrollView::OnRButtonDblClk(nFlags, point);
  1145. }
  1146. //属性设定
  1147. void CIDEView::OnLButtonDblClk(UINT nFlags, CPoint point)
  1148. {
  1149. if (CDrawObj::bRuning == TRUE)
  1150. {
  1151. //CClientDC dc(this);
  1152. //OnPrepareDC(&dc);
  1153. CPoint local = point;
  1154. //dc.DPtoLP(&local);
  1155. CDrawObj *pObj = ObjectAt(local);
  1156. if (pObj != NULL)
  1157. {
  1158. CString sVarName;
  1159. if (pObj->m_bVariant && pObj->m_strCaption != "")
  1160. sVarName = pObj->m_strCaption;
  1161. else if (pObj->m_strDynShow != "")
  1162. sVarName = GetVarNameFromGS(pObj->m_strDynShow);
  1163. else if (pObj->m_strDynForeCon != "")
  1164. sVarName = GetVarNameFromGS(pObj->m_strDynForeCon);
  1165. else if (pObj->m_strDynBackCon != "")
  1166. sVarName = GetVarNameFromGS(pObj->m_strDynBackCon);
  1167. else if (pObj->m_strDynLineCon != "")
  1168. sVarName = GetVarNameFromGS(pObj->m_strDynLineCon);
  1169. else if (pObj->m_strHoriPos != "")
  1170. sVarName = GetVarNameFromGS(pObj->m_strHoriPos);
  1171. else if (pObj->m_strHoriSize != "")
  1172. sVarName = GetVarNameFromGS(pObj->m_strHoriSize);
  1173. else if (pObj->m_strVertiPos != "")
  1174. sVarName = GetVarNameFromGS(pObj->m_strVertiPos);
  1175. else if (pObj->m_strVertiSize != "")
  1176. sVarName = GetVarNameFromGS(pObj->m_strVertiSize);
  1177. else if (pObj->m_strCurrentCaption != "")
  1178. sVarName = GetVarNameFromGS(pObj->m_strCurrentCaption);
  1179. if (pObj->IsKindOf(RUNTIME_CLASS(CDrawBitmap)) && sVarName == "")
  1180. {
  1181. if (((CDrawBitmap *)pObj)->m_strDynCondition != "")
  1182. sVarName = GetVarNameFromGS(((CDrawBitmap *)pObj)->m_strDynCondition);
  1183. }
  1184. if (pObj->IsKindOf(RUNTIME_CLASS(CDrawGif)) && sVarName == "")
  1185. {
  1186. if (((CDrawGif *)pObj)->m_strDynCondition != "")
  1187. sVarName = GetVarNameFromGS(((CDrawGif *)pObj)->m_strDynCondition);
  1188. }
  1189. if (sVarName != "")
  1190. {
  1191. }
  1192. }
  1193. return;
  1194. }
  1195. if (m_selection.GetCount() < 1) {
  1196. return;
  1197. }
  1198. CClientDC dc(this);
  1199. OnPrepareDC(&dc);
  1200. CPoint local = point;
  1201. dc.DPtoLP(&local);
  1202. if ((g_nElementNo = POLYGON || g_nElementNo == ZHELINE) && m_tempObj != NULL && m_bPolygon)
  1203. {
  1204. //((CDrawPoly*)m_tempObj)->AddPoint(local);
  1205. m_bPolygon = false;
  1206. //((CDrawPoly*)m_tempObj)->RecalcBounds();
  1207. CRect freshRect = m_tempObj->m_rect;
  1208. freshRect.NormalizeRect();
  1209. freshRect.InflateRect(4, 4);
  1210. InvalidateRect(freshRect, FALSE);
  1211. m_tempObj = NULL;
  1212. g_nElementNo = 0;
  1213. }
  1214. else
  1215. {
  1216. if (m_selection.GetCount() > 1)
  1217. {
  1218. COLORREF _clrFore; // 前景色
  1219. COLORREF _clrLine; // 线色
  1220. COLORREF _clrBack; // 背景色
  1221. COLORREF _clrFill; // 填充色
  1222. LOGFONT _logfont; // 字体
  1223. CString _strLineType; // 线型
  1224. int _nLineWidth; // 线宽
  1225. int _nFillMode; //填充類型
  1226. int nPosIndex = 0;
  1227. POSITION pos = m_selection.GetHeadPosition();
  1228. while (pos != NULL)
  1229. {
  1230. CDrawObj* pObj = m_selection.GetNext(pos);
  1231. pObj->m_bModifyMore = TRUE;
  1232. if (nPosIndex == 0)
  1233. {
  1234. if (pObj->OnAttrib())
  1235. {
  1236. m_bModified = TRUE;
  1237. _clrFore = pObj->m_clrFore;
  1238. _clrLine = pObj->m_clrLine;
  1239. _clrBack = pObj->m_clrBack;
  1240. _clrFill = pObj->m_clrFill;
  1241. _logfont = pObj->m_logfont;
  1242. _strLineType = pObj->m_strLineType;
  1243. _nLineWidth = pObj->m_nLineWidth;
  1244. _nFillMode = pObj->m_nFillMode;
  1245. }
  1246. else
  1247. {
  1248. return;
  1249. }
  1250. }
  1251. else
  1252. {
  1253. pObj->m_clrFore = _clrFore;
  1254. pObj->m_clrLine = _clrLine;
  1255. pObj->m_clrBack = _clrBack;
  1256. pObj->m_clrFill = _clrFill;
  1257. pObj->m_logfont = _logfont;
  1258. pObj->m_strLineType = _strLineType;
  1259. pObj->m_nLineWidth = _nLineWidth;
  1260. pObj->m_nFillMode = _nFillMode;
  1261. }
  1262. CRect freshRect = pObj->m_rect;
  1263. freshRect.NormalizeRect();
  1264. freshRect.InflateRect(4, 4);
  1265. InvalidateRect(freshRect, FALSE);
  1266. g_nElementNo = 0;
  1267. nPosIndex++;
  1268. }
  1269. }
  1270. else
  1271. {
  1272. POSITION pos = m_selection.GetHeadPosition();
  1273. CDrawObj *pObj = m_selection.GetNext(pos);
  1274. pObj->m_bModifyMore = FALSE;
  1275. if (pObj->OnAttrib())
  1276. m_bModified = TRUE;
  1277. CRect freshRect = pObj->m_rect;
  1278. freshRect.NormalizeRect();
  1279. freshRect.InflateRect(4, 4);
  1280. InvalidateRect(freshRect, FALSE);
  1281. g_nElementNo = 0;
  1282. }
  1283. }
  1284. CScrollView::OnLButtonDblClk(nFlags, point);
  1285. }
  1286. // 判断是有效变量名
  1287. BOOL CIDEView::IsValidChar(char chr)
  1288. {
  1289. if (chr >= '0' && chr <= '9')
  1290. return TRUE;
  1291. else if ((chr >= 'A' && chr <= 'Z') || (chr >= 'a' && chr <= 'z'))
  1292. return TRUE;
  1293. else if (chr == '_')
  1294. return TRUE;
  1295. else
  1296. return FALSE;
  1297. }
  1298. //从组合公式中找出变量名加入到画面结构中
  1299. CString CIDEView::GetVarNameFromGS(CString sGS)
  1300. {
  1301. //LOG4C((LOG_NOTICE, "GetVarFromGSAddToStruct sGS :%s", sGS));
  1302. //sGS = "(HG7053_DI10>=3)OR(HG7053_LinkStatus<=33)";
  1303. //sGS = "((HG7053_DI10>=3))";
  1304. //sGS = "(HG7053_DI10>=3)AND(HG7053_LinkStatus<=33)OR(HG7053_DI15<3)";
  1305. int nLen = sGS.GetLength();
  1306. int nPos1 = 0, nPos2 = 0;
  1307. int nPos3 = 0, nPos4 = 0;
  1308. CString sTemp, s1, s2, s3;
  1309. CString sGS2[10];
  1310. int nCount = 0;
  1311. //OR AND NOT
  1312. for (int i = 0; i < nLen; i++)
  1313. {
  1314. if (sGS.Mid(i, 2) == "OR")
  1315. {
  1316. sGS2[nCount++] = sGS.Mid(nPos1, i - nPos1);
  1317. nPos1 = i + 2;
  1318. }
  1319. if ((sGS.Mid(i, 3) == "AND" || sGS.Mid(i, 3) == "NOT"))
  1320. {
  1321. sGS2[nCount++] = sGS.Mid(nPos1, i - nPos1);
  1322. nPos1 = i + 3;
  1323. }
  1324. }
  1325. if (nPos1 < nLen)
  1326. {
  1327. sGS2[nCount++] = sGS.Mid(nPos1, nLen - nPos1);
  1328. }
  1329. for (int iGSIndex = 0; iGSIndex < nCount; iGSIndex++)
  1330. {
  1331. nPos3 = 0;
  1332. nPos4 = 0;
  1333. nLen = sGS2[iGSIndex].GetLength();
  1334. if (!IsValidChar(sGS2[iGSIndex][0]))
  1335. {
  1336. if (IsValidChar(sGS2[iGSIndex][1]))
  1337. nPos3 = 1;
  1338. else
  1339. nPos3 = 2;
  1340. for (int i = nPos3; i < nLen; i++)
  1341. {
  1342. if (!IsValidChar(sGS2[iGSIndex][i]))
  1343. {
  1344. nPos4 = i - 0;
  1345. break;
  1346. }
  1347. }
  1348. sTemp = sGS2[iGSIndex].Mid(nPos3, nPos4 - nPos3);
  1349. }
  1350. else
  1351. {
  1352. for (int i = nPos3; i < nLen; i++)
  1353. {
  1354. if (!IsValidChar(sGS2[iGSIndex][i]))
  1355. {
  1356. nPos4 = i - 0;
  1357. break;
  1358. }
  1359. }
  1360. sTemp = sGS2[iGSIndex].Mid(nPos3, nPos4 - nPos3);
  1361. }
  1362. }
  1363. return sTemp;
  1364. }
  1365. CDrawObj * CIDEView::CreateDrawObjbyNo(int objNo)
  1366. {
  1367. if (objNo == TlineShape)
  1368. {
  1369. CDrawTLine * temp = new CDrawTLine();
  1370. temp->m_pView = this;
  1371. CDrawObj * ele = (CDrawObj *)temp;
  1372. return ele;
  1373. }
  1374. if (objNo == TextShape)
  1375. {
  1376. CDrawText * temp = new CDrawText();
  1377. temp->m_pView = this;
  1378. CDrawObj * ele = (CDrawObj *)temp;
  1379. return ele;
  1380. }
  1381. if (objNo == RectShape)
  1382. {
  1383. CDrawRect * temp = new CDrawRect();
  1384. temp->m_pView = this;
  1385. CDrawObj * ele = (CDrawObj *)temp;
  1386. return ele;
  1387. }
  1388. if (objNo == BUTTON)
  1389. {
  1390. CDrawButton * temp = new CDrawButton();
  1391. temp->m_pView = this;
  1392. CDrawObj * ele = (CDrawObj *)temp;
  1393. return ele;
  1394. }
  1395. if (objNo == LINE)
  1396. {
  1397. CDrawLine * temp = new CDrawLine();
  1398. temp->m_pView = this;
  1399. CDrawObj * ele = (CDrawObj *)temp;
  1400. return ele;
  1401. }
  1402. if (objNo == BitmapShape)
  1403. {
  1404. CDrawBitmap * temp = new CDrawBitmap();
  1405. temp->m_pView = this;
  1406. CDrawObj * ele = (CDrawObj *)temp;
  1407. return ele;
  1408. }
  1409. if (objNo == GifShape)
  1410. {
  1411. CDrawGif* temp = new CDrawGif();
  1412. temp->m_pView = this;
  1413. CDrawObj* ele = (CDrawObj *)temp;
  1414. return ele;
  1415. }
  1416. if (objNo == TRANSFER)
  1417. {
  1418. CDrawTransfer * temp = new CDrawTransfer();
  1419. temp->m_pView = this;
  1420. CDrawObj * ele = (CDrawObj *)temp;
  1421. return ele;
  1422. }
  1423. if (objNo == ROUNDRECT)
  1424. {
  1425. CDrawRoundRect * temp = new CDrawRoundRect();
  1426. temp->m_pView = this;
  1427. CDrawObj * ele = (CDrawObj *)temp;
  1428. return ele;
  1429. }
  1430. if (objNo == GIF)
  1431. {
  1432. CDrawGif* temp = new CDrawGif();
  1433. temp->m_pView = this;
  1434. CDrawObj * ele = (CDrawObj *)temp;
  1435. return ele;
  1436. }
  1437. if (objNo == FLASH)
  1438. {
  1439. CDrawFlash* temp = new CDrawFlash();
  1440. temp->m_pView = this;
  1441. CDrawObj * ele = (CDrawObj *)temp;
  1442. return ele;
  1443. }
  1444. //if ( objNo == FLASH )
  1445. //{
  1446. // CDrawFlash* temp = new CDrawFlash();
  1447. // temp->m_pView = this;
  1448. // CDrawObj * ele = (CDrawObj *)temp;
  1449. // return ele;
  1450. //}
  1451. return NULL;
  1452. }
  1453. void CIDEView::OnPointer()
  1454. {
  1455. g_nElementNo = 0;
  1456. }
  1457. void CIDEView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  1458. {
  1459. int n = nRepCnt;
  1460. BOOL bShiftDown = (GetKeyState(VK_SHIFT) & 0xf0);
  1461. if (!bShiftDown)
  1462. {
  1463. if (GetKeyState(VK_CONTROL) & 0xf0)
  1464. {
  1465. n *= 10;
  1466. }
  1467. }
  1468. switch (nChar)
  1469. {
  1470. case VK_UP:
  1471. if (bShiftDown) KeyMove(0, 0, 0, -n);
  1472. else KeyMove(0, -n, 0, -n);
  1473. m_bModified = TRUE;
  1474. break;
  1475. case VK_DOWN:
  1476. if (bShiftDown) KeyMove(0, 0, 0, n);
  1477. else KeyMove(0, n, 0, n);
  1478. m_bModified = TRUE;
  1479. break;
  1480. case VK_LEFT:
  1481. if (bShiftDown) KeyMove(0, 0, -n, 0);
  1482. else KeyMove(-n, 0, -n, 0);
  1483. m_bModified = TRUE;
  1484. break;
  1485. case VK_RIGHT:
  1486. if (bShiftDown) KeyMove(0, 0, n, 0);
  1487. else KeyMove(n, 0, n, 0);
  1488. m_bModified = TRUE;
  1489. break;
  1490. case VK_DELETE:
  1491. #if 0
  1492. POSITION pos = m_selection.GetHeadPosition();
  1493. while (pos != NULL)
  1494. {
  1495. CDrawObj *pObj = m_selection.GetNext(pos);
  1496. Remove(pObj);
  1497. delete pObj;
  1498. m_bModified = TRUE;
  1499. }
  1500. m_selection.RemoveAll();
  1501. #endif
  1502. for (POSITION pos = m_selection.GetHeadPosition(); pos != NULL;)
  1503. {
  1504. POSITION pos1 = pos; //要在这里做一个备份
  1505. CDrawObj *pObj = m_selection.GetNext(pos);//他会改变 pos的值
  1506. Remove(pObj);
  1507. if (pObj != NULL)
  1508. {
  1509. delete pObj;
  1510. pObj = NULL;
  1511. }
  1512. //m_selection.RemoveAt(pos1);
  1513. m_bModified = TRUE;
  1514. }
  1515. m_selection.RemoveAll();
  1516. break;
  1517. }
  1518. Invalidate(FALSE);
  1519. CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
  1520. }
  1521. void CIDEView::KeyMove(int x1, int y1, int x2, int y2)
  1522. {
  1523. POSITION pos = m_selection.GetHeadPosition();
  1524. while (pos != NULL)
  1525. {
  1526. CDrawObj* pObj = m_selection.GetNext(pos);
  1527. CRect rect = pObj->m_rect;
  1528. if (rect.left < rect.right)
  1529. {
  1530. rect.left += x1;
  1531. rect.right += x2;
  1532. }
  1533. else
  1534. {
  1535. rect.left += x2;
  1536. rect.right += x1;
  1537. }
  1538. if (rect.top < rect.bottom)
  1539. {
  1540. rect.top += y1;
  1541. rect.bottom += y2;
  1542. }
  1543. else
  1544. {
  1545. rect.top += y2;
  1546. rect.bottom += y1;
  1547. }
  1548. pObj->MoveTo(rect);
  1549. m_bModified = TRUE;
  1550. }
  1551. }
  1552. CDrawObj* CIDEView::ObjectAt(CPoint point)
  1553. {
  1554. CRect rect(point, CSize(1, 1));
  1555. POSITION pos = m_pGraph->m_DrawObjList.GetTailPosition();
  1556. while (pos != NULL)
  1557. {
  1558. CDrawObj* pObj = m_pGraph->m_DrawObjList.GetPrev(pos);
  1559. if (pObj->Intersects(rect) && pObj->m_bShow)
  1560. return pObj;
  1561. }
  1562. return NULL;
  1563. }
  1564. BOOL CIDEView::IsSelected(CDrawObj* pDrawObj)
  1565. {
  1566. return m_selection.Find((CObject *)pDrawObj) != NULL;
  1567. }
  1568. void CIDEView::Select(CDrawObj* pObj, BOOL bAdd)
  1569. {
  1570. if (!bAdd)
  1571. {
  1572. POSITION pos = m_selection.GetHeadPosition();
  1573. while (pos != NULL)
  1574. {
  1575. CDrawObj* pObj = m_selection.GetNext(pos);
  1576. pObj->Invalidate();
  1577. }
  1578. m_selection.RemoveAll();
  1579. }
  1580. if (pObj == NULL || IsSelected(pObj)) return;
  1581. {
  1582. m_selection.AddTail(pObj);
  1583. pObj->Invalidate();
  1584. }
  1585. }
  1586. void CIDEView::Remove(CDrawObj* pObj)
  1587. {
  1588. POSITION pos;
  1589. pos = m_selection.Find(pObj);
  1590. if (pos != NULL) m_selection.RemoveAt(pos);
  1591. pos = m_pGraph->m_DrawObjList.Find(pObj);
  1592. if (pos != NULL) m_pGraph->m_DrawObjList.RemoveAt(pos);
  1593. m_bModified = TRUE;
  1594. }
  1595. void CIDEView::OnFileNew()
  1596. {
  1597. if (m_bModified)
  1598. {
  1599. if (MessageBox(g_strSaveModify, g_strSelect, MB_YESNO | MB_ICONQUESTION) == IDYES)
  1600. OnFileSave();
  1601. }
  1602. m_selection.RemoveAll();
  1603. m_freezed.RemoveAll();
  1604. m_pGraph->SetPicFile("");
  1605. m_pGraph->Load();
  1606. Invalidate(FALSE);
  1607. POINT point;
  1608. point.x = 0;
  1609. point.y = 0;
  1610. ScrollToPosition(point);
  1611. m_bModified = TRUE;
  1612. }
  1613. void CIDEView::OnFileOpen()
  1614. {
  1615. if (m_bModified)
  1616. {
  1617. if (MessageBox(g_strSaveModify, g_strSelect, MB_YESNO | MB_ICONQUESTION) == IDYES)
  1618. OnFileSave();
  1619. }
  1620. DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  1621. CString strFindPicFile = "";
  1622. LPSTR lpszFile = (char*)(const char*)strFindPicFile;
  1623. LPSTR lpszFilter = (char *)(LPCTSTR)g_strPictureFile2;
  1624. CFileDialog dlg(TRUE, ".view", lpszFile, dwFlags, lpszFilter);
  1625. if (dlg.DoModal() == IDOK)
  1626. {
  1627. m_selection.RemoveAll();
  1628. m_freezed.RemoveAll();
  1629. CString strPicFile = dlg.GetPathName();
  1630. ASSERT(!strPicFile.IsEmpty());
  1631. m_pGraph->SetPicFile(strPicFile);
  1632. m_pGraph->Load();
  1633. //应该保存
  1634. char tmpPathc[_MAX_PATH + 1];
  1635. GetTempPath(_MAX_PATH, tmpPathc);
  1636. CString tmpPath = tmpPathc;
  1637. CString oldFile = m_pGraph->m_strPicFile;
  1638. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1639. m_pGraph->Store();
  1640. m_pGraph->m_strPicFile = oldFile;
  1641. RefreshScrollSizes();
  1642. POINT point;
  1643. point.x = 0;
  1644. point.y = 0;
  1645. ScrollToPosition(point);
  1646. m_bModified = FALSE;
  1647. }
  1648. }
  1649. void CIDEView::OnFileSave()
  1650. {
  1651. if (m_pGraph->m_strPicFile.IsEmpty())
  1652. OnFileSaveAs();
  1653. else
  1654. {
  1655. CRect rect = CRect(CPoint(0, 0), m_pGraph->m_sizePic);
  1656. POSITION pos = m_pGraph->m_DrawObjList.GetHeadPosition();
  1657. while (pos != NULL)
  1658. {
  1659. CDrawObj *pObj = m_pGraph->m_DrawObjList.GetNext(pos);
  1660. CRect r = pObj->m_rect;
  1661. r.NormalizeRect();
  1662. if ((r & rect).IsRectEmpty())
  1663. {
  1664. Remove(pObj);
  1665. delete pObj;
  1666. }
  1667. }
  1668. m_pGraph->Store();
  1669. m_bModified = FALSE;
  1670. }
  1671. }
  1672. void CIDEView::FileSave()
  1673. {
  1674. if (m_pGraph->m_strPicFile.IsEmpty())
  1675. OnFileSaveAs();
  1676. else
  1677. {
  1678. CRect rect = CRect(CPoint(0, 0), m_pGraph->m_sizePic);
  1679. POSITION pos = m_pGraph->m_DrawObjList.GetHeadPosition();
  1680. while (pos != NULL)
  1681. {
  1682. CDrawObj *pObj = m_pGraph->m_DrawObjList.GetNext(pos);
  1683. CRect r = pObj->m_rect;
  1684. r.NormalizeRect();
  1685. if ((r & rect).IsRectEmpty())
  1686. {
  1687. Remove(pObj);
  1688. delete pObj;
  1689. }
  1690. }
  1691. m_pGraph->Store();
  1692. m_bModified = FALSE;
  1693. }
  1694. }
  1695. void CIDEView::OnFileSaveAs()
  1696. {
  1697. DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  1698. CString strFindPicFile = "";
  1699. LPSTR lpszFile = (char*)(const char*)strFindPicFile;
  1700. LPSTR lpszFilter = (char *)(LPCTSTR)g_strPictureFile2;
  1701. CFileDialog dlg(FALSE, ".view", lpszFile, dwFlags, lpszFilter);
  1702. if (dlg.DoModal() == IDOK)
  1703. {
  1704. CString strPicFile = dlg.GetPathName();
  1705. ASSERT(!strPicFile.IsEmpty());
  1706. m_pGraph->SetPicFile(strPicFile);
  1707. OnFileSave();
  1708. }
  1709. }
  1710. void CIDEView::RefreshScrollSizes(void)
  1711. {
  1712. CSize sizeTotal = m_pGraph->m_sizePic;
  1713. CSize sizePage = CSize(200, 200);
  1714. CSize sizeLine = CSize(10, 10);
  1715. SetScrollSizes(MM_TEXT, sizeTotal, sizePage, sizeLine);
  1716. Invalidate(FALSE);
  1717. }
  1718. void CIDEView::OnAppExit()
  1719. {
  1720. if (m_bModified)
  1721. {
  1722. if (MessageBox(g_strSaveModify, g_strSelect, MB_YESNO | MB_ICONQUESTION) == IDYES)
  1723. OnFileSave();
  1724. }
  1725. CMainFrame *pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  1726. pMainFrm->OnSuperEnd();
  1727. }
  1728. CRect CIDEView::GetAlignRect(void)
  1729. {
  1730. CDrawObj* pObj = m_selection.GetTail();
  1731. CRect rect = pObj->m_rect;
  1732. rect.NormalizeRect();
  1733. return rect;
  1734. }
  1735. void CIDEView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
  1736. {
  1737. CString sTemp;
  1738. int nTemp = 0;
  1739. if (m_pGraph->m_Type == 0)
  1740. {
  1741. int nOffsetX = pDC->GetDeviceCaps(PHYSICALOFFSETX);
  1742. int nOffsetY = pDC->GetDeviceCaps(PHYSICALOFFSETY);
  1743. int nLogPixelX = pDC->GetDeviceCaps(LOGPIXELSX);
  1744. int nLogPixelY = pDC->GetDeviceCaps(LOGPIXELSY);
  1745. pDC->SetMapMode(MM_ISOTROPIC);
  1746. pDC->SetWindowExt(100, 100);
  1747. pDC->SetViewportExt(nLogPixelX, nLogPixelY);
  1748. pDC->SetViewportOrg(-nOffsetX, -nOffsetY);
  1749. m_pGraph->Draw(pDC, sTemp, nTemp);
  1750. }
  1751. else
  1752. {
  1753. CSize size = m_pGraph->m_sizePic;
  1754. int nHScale = pInfo->m_rectDraw.Width() / size.cx;
  1755. int nVScale = pInfo->m_rectDraw.Height() / size.cy;
  1756. int nScale = min(nHScale, nVScale);
  1757. pDC->SetMapMode(MM_ISOTROPIC);
  1758. pDC->SetWindowExt(1000, 1000);
  1759. pDC->SetViewportExt(1000 * nScale, 1000 * nScale);
  1760. int nHOffset = pInfo->m_rectDraw.Width() - nScale*size.cx;
  1761. int nVOffset = pInfo->m_rectDraw.Height() - nScale*size.cy;
  1762. pDC->SetViewportOrg(nHOffset / 2, nVOffset / 2);
  1763. m_pGraph->Print(pDC);
  1764. }
  1765. }
  1766. void CIDEView::OnUpdateDeskGrid(CCmdUI* pCmdUI)
  1767. {
  1768. if (g_bRun) {
  1769. pCmdUI->Enable(FALSE);
  1770. }
  1771. else
  1772. pCmdUI->Enable(TRUE);
  1773. pCmdUI->SetCheck(m_pGraph->m_bGrid);
  1774. }
  1775. void CIDEView::OnUpdateEditFreeze(CCmdUI* pCmdUI)
  1776. {
  1777. pCmdUI->SetCheck(m_bFreezed);
  1778. }
  1779. //选出载鼠标拖动区域的图元
  1780. void CIDEView::ObjectIn()
  1781. {
  1782. POSITION pos = m_pGraph->m_DrawObjList.GetTailPosition();
  1783. while (pos != NULL)
  1784. {
  1785. CDrawObj* pObj = m_pGraph->m_DrawObjList.GetPrev(pos);
  1786. CRect r = pObj->m_rect;
  1787. r.NormalizeRect();
  1788. if ((r.left > m_mouseRect.left) && (r.right < m_mouseRect.right)
  1789. && (r.bottom < m_mouseRect.bottom) && (r.top > m_mouseRect.top))
  1790. m_selection.AddTail(pObj);
  1791. }
  1792. }
  1793. //用作do/redo的
  1794. void CIDEView::ExchangeSave()
  1795. {
  1796. char tmpPathc[_MAX_PATH + 1];
  1797. GetTempPath(_MAX_PATH, tmpPathc);
  1798. CString tmpPath = tmpPathc;
  1799. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"));
  1800. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\Six.ed"));
  1801. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed"));
  1802. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Third.ed"), _T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"));
  1803. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Second.ed"), _T(tmpPath + "\\VDTemp\\" + "\\Third.ed"));
  1804. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\First.ed"), _T(tmpPath + "\\VDTemp\\" + "\\Second.ed"));
  1805. CString oldFile = m_pGraph->m_strPicFile;
  1806. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\First.ed");
  1807. m_pGraph->Store();
  1808. m_pGraph->m_strPicFile = oldFile;
  1809. }
  1810. void CIDEView::OnRedo() // 重做;
  1811. {
  1812. POSITION pos = m_selection.GetHeadPosition();
  1813. while (pos != NULL)
  1814. {
  1815. CDrawObj* pObj = m_selection.GetNext(pos);
  1816. pObj->Invalidate();
  1817. }
  1818. m_selection.RemoveAll();
  1819. char tmpPathc[_MAX_PATH + 1];
  1820. GetTempPath(_MAX_PATH, tmpPathc);
  1821. CString tmpPath = tmpPathc;
  1822. CString oldFile = m_pGraph->m_strPicFile;
  1823. if (m_nRudoPosition == -1)
  1824. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1825. else if (m_nRudoPosition == -2)
  1826. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\second.ed");
  1827. else if (m_nRudoPosition == -3)
  1828. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\third.ed");
  1829. else if (m_nRudoPosition == -4)
  1830. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\forth.ed");
  1831. else if (m_nRudoPosition == -5)
  1832. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\fifth.ed");
  1833. else
  1834. return;
  1835. m_pGraph->Load();
  1836. m_pGraph->m_strPicFile = oldFile;
  1837. m_nRudoPosition++;
  1838. m_nCanUndoTimes++;
  1839. m_nCanRedoTimes--;
  1840. Invalidate(FALSE);
  1841. }
  1842. void CIDEView::OnUndo() // 撤销;
  1843. {
  1844. POSITION pos = m_selection.GetHeadPosition();
  1845. while (pos != NULL)
  1846. {
  1847. CDrawObj* pObj = m_selection.GetNext(pos);
  1848. pObj->Invalidate();
  1849. }
  1850. m_selection.RemoveAll();
  1851. char tmpPathc[_MAX_PATH + 1];
  1852. GetTempPath(_MAX_PATH, tmpPathc);
  1853. CString tmpPath = tmpPathc;
  1854. CString oldFile = m_pGraph->m_strPicFile;
  1855. if (m_nRudoPosition == 0)
  1856. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\second.ed");
  1857. if (m_nRudoPosition == -1)
  1858. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\third.ed");
  1859. if (m_nRudoPosition == -2)
  1860. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\forth.ed");
  1861. if (m_nRudoPosition == -3)
  1862. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\fifth.ed");
  1863. if (m_nRudoPosition == -4)
  1864. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\six.ed");
  1865. if (m_nRudoPosition == -5) return;
  1866. m_pGraph->Load();
  1867. m_pGraph->m_strPicFile = oldFile;
  1868. m_nRudoPosition--;
  1869. m_nCanUndoTimes--;
  1870. m_nCanRedoTimes++;
  1871. Invalidate(FALSE);
  1872. }
  1873. void CIDEView::FileProcess()
  1874. {
  1875. char tmpPathc[_MAX_PATH + 1];
  1876. GetTempPath(_MAX_PATH, tmpPathc);
  1877. CString tmpPath = tmpPathc;
  1878. if (m_nRudoPosition == -1)
  1879. {
  1880. CString oldFile = m_pGraph->m_strPicFile;
  1881. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1882. m_pGraph->Store();
  1883. m_pGraph->m_strPicFile = oldFile;
  1884. }
  1885. if (m_nRudoPosition == -2)
  1886. {
  1887. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Second.ed"));
  1888. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Third.ed"), _T(tmpPath + "\\VDTemp\\" + "\\second.ed"));
  1889. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\third.ed"));
  1890. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\forth.ed"));
  1891. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), _T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"));
  1892. CFile file6(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1893. file6.Close();
  1894. CString oldFile = m_pGraph->m_strPicFile;
  1895. if (m_nRudoPosition == 0)
  1896. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1897. m_pGraph->Store();
  1898. m_pGraph->m_strPicFile = oldFile;
  1899. }
  1900. if (m_nRudoPosition == -3)
  1901. {
  1902. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Second.ed"));
  1903. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Third.ed"));
  1904. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\second.ed"));
  1905. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\third.ed"));
  1906. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), _T(tmpPath + "\\VDTemp\\" + "\\forth.ed"));
  1907. CFile file6(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1908. file6.Close();
  1909. CFile file5(_T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1910. file5.Close();
  1911. CString oldFile = m_pGraph->m_strPicFile;
  1912. if (m_nRudoPosition == 0)
  1913. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1914. m_pGraph->Store();
  1915. m_pGraph->m_strPicFile = oldFile;
  1916. }
  1917. if (m_nRudoPosition == -4)
  1918. {
  1919. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Second.ed"));
  1920. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\third.ed"));
  1921. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"));
  1922. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\second.ed"));
  1923. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\six.ed"), _T(tmpPath + "\\VDTemp\\" + "\\third.ed"));
  1924. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Fifth.ed"), _T(tmpPath + "\\VDTemp\\" + "\\forth.ed"));
  1925. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), _T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"));
  1926. CFile file4(_T(tmpPath + "\\VDTemp\\" + "\\forth.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1927. file4.Close();
  1928. CFile file6(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1929. file6.Close();
  1930. CFile file5(_T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1931. file5.Close();
  1932. CString oldFile = m_pGraph->m_strPicFile;
  1933. if (m_nRudoPosition == 0)
  1934. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1935. m_pGraph->Store();
  1936. m_pGraph->m_strPicFile = oldFile;
  1937. }
  1938. if (m_nRudoPosition == -5)
  1939. {
  1940. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Second.ed"));
  1941. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\third.ed"));
  1942. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\Forth.ed"));
  1943. CFile::Remove(_T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"));
  1944. CFile::Rename(_T(tmpPath + "\\VDTemp\\" + "\\six.ed"), _T(tmpPath + "\\VDTemp\\" + "\\second.ed"));
  1945. CFile file4(_T(tmpPath + "\\VDTemp\\" + "\\forth.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1946. file4.Close();
  1947. CFile file6(_T(tmpPath + "\\VDTemp\\" + "\\Six.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1948. file6.Close();
  1949. CFile file5(_T(tmpPath + "\\VDTemp\\" + "\\fifth.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1950. file5.Close();
  1951. CFile file3(_T(tmpPath + "\\VDTemp\\" + "\\third.ed"), CFile::modeReadWrite | CFile::modeCreate);
  1952. file3.Close();
  1953. CString oldFile = m_pGraph->m_strPicFile;
  1954. if (m_nRudoPosition == 0)
  1955. m_pGraph->m_strPicFile = _T(tmpPath + "\\VDTemp\\" + "\\first.ed");
  1956. m_pGraph->Store();
  1957. m_pGraph->m_strPicFile = oldFile;
  1958. }
  1959. }
  1960. void CIDEView::OnUpdateUndo(CCmdUI* pCmdUI)
  1961. {
  1962. if (g_bRun == FALSE && m_nCanUndoTimes) {
  1963. pCmdUI->Enable(TRUE);
  1964. }
  1965. else
  1966. pCmdUI->Enable(FALSE);
  1967. }
  1968. void CIDEView::OnUpdateRedo(CCmdUI* pCmdUI)
  1969. {
  1970. if (g_bRun == FALSE && m_nCanRedoTimes) {
  1971. pCmdUI->Enable(TRUE);
  1972. }
  1973. else
  1974. pCmdUI->Enable(FALSE);
  1975. }
  1976. void CIDEView::OnPicsize()
  1977. {
  1978. CPicSizeDlg dlg;
  1979. dlg.m_nPictureHeight = m_pGraph->m_sizePic.cy;
  1980. dlg.m_nPictureWidth = m_pGraph->m_sizePic.cx;
  1981. dlg.m_nGridSize = m_pGraph->m_sizeGrid.cx;
  1982. dlg.m_clrBack = m_pGraph->m_clrBack;
  1983. dlg.m_bGrid = m_pGraph->m_bGrid;
  1984. if (dlg.DoModal() == IDOK)
  1985. {
  1986. m_pGraph->m_sizePic.cy = dlg.m_nPictureHeight;
  1987. m_pGraph->m_sizePic.cx = dlg.m_nPictureWidth;
  1988. m_pGraph->m_sizeGrid.cy = dlg.m_nGridSize;
  1989. m_pGraph->m_sizeGrid.cx = dlg.m_nGridSize;
  1990. m_pGraph->m_clrBack = dlg.m_clrBack;
  1991. m_pGraph->m_bGrid = dlg.m_bGrid;
  1992. m_bModified = TRUE;
  1993. }
  1994. RefreshScrollSizes();
  1995. }
  1996. void CIDEView::OnUpdateAlignBottom(CCmdUI* pCmdUI)
  1997. {
  1998. if ((m_selection.GetCount() > 1))
  1999. pCmdUI->Enable(TRUE);
  2000. else
  2001. pCmdUI->Enable(FALSE);
  2002. }
  2003. void CIDEView::OnUpdateAlignHcenter(CCmdUI* pCmdUI)
  2004. {
  2005. if ((m_selection.GetCount() > 1))
  2006. pCmdUI->Enable(TRUE);
  2007. else
  2008. pCmdUI->Enable(FALSE);
  2009. }
  2010. void CIDEView::OnUpdateAlignLeft(CCmdUI* pCmdUI)
  2011. {
  2012. if ((m_selection.GetCount() > 1))
  2013. pCmdUI->Enable(TRUE);
  2014. else
  2015. pCmdUI->Enable(FALSE);
  2016. }
  2017. void CIDEView::OnUpdateAlignRight(CCmdUI* pCmdUI)
  2018. {
  2019. if ((m_selection.GetCount() > 1))
  2020. pCmdUI->Enable(TRUE);
  2021. else
  2022. pCmdUI->Enable(FALSE);
  2023. }
  2024. void CIDEView::OnUpdateAlignTop(CCmdUI* pCmdUI)
  2025. {
  2026. if ((m_selection.GetCount() > 1))
  2027. pCmdUI->Enable(TRUE);
  2028. else
  2029. pCmdUI->Enable(FALSE);
  2030. }
  2031. void CIDEView::OnUpdateAlignVcenter(CCmdUI* pCmdUI)
  2032. {
  2033. if ((m_selection.GetCount() > 1))
  2034. pCmdUI->Enable(TRUE);
  2035. else
  2036. pCmdUI->Enable(FALSE);
  2037. }
  2038. void CIDEView::OnUpdateEditHinvert(CCmdUI* pCmdUI)
  2039. {
  2040. if ((m_selection.GetCount() > 0))
  2041. pCmdUI->Enable(TRUE);
  2042. else
  2043. pCmdUI->Enable(FALSE);
  2044. }
  2045. void CIDEView::OnUpdateEditMovetoback(CCmdUI* pCmdUI)
  2046. {
  2047. if ((m_selection.GetCount() > 0))
  2048. pCmdUI->Enable(TRUE);
  2049. else
  2050. pCmdUI->Enable(FALSE);
  2051. }
  2052. void CIDEView::OnUpdateEditMovetofront(CCmdUI* pCmdUI)
  2053. {
  2054. if ((m_selection.GetCount() > 0))
  2055. pCmdUI->Enable(TRUE);
  2056. else
  2057. pCmdUI->Enable(FALSE);
  2058. }
  2059. void CIDEView::OnUpdateEditVinvert(CCmdUI* pCmdUI)
  2060. {
  2061. if ((m_selection.GetCount() > 0))
  2062. pCmdUI->Enable(TRUE);
  2063. else
  2064. pCmdUI->Enable(FALSE);
  2065. }
  2066. void CIDEView::OnUpdateEditCopy(CCmdUI* pCmdUI)
  2067. {
  2068. if (m_selection.GetCount() > 0)
  2069. pCmdUI->Enable(TRUE);
  2070. else
  2071. pCmdUI->Enable(FALSE);
  2072. }
  2073. void CIDEView::OnUpdateEditCut(CCmdUI* pCmdUI)
  2074. {
  2075. if (m_selection.GetCount() > 0)
  2076. pCmdUI->Enable(TRUE);
  2077. else
  2078. pCmdUI->Enable(FALSE);
  2079. }
  2080. void CIDEView::OnUpdateEditClear(CCmdUI* pCmdUI)
  2081. {
  2082. if (m_selection.GetCount() > 0)
  2083. pCmdUI->Enable(TRUE);
  2084. else
  2085. pCmdUI->Enable(FALSE);
  2086. }
  2087. void CIDEView::OnUpdateEditPaste(CCmdUI* pCmdUI)
  2088. {
  2089. #if 1
  2090. if (g_Copied.GetCount() > 0)
  2091. pCmdUI->Enable(TRUE);
  2092. else
  2093. pCmdUI->Enable(FALSE);
  2094. #else
  2095. if (m_copied.GetCount() > 0)
  2096. pCmdUI->Enable(TRUE);
  2097. else
  2098. pCmdUI->Enable(FALSE);
  2099. #endif
  2100. }
  2101. void CIDEView::OnDrawTline()
  2102. {
  2103. g_nElementNo = TlineShape;
  2104. }
  2105. void CIDEView::OnDrawText()
  2106. {
  2107. g_nElementNo = TextShape;
  2108. }
  2109. void CIDEView::OnDrawRect()
  2110. {
  2111. g_nElementNo = RectShape;
  2112. }
  2113. void CIDEView::OnDrawData()
  2114. {
  2115. g_nElementNo = DataShape;
  2116. }
  2117. void CIDEView::OnDrawBitmap()
  2118. {
  2119. g_nElementNo = BitmapShape;
  2120. }
  2121. void CIDEView::OnDrawCurve()
  2122. {
  2123. g_nElementNo = RealCurveShape;
  2124. }
  2125. void CIDEView::OnDrawWatch()
  2126. {
  2127. g_nElementNo = WatchShape;
  2128. }
  2129. void CIDEView::OnDrawBar()
  2130. {
  2131. g_nElementNo = BarShape;
  2132. }
  2133. void CIDEView::OnDraw3drect()
  2134. {
  2135. g_nElementNo = BUTTON;
  2136. }
  2137. void CIDEView::OnDraw3circle()
  2138. {
  2139. g_nElementNo = ThreeDCircleShape;
  2140. }
  2141. void CIDEView::OnDrawOCX()
  2142. {
  2143. g_nElementNo = OCX;
  2144. }
  2145. void CIDEView::OnDrawGIF()
  2146. {
  2147. g_nElementNo = GIF;
  2148. }
  2149. void CIDEView::OnDrawFlash()
  2150. {
  2151. g_nElementNo = FLASH;
  2152. }
  2153. void CIDEView::OnUpdatePointer(CCmdUI* pCmdUI)
  2154. {
  2155. if (g_nElementNo == 0)
  2156. pCmdUI->SetCheck(TRUE);
  2157. else
  2158. pCmdUI->SetCheck(FALSE);
  2159. }
  2160. void CIDEView::ChangeView()
  2161. {
  2162. if (g_strViewName != "")
  2163. {
  2164. if (m_bModified && !g_bStartRun)
  2165. {
  2166. if (MessageBox(g_strSaveModify, g_strSelect, MB_YESNO | MB_ICONQUESTION) == IDYES)
  2167. OnFileSave();
  2168. }
  2169. m_selection.RemoveAll();
  2170. m_freezed.RemoveAll();
  2171. m_pGraph->SetPicFile(g_strViewName);
  2172. m_pGraph->Load();
  2173. m_pGraph->SetView(this);
  2174. m_pCurActionObj = NULL;
  2175. m_nCurActionType = -1;
  2176. Invalidate(FALSE);
  2177. RefreshScrollSizes();
  2178. POINT point;
  2179. point.x = 0;
  2180. point.y = 0;
  2181. ScrollToPosition(point);
  2182. m_bModified = FALSE;
  2183. }
  2184. }
  2185. void CIDEView::OnTimer(UINT nIDEvent)
  2186. {
  2187. if (g_bRun)
  2188. {
  2189. #if VIEW_USE_THREAD
  2190. #else
  2191. if (m_pGraph)
  2192. {
  2193. m_pGraph->Fresh();
  2194. //Invalidate(FALSE);//chn 刷新
  2195. }
  2196. #endif
  2197. }
  2198. CScrollView::OnTimer(nIDEvent);
  2199. }
  2200. void CIDEView::OnUpdateDraw3circle(CCmdUI* pCmdUI)
  2201. {
  2202. if (g_bRun == TRUE) {
  2203. pCmdUI->Enable(FALSE);
  2204. }
  2205. else
  2206. pCmdUI->Enable(TRUE);
  2207. }
  2208. void CIDEView::OnUpdateDraw3drect(CCmdUI* pCmdUI)
  2209. {
  2210. if (g_bRun == TRUE) {
  2211. pCmdUI->Enable(FALSE);
  2212. }
  2213. else
  2214. pCmdUI->Enable(TRUE);
  2215. }
  2216. void CIDEView::OnUpdateDrawData(CCmdUI* pCmdUI)
  2217. {
  2218. if (g_bRun == TRUE) {
  2219. pCmdUI->Enable(FALSE);
  2220. }
  2221. else
  2222. pCmdUI->Enable(TRUE);
  2223. }
  2224. void CIDEView::OnUpdateDrawRect(CCmdUI* pCmdUI)
  2225. {
  2226. if (g_bRun == TRUE) {
  2227. pCmdUI->Enable(FALSE);
  2228. }
  2229. else
  2230. pCmdUI->Enable(TRUE);
  2231. }
  2232. void CIDEView::OnUpdateDrawText(CCmdUI* pCmdUI)
  2233. {
  2234. if (g_bRun == TRUE) {
  2235. pCmdUI->Enable(FALSE);
  2236. }
  2237. else
  2238. pCmdUI->Enable(TRUE);
  2239. }
  2240. void CIDEView::OnUpdateDrawTline(CCmdUI* pCmdUI)
  2241. {
  2242. if (g_bRun == TRUE) {
  2243. pCmdUI->Enable(FALSE);
  2244. }
  2245. else
  2246. pCmdUI->Enable(TRUE);
  2247. }
  2248. void CIDEView::OnUpdateDrawBitmap(CCmdUI* pCmdUI)
  2249. {
  2250. if (g_bRun == TRUE) {
  2251. pCmdUI->Enable(FALSE);
  2252. }
  2253. else
  2254. pCmdUI->Enable(TRUE);
  2255. }
  2256. void CIDEView::OnUpdateDrawCurve(CCmdUI* pCmdUI)
  2257. {
  2258. if (g_bRun == TRUE) {
  2259. pCmdUI->Enable(FALSE);
  2260. }
  2261. else
  2262. pCmdUI->Enable(TRUE);
  2263. }
  2264. void CIDEView::OnUpdateDrawWatch(CCmdUI* pCmdUI)
  2265. {
  2266. if (g_bRun == TRUE) {
  2267. pCmdUI->Enable(FALSE);
  2268. }
  2269. else
  2270. pCmdUI->Enable(TRUE);
  2271. }
  2272. void CIDEView::OnUpdateDrawBar(CCmdUI* pCmdUI)
  2273. {
  2274. if (g_bRun == TRUE) {
  2275. pCmdUI->Enable(FALSE);
  2276. }
  2277. else
  2278. pCmdUI->Enable(TRUE);
  2279. }
  2280. void CIDEView::OnRButtonDown(UINT nFlags, CPoint point)
  2281. {
  2282. if (!g_bRun)
  2283. {
  2284. CPoint tmpPoint;
  2285. GetCursorPos(&tmpPoint);
  2286. CMenu menu;
  2287. menu.LoadMenu(IDR_DRAW_POP);
  2288. menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, tmpPoint.x, tmpPoint.y, this);
  2289. }
  2290. else
  2291. {
  2292. CPoint local = point;
  2293. CDrawObj *pObj = ObjectAt(local);
  2294. if (pObj != NULL)
  2295. {
  2296. CString sVarName;
  2297. if (pObj->m_bVariant && pObj->m_strCaption != "")
  2298. sVarName = pObj->m_strCaption;
  2299. else if (pObj->m_strDynShow != "")
  2300. sVarName = GetVarNameFromGS(pObj->m_strDynShow);
  2301. else if (pObj->m_strDynForeCon != "")
  2302. sVarName = GetVarNameFromGS(pObj->m_strDynForeCon);
  2303. else if (pObj->m_strDynBackCon != "")
  2304. sVarName = GetVarNameFromGS(pObj->m_strDynBackCon);
  2305. else if (pObj->m_strDynLineCon != "")
  2306. sVarName = GetVarNameFromGS(pObj->m_strDynLineCon);
  2307. else if (pObj->m_strHoriPos != "")
  2308. sVarName = GetVarNameFromGS(pObj->m_strHoriPos);
  2309. else if (pObj->m_strHoriSize != "")
  2310. sVarName = GetVarNameFromGS(pObj->m_strHoriSize);
  2311. else if (pObj->m_strVertiPos != "")
  2312. sVarName = GetVarNameFromGS(pObj->m_strVertiPos);
  2313. else if (pObj->m_strVertiSize != "")
  2314. sVarName = GetVarNameFromGS(pObj->m_strVertiSize);
  2315. else if (pObj->m_strCurrentCaption != "")
  2316. sVarName = GetVarNameFromGS(pObj->m_strCurrentCaption);
  2317. if (pObj->IsKindOf(RUNTIME_CLASS(CDrawBitmap)) && sVarName == "")
  2318. {
  2319. if (((CDrawBitmap *)pObj)->m_strDynCondition != "")
  2320. sVarName = GetVarNameFromGS(((CDrawBitmap *)pObj)->m_strDynCondition);
  2321. }
  2322. if (pObj->IsKindOf(RUNTIME_CLASS(CDrawGif)) && sVarName == "")
  2323. {
  2324. if (((CDrawGif *)pObj)->m_strDynCondition != "")
  2325. sVarName = GetVarNameFromGS(((CDrawGif *)pObj)->m_strDynCondition);
  2326. }
  2327. if (sVarName != "")
  2328. {
  2329. m_sVarName = sVarName;
  2330. CPoint tmpPoint;
  2331. GetCursorPos(&tmpPoint);
  2332. CMenu menu;
  2333. menu.LoadMenu(IDR_DRAW_POP);
  2334. menu.GetSubMenu(1)->TrackPopupMenu(TPM_LEFTALIGN, tmpPoint.x, tmpPoint.y, this);
  2335. }
  2336. }
  2337. }
  2338. CScrollView::OnRButtonDown(nFlags, point);
  2339. }
  2340. void CIDEView::OnEditSave()
  2341. {
  2342. OnFileSave();
  2343. }
  2344. void CIDEView::OnUpdateEditSave(CCmdUI* pCmdUI)
  2345. {
  2346. if (m_bModified)
  2347. pCmdUI->Enable(TRUE);
  2348. else
  2349. pCmdUI->Enable(FALSE);
  2350. }
  2351. BOOL CIDEView::OnEraseBkgnd(CDC* pDC)
  2352. {
  2353. return false;
  2354. }
  2355. void CIDEView::OnUpdatePicsize(CCmdUI* pCmdUI)
  2356. {
  2357. if (g_bRun == TRUE) {
  2358. pCmdUI->Enable(FALSE);
  2359. }
  2360. else
  2361. pCmdUI->Enable(TRUE);
  2362. }
  2363. void CIDEView::OnVerspace()
  2364. {
  2365. CDrawObj* pTop;
  2366. CDrawObj* pBottom;
  2367. int top = 2000;
  2368. int bottom = 0;
  2369. int heightSum = 0;
  2370. int alignCount = 0;
  2371. int nY = 0;
  2372. // 先取top, bottom两个图元;
  2373. POSITION pos = m_selection.GetHeadPosition();
  2374. while (pos != NULL)
  2375. {
  2376. CDrawObj* pObj = m_selection.GetNext(pos);
  2377. alignCount++;
  2378. pObj->m_bAligned = false;
  2379. CRect r = pObj->m_rect;
  2380. r.NormalizeRect();
  2381. if (r.top < top)
  2382. {
  2383. pTop = pObj;
  2384. top = r.top;
  2385. }
  2386. if (r.bottom > bottom)
  2387. {
  2388. pBottom = pObj;
  2389. bottom = r.bottom;
  2390. }
  2391. heightSum += r.Height();
  2392. }
  2393. pTop->m_bAligned = true;
  2394. pBottom->m_bAligned = true;
  2395. alignCount -= 2;
  2396. int space = bottom - top - heightSum;
  2397. int perSpace = space / (alignCount + 1);
  2398. nY = top + pTop->m_rect.Height() + perSpace;
  2399. for (int i = 1; i <= alignCount; i++)
  2400. {
  2401. POSITION pos = m_selection.GetHeadPosition();
  2402. CDrawObj* curObj;
  2403. int top1 = 2000;
  2404. while (pos != NULL)
  2405. {
  2406. CDrawObj* pObj = m_selection.GetNext(pos);
  2407. CRect rec = pObj->m_rect;
  2408. rec.NormalizeRect();
  2409. if (!pObj->m_bAligned)
  2410. {
  2411. if (rec.top < top1)
  2412. {
  2413. top1 = rec.top;
  2414. curObj = pObj;
  2415. }
  2416. }
  2417. }
  2418. CRect r = curObj->m_rect;
  2419. r.OffsetRect(0, nY - top1);
  2420. curObj->MoveTo(r);
  2421. curObj->m_bAligned = true;
  2422. nY += (perSpace + r.Height());
  2423. }
  2424. m_bModified = TRUE;
  2425. Invalidate(FALSE);
  2426. }
  2427. void CIDEView::OnUpdateVerspace(CCmdUI* pCmdUI)
  2428. {
  2429. if (m_selection.GetCount() > 2)
  2430. pCmdUI->Enable(TRUE);
  2431. else
  2432. pCmdUI->Enable(FALSE);
  2433. }
  2434. void CIDEView::OnSamewidth()
  2435. {
  2436. CRect rect = GetAlignRect();
  2437. POSITION pos = m_selection.GetHeadPosition();
  2438. while (pos != NULL)
  2439. {
  2440. CDrawObj* pObj = m_selection.GetNext(pos);
  2441. CRect r = pObj->m_rect;
  2442. r.NormalizeRect();
  2443. r.right = r.left + (rect.right - rect.left);
  2444. pObj->m_rect = r;
  2445. m_bModified = TRUE;
  2446. }
  2447. Invalidate(FALSE);
  2448. }
  2449. void CIDEView::OnUpdateSamewidth(CCmdUI* pCmdUI)
  2450. {
  2451. if (m_selection.GetCount() > 1)
  2452. pCmdUI->Enable(TRUE);
  2453. else
  2454. pCmdUI->Enable(FALSE);
  2455. }
  2456. void CIDEView::OnSameheight()
  2457. {
  2458. CRect rect = GetAlignRect();
  2459. POSITION pos = m_selection.GetHeadPosition();
  2460. while (pos != NULL)
  2461. {
  2462. CDrawObj* pObj = m_selection.GetNext(pos);
  2463. CRect r = pObj->m_rect;
  2464. r.NormalizeRect();
  2465. r.bottom = r.top + (rect.bottom - rect.top);
  2466. pObj->m_rect = r;
  2467. m_bModified = TRUE;
  2468. }
  2469. Invalidate(FALSE);
  2470. }
  2471. void CIDEView::OnHorspace()
  2472. {
  2473. CDrawObj* pLeft = NULL;
  2474. CDrawObj* pRight = NULL;
  2475. int left = 2000;
  2476. int right = 0;
  2477. int widthSum = 0;
  2478. int alignCount = 0;
  2479. int nX = 0;
  2480. // 先取top, bottom两个图元;
  2481. POSITION pos = m_selection.GetHeadPosition();
  2482. while (pos != NULL)
  2483. {
  2484. CDrawObj* pObj = m_selection.GetNext(pos);
  2485. alignCount++;
  2486. pObj->m_bAligned = false;
  2487. CRect r = pObj->m_rect;
  2488. r.NormalizeRect();
  2489. if (r.left < left)
  2490. {
  2491. pLeft = pObj;
  2492. left = r.left;
  2493. }
  2494. if (r.right > right)
  2495. {
  2496. pRight = pObj;
  2497. right = r.right;
  2498. }
  2499. widthSum += r.Width();
  2500. }
  2501. pLeft->m_bAligned = true;
  2502. pRight->m_bAligned = true;
  2503. alignCount -= 2;
  2504. int space = right - left - widthSum;
  2505. int perSpace = space / (alignCount + 1);
  2506. nX = left + pLeft->m_rect.Width() + perSpace;
  2507. for (int i = 1; i <= alignCount; i++)
  2508. {
  2509. POSITION pos = m_selection.GetHeadPosition();
  2510. CDrawObj* curObj;
  2511. int left1 = 2000;
  2512. while (pos != NULL)
  2513. {
  2514. CDrawObj* pObj = m_selection.GetNext(pos);
  2515. CRect rec = pObj->m_rect;
  2516. rec.NormalizeRect();
  2517. if (!pObj->m_bAligned)
  2518. {
  2519. if (rec.left < left1)
  2520. {
  2521. left1 = rec.left;
  2522. curObj = pObj;
  2523. }
  2524. }
  2525. }
  2526. CRect r = curObj->m_rect;
  2527. r.OffsetRect(nX - left1, 0);
  2528. curObj->MoveTo(r);
  2529. curObj->m_bAligned = true;
  2530. nX += (perSpace + r.Width());
  2531. }
  2532. m_bModified = TRUE;
  2533. Invalidate(FALSE);
  2534. }
  2535. void CIDEView::OnAllsame()
  2536. {
  2537. CRect rect = GetAlignRect();
  2538. POSITION pos = m_selection.GetHeadPosition();
  2539. while (pos != NULL)
  2540. {
  2541. CDrawObj* pObj = m_selection.GetNext(pos);
  2542. CRect r = pObj->m_rect;
  2543. r.NormalizeRect();
  2544. r.bottom = r.top + (rect.bottom - rect.top);
  2545. r.right = r.left + (rect.right - rect.left);
  2546. pObj->m_rect = r;
  2547. m_bModified = TRUE;
  2548. }
  2549. Invalidate(FALSE);
  2550. }
  2551. void CIDEView::OnUpdateSameheight(CCmdUI* pCmdUI)
  2552. {
  2553. if (m_selection.GetCount() > 1)
  2554. pCmdUI->Enable(TRUE);
  2555. else
  2556. pCmdUI->Enable(FALSE);
  2557. }
  2558. void CIDEView::OnUpdateHorspace(CCmdUI* pCmdUI)
  2559. {
  2560. if (m_selection.GetCount() > 2)
  2561. pCmdUI->Enable(TRUE);
  2562. else
  2563. pCmdUI->Enable(FALSE);
  2564. }
  2565. void CIDEView::OnUpdateAllsame(CCmdUI* pCmdUI)
  2566. {
  2567. if (m_selection.GetCount() > 1)
  2568. pCmdUI->Enable(TRUE);
  2569. else
  2570. pCmdUI->Enable(FALSE);
  2571. }
  2572. void CIDEView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView)
  2573. {
  2574. CScrollView::OnEndPrintPreview(pDC, pInfo, point, pView);
  2575. CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  2576. pFrame->SetWindowText(g_strStoneuIspcms);
  2577. pFrame->ShowWindow(SW_SHOWMAXIMIZED);
  2578. pFrame->UpdateWindow();
  2579. pFrame->RecalcLayout();
  2580. }
  2581. void CIDEView::OnOpenpic()
  2582. {
  2583. CPicListDlg dlg;
  2584. if (dlg.DoModal() == IDOK)
  2585. {
  2586. g_strViewName = _PICTUREDIR + dlg.m_strPicName;
  2587. g_strViewName = g_strViewName + ".view";
  2588. CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  2589. CString strPath;
  2590. strPath = g_strDirectory + CString("\\") + CString(g_strViewName);
  2591. pFrame->AddIDEView(dlg.m_strPicName, strPath);
  2592. }
  2593. }
  2594. void CIDEView::OnDrawArc()
  2595. {
  2596. g_nElementNo = ARC;
  2597. }
  2598. void CIDEView::OnDrawBreaker()
  2599. {
  2600. g_nElementNo = BREAKER;
  2601. }
  2602. void CIDEView::OnDrawFan()
  2603. {
  2604. g_nElementNo = FAN;
  2605. }
  2606. void CIDEView::OnDrawGrid()
  2607. {
  2608. g_nElementNo = GRID;
  2609. }
  2610. void CIDEView::OnDrawHiscurve()
  2611. {
  2612. g_nElementNo = HISCurveShape;
  2613. }
  2614. void CIDEView::OnDrawLine()
  2615. {
  2616. g_nElementNo = LINE;
  2617. }
  2618. void CIDEView::OnDrawPie()
  2619. {
  2620. g_nElementNo = PIE;
  2621. }
  2622. void CIDEView::OnDrawPipe()
  2623. {
  2624. g_nElementNo = PIPE;
  2625. }
  2626. void CIDEView::OnDrawPolygon()
  2627. {
  2628. g_nElementNo = POLYGON;
  2629. }
  2630. void CIDEView::OnDrawReport()
  2631. {
  2632. g_nElementNo = REPORT;
  2633. }
  2634. void CIDEView::OnDrawSinglebar()
  2635. {
  2636. g_nElementNo = SINGLEBAR;
  2637. }
  2638. void CIDEView::OnDrawTransfer()
  2639. {
  2640. g_nElementNo = TRANSFER;
  2641. }
  2642. void CIDEView::OnDrawYpipe()
  2643. {
  2644. g_nElementNo = YPIPE;
  2645. }
  2646. void CIDEView::OnDrawZheline()
  2647. {
  2648. g_nElementNo = ZHELINE;
  2649. }
  2650. void CIDEView::OnDrawZhepipe()
  2651. {
  2652. g_nElementNo = ZHEPIPE;
  2653. }
  2654. void CIDEView::OnDrawArrow()
  2655. {
  2656. g_nElementNo = ARROW;
  2657. }
  2658. void CIDEView::OnDrawEllipse()
  2659. {
  2660. g_nElementNo = ELLIPSE;
  2661. }
  2662. void CIDEView::OnDrawSwitch()
  2663. {
  2664. g_nElementNo = SWITCH;
  2665. }
  2666. void CIDEView::OnUpdateDrawSwitch(CCmdUI* pCmdUI)
  2667. {
  2668. pCmdUI->Enable(TRUE);
  2669. }
  2670. void CIDEView::OnUpdateDrawArc(CCmdUI* pCmdUI)
  2671. {
  2672. pCmdUI->Enable(TRUE);
  2673. }
  2674. void CIDEView::OnUpdateDrawArrow(CCmdUI* pCmdUI)
  2675. {
  2676. pCmdUI->Enable(TRUE);
  2677. }
  2678. void CIDEView::OnUpdateDrawBreaker(CCmdUI* pCmdUI)
  2679. {
  2680. pCmdUI->Enable(TRUE);
  2681. }
  2682. void CIDEView::OnUpdateDrawEllipse(CCmdUI* pCmdUI)
  2683. {
  2684. pCmdUI->Enable(TRUE);
  2685. }
  2686. void CIDEView::OnUpdateDrawFan(CCmdUI* pCmdUI)
  2687. {
  2688. pCmdUI->Enable(TRUE);
  2689. }
  2690. void CIDEView::OnUpdateDrawGrid(CCmdUI* pCmdUI)
  2691. {
  2692. pCmdUI->Enable(TRUE);
  2693. }
  2694. void CIDEView::OnUpdateDrawHiscurve(CCmdUI* pCmdUI)
  2695. {
  2696. pCmdUI->Enable(TRUE);
  2697. }
  2698. void CIDEView::OnUpdateDrawPie(CCmdUI* pCmdUI)
  2699. {
  2700. pCmdUI->Enable(TRUE);
  2701. }
  2702. void CIDEView::OnUpdateDrawPipe(CCmdUI* pCmdUI)
  2703. {
  2704. pCmdUI->Enable(TRUE);
  2705. }
  2706. void CIDEView::OnUpdateDrawPolygon(CCmdUI* pCmdUI)
  2707. {
  2708. pCmdUI->Enable(TRUE);
  2709. }
  2710. void CIDEView::OnUpdateDrawReport(CCmdUI* pCmdUI)
  2711. {
  2712. pCmdUI->Enable(TRUE);
  2713. }
  2714. void CIDEView::OnUpdateDrawSinglebar(CCmdUI* pCmdUI)
  2715. {
  2716. pCmdUI->Enable(TRUE);
  2717. }
  2718. void CIDEView::OnUpdateDrawTransfer(CCmdUI* pCmdUI)
  2719. {
  2720. pCmdUI->Enable(TRUE);
  2721. }
  2722. void CIDEView::OnUpdateDrawYpipe(CCmdUI* pCmdUI)
  2723. {
  2724. pCmdUI->Enable(TRUE);
  2725. }
  2726. void CIDEView::OnUpdateDrawZheline(CCmdUI* pCmdUI)
  2727. {
  2728. pCmdUI->Enable(TRUE);
  2729. }
  2730. void CIDEView::OnUpdateDrawZhepipe(CCmdUI* pCmdUI)
  2731. {
  2732. pCmdUI->Enable(TRUE);
  2733. }
  2734. void CIDEView::OnUpdateDrawLine(CCmdUI* pCmdUI)
  2735. {
  2736. pCmdUI->Enable(TRUE);
  2737. }
  2738. void CIDEView::OnDrawRoundrect()
  2739. {
  2740. g_nElementNo = ROUNDRECT;
  2741. }
  2742. void CIDEView::OnUpdateDrawRoundrect(CCmdUI* pCmdUI)
  2743. {
  2744. pCmdUI->Enable(TRUE);
  2745. }
  2746. void CIDEView::OnUpdateDrawOCX(CCmdUI* pCmdUI)
  2747. {
  2748. pCmdUI->Enable(TRUE);
  2749. }
  2750. void CIDEView::OnUpdateDrawGIF(CCmdUI* pCmdUI)
  2751. {
  2752. pCmdUI->Enable(TRUE);
  2753. }
  2754. void CIDEView::OnUpdateDrawFlash(CCmdUI* pCmdUI)
  2755. {
  2756. pCmdUI->Enable(TRUE);
  2757. }
  2758. void CIDEView::SetHisTime(CTime time)
  2759. {
  2760. m_tblTime = time;
  2761. POSITION pos = m_selection.GetHeadPosition();
  2762. while (pos != NULL)
  2763. {
  2764. CDrawObj* pObj = m_selection.GetNext(pos);
  2765. pObj->m_bHisFreshed = false;
  2766. }
  2767. }
  2768. void CIDEView::OnUpdateDiscombine(CCmdUI* pCmdUI)
  2769. {
  2770. if ((m_selection.GetCount() == 1))
  2771. pCmdUI->Enable(TRUE);
  2772. else
  2773. pCmdUI->Enable(FALSE);
  2774. }
  2775. void CIDEView::OnUpdateCombine(CCmdUI* pCmdUI)
  2776. {
  2777. if ((m_selection.GetCount() > 1))
  2778. pCmdUI->Enable(TRUE);
  2779. else
  2780. pCmdUI->Enable(FALSE);
  2781. }
  2782. void CIDEView::OnCombine()
  2783. {
  2784. }
  2785. // 分解组合图元
  2786. void CIDEView::OnDiscombine()
  2787. {
  2788. if (m_selection.GetCount() != 1)
  2789. {
  2790. MessageBox(g_strUnSelectEntity);
  2791. return;
  2792. }
  2793. CDrawObj* pObj = m_selection.GetHead();
  2794. m_selection.RemoveAll();
  2795. }
  2796. void CIDEView::OnProperty()
  2797. {
  2798. // TODO: 在此添加命令处理程序代码
  2799. if (CDrawObj::bRuning == TRUE) return;
  2800. if (m_selection.GetCount() < 1)
  2801. {
  2802. return;
  2803. }
  2804. CClientDC dc(this);
  2805. OnPrepareDC(&dc);
  2806. //CPoint local = point;
  2807. //dc.DPtoLP(&local);
  2808. if ((g_nElementNo = POLYGON || g_nElementNo == ZHELINE) && m_tempObj != NULL && m_bPolygon)
  2809. {
  2810. // ((CDrawPoly*)m_tempObj)->AddPoint(local);
  2811. m_bPolygon = false;
  2812. //((CDrawPoly*)m_tempObj)->RecalcBounds();
  2813. CRect freshRect = m_tempObj->m_rect;
  2814. freshRect.NormalizeRect();
  2815. freshRect.InflateRect(4, 4);
  2816. InvalidateRect(freshRect, FALSE);
  2817. m_tempObj = NULL;
  2818. g_nElementNo = 0;
  2819. }
  2820. else
  2821. {
  2822. if (m_selection.GetCount() > 1)
  2823. {
  2824. COLORREF _clrFore; // 前景色
  2825. COLORREF _clrLine; // 线色
  2826. COLORREF _clrBack; // 背景色
  2827. COLORREF _clrFill; // 填充色
  2828. LOGFONT _logfont; // 字体
  2829. CString _strLineType; // 线型
  2830. int _nLineWidth; // 线宽
  2831. int _nFillMode; //填充類型
  2832. int nPosIndex = 0;
  2833. POSITION pos = m_selection.GetHeadPosition();
  2834. while (pos != NULL)
  2835. {
  2836. CDrawObj* pObj = m_selection.GetNext(pos);
  2837. pObj->m_bModifyMore = TRUE;
  2838. if (nPosIndex == 0)
  2839. {
  2840. if (pObj->OnAttrib())
  2841. {
  2842. m_bModified = TRUE;
  2843. _clrFore = pObj->m_clrFore;
  2844. _clrLine = pObj->m_clrLine;
  2845. _clrBack = pObj->m_clrBack;
  2846. _clrFill = pObj->m_clrFill;
  2847. _logfont = pObj->m_logfont;
  2848. _strLineType = pObj->m_strLineType;
  2849. _nLineWidth = pObj->m_nLineWidth;
  2850. _nFillMode = pObj->m_nFillMode;
  2851. }
  2852. else
  2853. {
  2854. return;
  2855. }
  2856. }
  2857. else
  2858. {
  2859. pObj->m_clrFore = _clrFore;
  2860. pObj->m_clrLine = _clrLine;
  2861. pObj->m_clrBack = _clrBack;
  2862. pObj->m_clrFill = _clrFill;
  2863. pObj->m_logfont = _logfont;
  2864. pObj->m_strLineType = _strLineType;
  2865. pObj->m_nLineWidth = _nLineWidth;
  2866. pObj->m_nFillMode = _nFillMode;
  2867. }
  2868. CRect freshRect = pObj->m_rect;
  2869. freshRect.NormalizeRect();
  2870. freshRect.InflateRect(4, 4);
  2871. InvalidateRect(freshRect, FALSE);
  2872. g_nElementNo = 0;
  2873. nPosIndex++;
  2874. }
  2875. }
  2876. else
  2877. {
  2878. POSITION pos = m_selection.GetHeadPosition();
  2879. CDrawObj *pObj = m_selection.GetNext(pos);
  2880. pObj->m_bModifyMore = FALSE;
  2881. if (pObj->OnAttrib())
  2882. m_bModified = TRUE;
  2883. CRect freshRect = pObj->m_rect;
  2884. freshRect.NormalizeRect();
  2885. freshRect.InflateRect(4, 4);
  2886. InvalidateRect(freshRect, FALSE);
  2887. g_nElementNo = 0;
  2888. }
  2889. }
  2890. }
  2891. void CIDEView::OnUpdateProperty(CCmdUI *pCmdUI)
  2892. {
  2893. // TODO: 在此添加命令更新用户界面处理程序代码
  2894. }
  2895. void CIDEView::OnEditVar()
  2896. {
  2897. }
  2898. void CIDEView::OnUpdateEditVar(CCmdUI *pCmdUI)
  2899. {
  2900. // TODO: 在此添加命令更新用户界面处理程序代码
  2901. }
  2902. void CIDEView::OnRealTimeCurve()
  2903. {
  2904. }
  2905. void CIDEView::OnUpdateRealTimeCurve(CCmdUI *pCmdUI)
  2906. {
  2907. // TODO: 在此添加命令更新用户界面处理程序代码
  2908. }
  2909. void CIDEView::OnClose()
  2910. {
  2911. // TODO: 在此添加消息处理程序代码和/或调用默认值
  2912. if (m_bModified)
  2913. {
  2914. if (MessageBox(g_strSaveModify, g_strSelect, MB_YESNO | MB_ICONQUESTION) == IDYES)
  2915. OnFileSave();
  2916. }
  2917. CScrollView::OnClose();
  2918. }
  2919. #if VIEW_USE_THREAD
  2920. DWORD WINAPI CIDEView::FreshGraphThread(void *pData)
  2921. {
  2922. CIDEView *pView = (CIDEView *)pData;
  2923. do
  2924. {
  2925. if (pView != NULL)
  2926. {
  2927. if (pView->m_pGraph != NULL)
  2928. {
  2929. pView->m_pGraph->Fresh();
  2930. //pView->Invalidate(FALSE);
  2931. }
  2932. }
  2933. Sleep(100);
  2934. } while (WaitForSingleObject(pView->m_hIDEViewRunObject, 125L) == WAIT_TIMEOUT);
  2935. return 0;
  2936. }
  2937. #endif
  2938. void CIDEView::OnKillFocus(CWnd* pNewWnd)
  2939. {
  2940. CScrollView::OnKillFocus(pNewWnd);
  2941. }
  2942. void CIDEView::OnSetFocus(CWnd* pOldWnd)
  2943. {
  2944. CScrollView::OnSetFocus(pOldWnd);
  2945. }
  2946. void CIDEView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
  2947. {
  2948. // TODO: 在此添加专用代码和/或调用基类
  2949. CScrollView::OnActivateView(bActivate, pActivateView, pDeactiveView);
  2950. }
  2951. CString CIDEView::RegSearch(HKEY hKey, TCHAR rootKey[], CString path, CString sContent)
  2952. {
  2953. CString sRet;
  2954. DWORD numSubKey = 0; //存放子键的项数
  2955. DWORD i; //计数
  2956. DWORD sizeSubKey; //子键大小
  2957. TCHAR subKey[255]; //子键名
  2958. /*打开hKey中的rootKey, hKey乃继承递归调用者之hKey, rootKey乃递归调用者之subKey*/
  2959. RegOpenKeyEx(hKey, //欲开之键柄
  2960. rootKey, //欲开之根键名
  2961. 0, //保留值,强制0
  2962. KEY_READ, //权限
  2963. &hKey); //打开子键后,返回键柄
  2964. ///*首先查当前键下的值们(表明是复数哈)是否有符合条件的*/
  2965. char lpWstr[MAX_PATH];
  2966. DWORD lpType = NULL;
  2967. DWORD maxBufSize = MAX_PATH;
  2968. if (RegQueryValueEx(hKey, NULL, NULL, &lpType, (LPBYTE)lpWstr, &maxBufSize) == ERROR_SUCCESS)
  2969. {
  2970. CString sGet(lpWstr);
  2971. if (-1 != sGet.Find(sContent) && sGet.GetLength() >= 5 && path.Find("CLSID") != -1)
  2972. {
  2973. RegCloseKey(hKey); //收尾工作是一定要做的,否则机器会异常的慢
  2974. sRet = path.Mid(6, 0x26);
  2975. return sRet; //跳出递归
  2976. }
  2977. }
  2978. /*没有查到,则进入子键查询*/
  2979. else
  2980. {
  2981. /*首先查得当前键下的子键项数*/
  2982. RegQueryInfoKey(hKey,
  2983. NULL,
  2984. NULL,
  2985. NULL,
  2986. &numSubKey, //查得子键的项数
  2987. NULL,
  2988. NULL,
  2989. NULL,
  2990. NULL,
  2991. NULL,
  2992. NULL,
  2993. NULL);
  2994. /*如果子键数不为0,遍历子键*/
  2995. if (numSubKey)
  2996. {
  2997. for (i = 0; i < numSubKey; i++)
  2998. {
  2999. subKey[0] = '\0'; //该两行很重要,保证了每次循环的初始
  3000. sizeSubKey = 255; //第一行清空子键,第二行赋缓冲区大小
  3001. RegEnumKeyEx(hKey, //键柄
  3002. i, //子键序号
  3003. subKey, //存入子键名
  3004. &sizeSubKey,//指明缓冲区大小
  3005. NULL,
  3006. NULL,
  3007. NULL,
  3008. NULL);
  3009. CString s;
  3010. s = RegSearch(hKey, subKey, path + subKey + "\\", sContent); //递归
  3011. if (s.GetLength() > 10)
  3012. {
  3013. sRet = s;//.Mid( 6,0x26 );
  3014. return sRet;
  3015. }
  3016. }
  3017. }
  3018. }
  3019. RegCloseKey(hKey); //收尾工作是一定要做的,否则机器会异常的慢
  3020. return sRet;
  3021. }
  3022. CString CIDEView::GetClsidbyName(CString sName)
  3023. {
  3024. CString sRet;
  3025. CString sPathName;
  3026. sPathName.Format("%s", g_strDirectory);
  3027. sPathName += "\\ocx";
  3028. sPathName += "\\ocxList.txt";
  3029. CString sTemp;
  3030. CStdioFile File;
  3031. if (!File.Open(sPathName, CFile::modeRead))
  3032. File.Open(sPathName, CFile::modeCreate | CFile::modeRead);
  3033. while (File.ReadString(sTemp))//定义一个CString变量sTemp作为缓冲区
  3034. {
  3035. int nPos = sTemp.Find(sName);
  3036. if (nPos != -1)
  3037. {
  3038. sRet = sTemp.Mid(sName.GetLength() + 1, sTemp.GetLength() - sName.GetLength());
  3039. break;
  3040. }
  3041. }
  3042. File.Close();
  3043. return sRet;
  3044. }
  3045. void CIDEView::ShowOCX(CRect rect, CString sOcxPath, int iIndex, CString sPageName)
  3046. {
  3047. CHAR strFile[MAX_PATH + 1] = "";
  3048. memset(strFile, 0, sizeof(strFile));
  3049. wsprintf(strFile, "C:\\OCXRect.ini");
  3050. if (rect.left < 0)
  3051. rect.left = 0;
  3052. if (rect.top < 0)
  3053. rect.top = 0;
  3054. CString sW, sH, sIndex;
  3055. sW.Format("%d", rect.Width());
  3056. sH.Format("%d", rect.Height());
  3057. sIndex.Format("%d", iIndex);
  3058. WritePrivateProfileString("WH", "W", sW, strFile);
  3059. WritePrivateProfileString("WH", "H", sH, strFile);
  3060. WritePrivateProfileString("WH", "INDEX", sIndex, strFile);
  3061. WritePrivateProfileString("WH", "PageName", sPageName, strFile);
  3062. WritePrivateProfileString("Database", "ServerName", g_strServerName, strFile);
  3063. WritePrivateProfileString("Database", "DataBaseName", g_strDataBaseName, strFile);
  3064. WritePrivateProfileString("Database", "UserName", g_strUserName, strFile);
  3065. WritePrivateProfileString("Database", "Password", g_strPassword, strFile);
  3066. WritePrivateProfileString("Database", "DBType", g_strDBType, strFile);
  3067. ///////////////////////////////////////////////////////
  3068. CString sName;
  3069. for (int iPosFile = sOcxPath.GetLength() - 1; iPosFile >= 0; iPosFile--)
  3070. {
  3071. if (sOcxPath[iPosFile] == '\\')
  3072. {
  3073. sName = sOcxPath.Mid(iPosFile + 1, sOcxPath.GetLength() - iPosFile - 5);
  3074. break;
  3075. }
  3076. }
  3077. CString sClsid = GetClsidbyName(sName);//RegSearch (HKEY_CLASSES_ROOT,"","",sName+" Control");//
  3078. if (sClsid != "")
  3079. {
  3080. USES_CONVERSION;
  3081. CLSID clsid;
  3082. HRESULT hr = CLSIDFromString(T2OLE(sClsid), &clsid);
  3083. bool f;
  3084. static int ID = 62001;
  3085. int nRet = m_OcxWnd.CreateControl(clsid, _T("132"), WS_CHILD | WS_VISIBLE, rect, this, ID);
  3086. ID++;
  3087. if (nRet == 0)
  3088. f = false;
  3089. else
  3090. f = true;
  3091. }
  3092. else
  3093. {
  3094. CString str;
  3095. str.Format("请在 <\\Ocx\\ocxList.txt> 里填入控件的sClsid");
  3096. MessageBox(str, g_strTip, MB_ICONWARNING);
  3097. }
  3098. }