读取文件匹配代码

  1 BOOL CWBPage::LoadFromFile(CFile *pFile, LONGLONG& lOff, ULONGLONG lFileLength)
  2 {
  3     if (pFile == NULL)
  4     {
  5         return FALSE;
  6     }
  7 
  8     LONGLONG lPageOff = lOff; //页偏移量
  9     //读取页长度
 10     ULONGLONG lPageLength; //页内容长度
 11 
 12     pFile->Seek(lPageOff, CFile::begin);
 13     pFile->Read((char *)&lPageLength, sizeof(ULONGLONG));
 14     if ((lPageOff + lPageLength) > lFileLength)
 15     {
 16         return FALSE;
 17     }
 18     lPageOff += sizeof(ULONGLONG);//偏移量增加
 19 
 20     if (lPageLength <= 1) //如果是空页
 21     {
 22         lOff = lPageOff;
 23         return TRUE;
 24     }
 25 
 26     //读取所有对象
 27     //int nlayerIndex = 1; //对象图层号
 28     while ((ULONGLONG)(lPageOff - lOff) < lPageLength)
 29     {
 30         //读取对象类型
 31         char chObjType;
 32         pFile->Seek(lPageOff, CFile::begin);
 33         pFile->Read(&chObjType, 1);
 34         int nObjType = (int)chObjType;
 35 
 36         switch (nObjType)
 37         {
 38         case WB_OBJ_LINE: //直线
 39             {
 40                 CWBLine *pLine = new CWBLine();
 41                 if (NULL == pLine)
 42                 {
 43                     return FALSE;
 44                 }
 45                 if (!pLine->LoadFromFile(pFile, lPageOff, lFileLength))
 46                 {
 47                     delete pLine;
 48                     return FALSE;
 49                 }
 50                 //pLine->SetLayerIndex(nlayerIndex); //设置对象图层号
 51 
 52                 //m_pWBObjList->AddTail(pLine);
 53                 AddWBObject(pLine, pLine->GetLayerType());
 54             }
 55             break;
 56         case WB_OBJ_CURVE: //曲线
 57             {
 58                 CWBCurve *pCurve = new CWBCurve();
 59                 if (NULL == pCurve)
 60                 {
 61                     return FALSE;
 62                 }
 63                 if (!pCurve->LoadFromFile(pFile, lPageOff, lFileLength))
 64                 {
 65                     delete pCurve;
 66                     return FALSE;
 67                 }
 68                 //pCurve->SetLayerIndex(nlayerIndex); //设置对象图层号
 69 
 70                 //m_pWBObjList->AddTail(pCurve);
 71                 AddWBObject(pCurve, pCurve->GetLayerType());
 72             }
 73             break;
 74         case WB_OBJ_ICOCURVE: //图标曲线
 75             {
 76                 CWBIcoCurve *pIcoCurve = new CWBIcoCurve();
 77                 if (NULL == pIcoCurve)
 78                 {
 79                     return FALSE;
 80                 }
 81                 if (!pIcoCurve->LoadFromFile(pFile, lPageOff, lFileLength))
 82                 {
 83                     delete pIcoCurve;
 84                     return FALSE;
 85                 }
 86 
 87                 AddWBObject(pIcoCurve, pIcoCurve->GetLayerType());
 88             }
 89             break;
 90         case WB_OBJ_POLYGON: //多边形
 91             {
 92                 CWBPolygon *pPolygon = new CWBPolygon();
 93                 if (NULL ==pPolygon)
 94                 {
 95                     return FALSE;
 96                 }
 97                 if (!pPolygon->LoadFromFile(pFile, lPageOff, lFileLength))
 98                 {
 99                     delete pPolygon;
100                     return FALSE;
101                 }
102                 //pPolygon->SetLayerIndex(nlayerIndex);
103 
104                 //m_pWBObjList->AddTail(pPolygon);
105                 AddWBObject(pPolygon, pPolygon->GetLayerType());
106             }
107             break;
108         case WB_OBJ_RECT: //矩形
109             {
110                 CWBRectangle *pRect = new CWBRectangle();
111                 if (NULL == pRect)
112                 {
113                     return FALSE;
114                 }
115                 if (!pRect->LoadFromFile(pFile, lPageOff, lFileLength))
116                 {
117                     delete pRect;
118                     return FALSE;
119                 }
120                 //pRect->SetLayerIndex(nlayerIndex);
121                 //m_pWBObjList->AddTail(pRect);
122                 AddWBObject(pRect, pRect->GetLayerType());
123             }
124             break;
125         case WB_OBJ_TEXT: //文本
126             {
127                 CWBText *pText = new CWBText();
128                 if (NULL == pText)
129                 {
130                     return FALSE;
131                 }
132                 if(!pText->LoadFromFile(pFile, lPageOff, lFileLength))
133                 {
134                     delete pText;
135                     return FALSE;
136                 }
137                 //pText->SetLayerIndex(nlayerIndex);
138 
139                 //m_pWBObjList->AddTail(pText);
140                 AddWBObject(pText, pText->GetLayerType());
141             }
142             break;
143         case WB_OBJ_PICTURE: //图片
144             {
145                 CWBPicture *pPicture = new CWBPicture();
146                 if (NULL == pPicture)
147                 {
148                     return FALSE;
149                 }
150                 if (!pPicture->LoadFromFile(pFile, lPageOff, lFileLength))
151                 {
152                     delete pPicture;
153                     return FALSE;
154                 }
155                 //pPicture->SetLayerIndex(nlayerIndex);
156 
157                 //m_pWBObjList->AddTail(pPicture);
158                 AddWBObject(pPicture, pPicture->GetLayerType());
159             }
160             break;
161         case WB_OBJ_DXF: //dxf
162             {
163                 CWBDxf *pDxf = new CWBDxf();
164                 if (NULL == pDxf)
165                 {
166                     return FALSE;
167                 }
168                 if (!pDxf->LoadFromFile(pFile, lPageOff, lFileLength))
169                 {
170                     delete pDxf;
171                     return FALSE;
172                 }
173                 AddWBObject(pDxf, pDxf->GetLayerType());
174             }
175             break;
176         case WB_OBJ_FLASH: //flash
177             {
178                 CWBFlash *pFlash = new CWBFlash();
179                 if (NULL == pFlash)
180                 {
181                     return FALSE;
182                 }
183                 if (!pFlash->LoadFromFile(pFile, lPageOff, lFileLength))
184                 {
185                     delete pFlash;
186                     return FALSE;
187                 }
188                 //pFlash->SetLayerIndex(nlayerIndex);
189 
190                 //m_pWBObjList->AddTail(pFlash);
191                 AddWBObject(pFlash, pFlash->GetLayerType());
192             }
193             break;
194 
195         case WB_OBJ_ELLIPSE: //椭圆
196             {
197                 CWBEllipse *pEllipse = new CWBEllipse();
198                 if (NULL == pEllipse)
199                 {
200                     return FALSE;
201                 }
202                 if(!pEllipse->LoadFromFile(pFile, lPageOff, lFileLength))
203                 {
204                     delete pEllipse;
205                     return FALSE;
206                 }
207                 //pEllipse->SetLayerIndex(nlayerIndex);
208                 //m_pWBObjList->AddTail(pEllipse);
209                 AddWBObject(pEllipse, pEllipse->GetLayerType());
210             }
211             break;
212         case WB_OBJ_TRIANGLE:    //三角形
213             {
214                 CWBTriangle *pTriangle = new CWBTriangle();
215                 if ( NULL == pTriangle)
216                 {
217                     return FALSE;
218                 }
219                 if (!pTriangle->LoadFromFile(pFile, lPageOff, lFileLength))
220                 {
221                     delete pTriangle;
222                     return FALSE;
223                 }
224                 //pTriangle->SetLayerIndex(nlayerIndex);
225 
226                 //m_pWBObjList->AddTail(pTriangle);
227                 AddWBObject(pTriangle, pTriangle->GetLayerType());
228             }
229             break;
230         case WB_OBJ_RHOMBUS: //菱形
231             {
232                 CWBRhombus *pRhombus = new CWBRhombus();
233                 if (NULL == pRhombus)
234                 {
235                     return FALSE;
236                 }
237                 if (!pRhombus->LoadFromFile(pFile, lPageOff, lFileLength))
238                 {
239                     delete pRhombus;
240                     return FALSE;
241                 }
242                 //pRhombus->SetLayerIndex(nlayerIndex);
243 
244                 //m_pWBObjList->AddTail(pRhombus);
245                 AddWBObject(pRhombus, pRhombus->GetLayerType());
246             }
247             break;
248         case WB_OBJ_PENTAGON: //五边形
249             {
250                 CWBPentagon *pPentagon = new CWBPentagon();
251                 if (NULL == pPentagon)
252                 {
253                     return FALSE;
254                 }
255                 if (!pPentagon->LoadFromFile(pFile, lPageOff, lFileLength))
256                 {
257                     delete pPentagon;
258                     return FALSE;
259                 }
260                 //pPentagon->SetLayerIndex(nlayerIndex);
261 
262                 //m_pWBObjList->AddTail(pPentagon);
263                 AddWBObject(pPentagon, pPentagon->GetLayerType());
264             }
265             break;
266         case WB_OBJ_HEXAGON: //六边形
267             {
268                 CWBHexagon *pHexagon = new CWBHexagon();
269                 if (NULL == pHexagon)
270                 {
271                     return FALSE;
272                 }
273                 if (!pHexagon->LoadFromFile(pFile, lPageOff, lFileLength))
274                 {
275                     delete pHexagon;
276                     return FALSE;
277                 }
278                 //pHexagon->SetLayerIndex(nlayerIndex);
279 
280                 //m_pWBObjList->AddTail(pHexagon);
281                 AddWBObject(pHexagon, pHexagon->GetLayerType());
282             }
283             break;
284         case WB_OBJ_FIVEPOINTSTART: //五角星
285             {
286                 CWBFivepointstart *pFivepointstart = new CWBFivepointstart();
287                 if (NULL == pFivepointstart)
288                 {
289                     return FALSE;
290                 }
291                 if (!pFivepointstart->LoadFromFile(pFile, lPageOff, lFileLength))
292                 {
293                     delete pFivepointstart;
294                     return FALSE;
295                 }
296                 //pFivepointstart->SetLayerIndex(nlayerIndex);
297 
298                 //m_pWBObjList->AddTail(pFivepointstart);
299                 AddWBObject(pFivepointstart, pFivepointstart->GetLayerType());
300             }
301             break;
302         case WB_OBJ_TRAPEZIUM: //梯形
303             {
304                 CWBTrapezium *pTrapezium = new CWBTrapezium();
305                 if (NULL == pTrapezium)
306                 {
307                     return FALSE;
308                 }
309                 if (!pTrapezium->LoadFromFile(pFile, lPageOff, lFileLength))
310                 {
311                     delete pTrapezium;
312                     return FALSE;
313                 }
314                 //pTrapezium->SetLayerIndex(nlayerIndex);
315 
316                 //m_pWBObjList->AddTail(pTrapezium);
317                 AddWBObject(pTrapezium, pTrapezium->GetLayerType());
318             }
319             break;
320         case WB_OBJ_MEDIA:
321             {
322                 //加载新视频
323                 CWBMedia* pMedia = new CWBMedia(NULL);
324                 if (NULL == pMedia)
325                 {
326                     return FALSE;
327                 }
328                 if (!pMedia->LoadFromFile(pFile, lPageOff, lFileLength))
329                 {
330                     delete pMedia;
331                     pMedia = NULL;
332                     return FALSE;
333                 }
334                 //将新视频的显示状态全部设置为隐藏,否则会在第一页显示出所有的视频
335                 if (g_pWhiteBoardView->m_bIsCombin)//主要组合和正常打开有点区别问题wangxiaobin
336                 {
337                     if (g_PageCount >= 1)
338                     {
339                         pMedia->HideAndPauseMedia();
340                     }
341                 }
342                 else
343                 {
344                     if (g_PageCount > 1)
345                     {
346                         pMedia->HideAndPauseMedia();
347                     }
348                 }
349                 
350 
351                 AddWBObject(pMedia, pMedia->GetLayerType());
352             }
353             break;
354         case WB_OBJ_DOCUMENT:
355             {
356                 CWBDocument *pDoc = new CWBDocument();
357                 if (NULL == pDoc)
358                 {
359                     return FALSE;
360                 }
361                 pDoc->SetPageIndex(g_PageCount);
362                 if (!pDoc->LoadFromFile(pFile, lPageOff, lFileLength))
363                 {
364                     delete pDoc;
365                     return FALSE;
366                 }
367                 //pDoc->SetLayerIndex(nlayerIndex);
368 
369                 //m_pWBObjList->AddTail(pDoc);
370                 AddWBObject(pDoc, pDoc->GetLayerType());
371             }
372             break;
373         case WB_OBJ_COMBINE:
374             {
375                 CWBCombine *pCombine = new CWBCombine();
376                 if (NULL == pCombine)
377                 {
378                     return FALSE;
379                 }
380                 if (!pCombine->LoadFromFile(pFile, lPageOff, lFileLength))
381                 {
382                     delete pCombine;
383                     return FALSE;
384                 }
385                 //pCombine->SetLayerIndex(nlayerIndex);
386 
387                 //m_pWBObjList->AddTail(pCombine);
388                 m_nWBMaxLayerId = pCombine->GetPageLayerIndex();
389                 AddWBObject(pCombine, pCombine->GetLayerType());
390             }
391             break;
392         case WB_OBJ_ANNOTATIONS:
393             {
394                 CWBAnnotations *pAnnotations = new CWBAnnotations();
395                 if (NULL == pAnnotations)
396                 {
397                     return FALSE;
398                 }
399                 if (!pAnnotations->LoadFromFile(pFile, lPageOff, lFileLength))
400                 {
401                     delete pAnnotations;
402                     return FALSE;
403                 }
404                 //pAnnotations->SetLayerIndex(nlayerIndex);
405 
406                 //m_pWBObjList->AddTail(pAnnotations);
407                 AddWBObject(pAnnotations, pAnnotations->GetLayerType());
408             }
409             break;
410         case WB_OBJ_BAFFLE:
411             {
412                 CWBBafflePlate *pBafflePlate = new CWBBafflePlate();
413                 if (NULL == pBafflePlate)
414                 {
415                     return FALSE;
416                 }
417                 if (!pBafflePlate->LoadFromFile(pFile, lPageOff, lFileLength))
418                 {
419                     delete pBafflePlate;
420                     return FALSE;
421                 }
422                 //pBafflePlate->SetLayerIndex(nlayerIndex);
423 
424                 //m_pWBObjList->AddTail(pBafflePlate);
425                 AddWBObject(pBafflePlate, pBafflePlate->GetLayerType());
426             }
427             break;
428         default:
429             return FALSE;
430         }
431     }
432 
433     //m_dwCurObjLayerIndex = nlayerIndex - 1; //设置当前图层号
434     lOff = lPageOff;
435     return TRUE;
436 }
View Code

相关文章: