1 // Layer.h : CLayer
\82Ì
\90é
\8c¾
6 #include "resource.h" //
\83\81\83C
\83\93 \83V
\83\93\83{
\83\8b
12 /////////////////////////////////////////////////////////////////////////////
13 //
\95`
\89æ
\83I
\83u
\83W
\83F
\83N
\83g
\83N
\83\89\83X
28 HWND hWnd = GetDesktopWindow();
29 HDC hdc = GetDC(hWnd);
30 m_height_mm = GetDeviceCaps(hdc,VERTSIZE) * 10;
31 m_height_px = GetDeviceCaps(hdc,VERTRES);
32 m_width_mm = GetDeviceCaps(hdc,HORZSIZE) * 10;
33 m_width_px = GetDeviceCaps(hdc,HORZRES);
36 virtual void Destroy() = 0;
37 virtual void Draw(CDC hdc) = 0;
38 void DPtoLP(CDC& dc,POINT* pt,int cnt)
42 offsetY = MulDiv(dc.m_rct.bottom,m_height_mm,m_height_px);
45 offsetY = dc.m_rct.bottom;
49 pt[i].y = offsetY - MulDiv(pt[i].y,m_height_mm,m_height_px);
50 pt[i].x = MulDiv(pt[i].x,m_width_mm ,m_width_px );
54 int m_bTextMappingMode;
61 class textdata : public drawdata
64 textdata(long x,long y,LPCSTR text,BOOL mapmode)
66 pBuf = new TCHAR[lstrlen(text)+1];
70 m_bTextMappingMode = mapmode;
72 virtual void Destroy()
77 virtual void Draw(CDC dc)
80 if(m_bTextMappingMode){
81 SetTextAlign(dc.m_hDC,TA_TOP);
85 SetTextAlign(dc.m_hDC,TA_BASELINE);
87 TextOut(dc.m_hDC,pt.x,pt.y,pBuf,lstrlen(pBuf));
95 class textboxdata : public drawdata
98 textboxdata(long sx,long sy,long ex,long ey,LPCSTR text,UINT fmt,BOOL mapmode)
100 pBuf = new TCHAR[lstrlen(text)+1];
107 m_bTextMappingMode = mapmode;
109 virtual void Destroy()
114 virtual void Draw(CDC dc)
117 if(m_bTextMappingMode){
118 DPtoLP(dc,(LPPOINT)&box,2);
119 SetTextAlign(dc.m_hDC,TA_TOP);
122 SetTextAlign(dc.m_hDC,TA_BASELINE);
124 DrawText(dc.m_hDC,pBuf,lstrlen(pBuf),&box,m_fmt);
132 class linedata : public drawdata
135 linedata(long sx,long sy,long ex,long ey,BOOL mapmode)
141 m_bTextMappingMode = mapmode;
143 virtual void Destroy()
147 virtual void Draw(CDC dc)
149 POINT pt[2] = {{m_sx,m_sy},{m_ex,m_ey}};
150 if(m_bTextMappingMode){
153 MoveToEx(dc.m_hDC,pt[0].x,pt[0].y,NULL);
154 LineTo(dc.m_hDC,pt[1].x,pt[1].y);
163 class circledata : public drawdata
166 circledata(long sx,long sy,long radius,BOOL mapmode)
171 m_bTextMappingMode = mapmode;
173 virtual void Destroy()
177 virtual void Draw(CDC dc)
179 POINT pt[2] = {{m_sx ,m_sy},{m_radius ,m_radius}};
180 if(m_bTextMappingMode){
183 Arc(dc.m_hDC,(pt[0].x-pt[1].x),(pt[0].y-pt[1].x),(pt[0].x+pt[1].x),(pt[0].y+pt[1].x),0,0,0,0);
191 class fillcircledata : public drawdata
194 fillcircledata(long sx,long sy,long radius,BOOL mapmode)
199 m_bTextMappingMode = mapmode;
201 virtual void Destroy()
205 virtual void Draw(CDC dc)
207 long mid = m_radius / 2;
208 POINT pt[2] = {{m_sx ,m_sy},{m_radius ,m_radius}};
209 if(m_bTextMappingMode){
212 Ellipse(dc.m_hDC,(pt[0].x-pt[1].x),(pt[0].y-pt[1].x),(pt[0].x+pt[1].x),(pt[0].y+pt[1].x));
220 class boxdata : public drawdata
223 boxdata(long sx,long sy,long ex,long ey,BOOL mapmode)
229 m_bTextMappingMode = mapmode;
231 virtual void Destroy()
235 virtual void Draw(CDC dc)
237 POINT pt[2] = {{m_sx ,m_sy},{m_ex,m_ey}};
238 if(m_bTextMappingMode){
241 MoveToEx(dc.m_hDC,pt[0].x,pt[0].y,NULL);
242 LineTo (dc.m_hDC,pt[1].x,pt[0].y);
243 LineTo (dc.m_hDC,pt[1].x,pt[1].y);
244 LineTo (dc.m_hDC,pt[0].x,pt[1].y);
245 LineTo (dc.m_hDC,pt[0].x,pt[0].y);
254 class fillboxdata : public drawdata
257 fillboxdata(long sx,long sy,long ex,long ey,BOOL mapmode)
263 m_bTextMappingMode = mapmode;
265 virtual void Destroy()
269 virtual void Draw(CDC dc)
271 POINT pt[2] = {{m_sx ,m_sy},{m_ex,m_ey}};
272 if(m_bTextMappingMode){
275 Rectangle(dc.m_hDC,pt[0].x,pt[0].y,pt[1].x,pt[1].y);
284 class fillrboxdata : public drawdata
287 fillrboxdata(long sx,long sy,long ex,long ey,long w,long h,BOOL mapmode)
295 m_bTextMappingMode = mapmode;
297 virtual void Destroy()
301 virtual void Draw(CDC dc)
303 POINT pt[3] = {{m_sx ,m_sy},{m_ex,m_ey},{m_w,m_h}};
304 if(m_bTextMappingMode){
307 RoundRect(dc.m_hDC,pt[0].x,pt[0].y,pt[1].x,pt[1].y,pt[2].x,pt[2].y);
318 class arcdata : public drawdata
321 arcdata(long x1,long y1,long x2,long y2,long sx,long sy,long ex,long ey,BOOL mapmode)
331 m_bTextMappingMode = mapmode;
333 virtual void Destroy()
337 virtual void Draw(CDC dc)
339 POINT pt[4] = {{m_x1,m_y1},{m_x2,m_y2},{m_sx ,m_sy},{m_ex,m_ey}};
340 if(m_bTextMappingMode){
343 Arc(dc.m_hDC,pt[0].x,pt[0].y,pt[1].x,pt[1].y,pt[2].x,pt[2].y,pt[3].x,pt[3].y);
356 class fillarcdata : public drawdata
359 fillarcdata(long x1,long y1,long x2,long y2,long sx,long sy,long ex,long ey,BOOL mapmode)
369 m_bTextMappingMode = mapmode;
371 virtual void Destroy()
375 virtual void Draw(CDC dc)
377 POINT pt[4] = {{m_x1,m_y1},{m_x2,m_y2},{m_sx ,m_sy},{m_ex,m_ey}};
378 if(m_bTextMappingMode){
381 Pie(dc.m_hDC,pt[0].x,pt[0].y,pt[1].x,pt[1].y,pt[2].x,pt[2].y,pt[3].x,pt[3].y);
394 class polygondata : public drawdata
397 polygondata(POINT* pPt,int cnt,BOOL mapmode)
401 m_bTextMappingMode = mapmode;
403 virtual void Destroy()
408 virtual void Draw(CDC dc)
410 if(m_bTextMappingMode){
411 POINT* pt = new POINT[m_cnt];
413 for(i=0;i<m_cnt;i++){
416 DPtoLP (dc,pt,m_cnt);
417 Polygon(dc.m_hDC,pt,m_cnt);
421 Polygon(dc.m_hDC,m_pPt,m_cnt);
429 class picturedata : public drawdata
432 picturedata(IPicture* pPicture,long x,long y,long w,long h,BOOL mapmode)
438 m_pPicture = pPicture;
439 m_bTextMappingMode = mapmode;
441 m_pPicture->AddRef();
444 virtual void Destroy()
447 m_pPicture->Release();
451 virtual void Draw(CDC dc)
454 //
\83r
\83N
\83`
\83\83\81[
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82ª
\82È
\82¢
\82È
\82ç
\89½
\82à
\82µ
\82È
\82¢
457 // IPicture->Render
\82ÍHIMETRIC
\82Ì
\8dÀ
\95W
\82ð
\95K
\97v
\82Æ
\82·
\82é
\82ª
\81A
\83X
\83N
\81[
\83\93\82ÍLOMETRIC
\82É
\82µ
\82Ä
\82¢
\82é
\82½
\82ß
\81B
458 //
\81i
\82½
\82¾
\82µ
\81ARender
\82Í
\83}
\83c
\83s
\83\93\83O
\83\82\81[
\83h
\82ð
\95Ï
\8dX
\82µ
\82È
\82¢
\82Ì
\82Å
\81A
\97^
\82¦
\82é
\90\94\92l
\82ÍLOMETRIC
\81B
\81j
459 OLE_XPOS_HIMETRIC w = 0;
460 OLE_XPOS_HIMETRIC h = 0;
461 m_pPicture->get_Width(&w);
462 m_pPicture->get_Height(&h);
464 if(m_bTextMappingMode){
465 POINT pt[2] = {{m_x,m_y},{m_x+m_w,m_y+m_h}};
467 if(m_w < 0){ pt[1].x = w/10; } else { pt[1].x = labs(pt[1].x - pt[0].x); }
468 if(m_h < 0){ pt[1].y = h/10; } else { pt[1].y = labs(pt[1].y - pt[0].y); }
469 m_pPicture->Render(dc.m_hDC
479 if(m_w > 0) dw = m_w;
480 if(m_h > 0) dh = m_h;
481 m_pPicture->Render(dc.m_hDC,m_x,m_y,dw,dh,0,0,w,h,NULL);
485 IPicture* m_pPicture;
492 /////////////////////////////////////////////////////////////////////////////
494 class ATL_NO_VTABLE CLayer :
495 public CComObjectRootEx<CComSingleThreadModel>,
496 // public CComCoClass<CLayer, &CLSID_Layer>,
497 public ISupportErrorInfo,
498 public IConnectionPointContainerImpl<CLayer>,
499 public IDispatchImpl<ILayer, &IID_ILayer, &LIBID_SERAPHYSCRIPTTOOLSLib>
504 //
\95`
\89æ
\83f
\81[
\83^
\81[
\95Û
\8cì
\82Ì
\83N
\83\8a\83e
\83B
\83J
\83\8b\83Z
\83b
\83V
\83\87\83\93
505 InitializeCriticalSection(&m_objDrawingDataProtection);
506 //
\83\8c\83C
\83\84\81[
\8aî
\96{
\83f
\81[
\83^
\82Ì
\8f\89\8aú
\89»
510 m_dwFillColor = 0x808080;
511 m_dwFontColor = ::GetSysColor(COLOR_WINDOWTEXT);
512 ZeroMemory(m_szFontName,MAX_PATH);
513 //
\83}
\83b
\83s
\83\93\83O
\83\82\81[
\83h
514 m_bTextMappingMode = 0;
515 m_bFontTextMappingMode = 0;
519 //DECLARE_REGISTRY_RESOURCEID(IDR_LAYER)
521 DECLARE_PROTECT_FINAL_CONSTRUCT()
523 BEGIN_COM_MAP(CLayer)
524 COM_INTERFACE_ENTRY(ILayer)
525 COM_INTERFACE_ENTRY(IDispatch)
526 COM_INTERFACE_ENTRY(ISupportErrorInfo)
527 COM_INTERFACE_ENTRY(IConnectionPointContainer)
529 BEGIN_CONNECTION_POINT_MAP(CLayer)
530 END_CONNECTION_POINT_MAP()
533 // ISupportsErrorInfo
534 STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
538 long GetMappedValue(VARIANT var,long def = 0);
539 STDMETHOD(SetMappingMode)(/*[in]*/VARIANT mode);
540 STDMETHOD(Picture)(/*[in]*/VARIANT punkVal,/*[in]*/VARIANT x,/*[in]*/VARIANT y,/*[in,optional]*/VARIANT w,/*[in,optional]*/VARIANT h);
542 STDMETHOD(FillArc)(/*[in]*/VARIANT x1,/*[in]*/VARIANT y1,/*[in]*/VARIANT x2,/*[in]*/VARIANT y2,/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey);
543 STDMETHOD(FillCircle)(/*[in]*/VARIANT x,/*[in]*/VARIANT y,/*[in]*/VARIANT radius);
544 STDMETHOD(FillBox)(/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey);
545 STDMETHOD(Arc)(/*[in]*/VARIANT x1,/*[in]*/VARIANT y1,/*[in]*/VARIANT x2,/*[in]*/VARIANT y2,/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey);
546 STDMETHOD(Box)(/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey);
547 STDMETHOD(Line)(/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey);
548 STDMETHOD(Circle)(/*[in]*/VARIANT x,/*[in]*/VARIANT y,/*[in]*/VARIANT radius);
549 STDMETHOD(Text)(/*[in]*/VARIANT x,/*[in]*/VARIANT y,/*[in]*/VARIANT text);
550 STDMETHOD(Polygon)(/*[in]*/VARIANT cx,/*[in]*/VARIANT cy,/*[in]*/VARIANT arrayPt);
551 STDMETHOD(FillRBox)(/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey,/*[in]*/VARIANT w,/*[in]*/VARIANT h);
552 STDMETHOD(get_FontSize)(/*[out, retval]*/ short *pVal);
553 STDMETHOD(put_FontSize)(/*[in]*/ short newVal);
554 STDMETHOD(get_FillColor)(/*[out, retval]*/ long *pVal);
555 STDMETHOD(put_FillColor)(/*[in]*/ long newVal);
556 STDMETHOD(get_FontName)(/*[out, retval]*/ BSTR *pVal);
557 STDMETHOD(put_FontName)(/*[in]*/ BSTR newVal);
558 STDMETHOD(get_Visible)(/*[out, retval]*/ BOOL *pVal);
559 STDMETHOD(put_Visible)(/*[in]*/ BOOL newVal);
560 STDMETHOD(get_FontColor)(/*[out, retval]*/ long *pVal);
561 STDMETHOD(put_FontColor)(/*[in]*/ long newVal);
562 STDMETHOD(get_Color)(/*[out, retval]*/ long *pVal);
563 STDMETHOD(put_Color)(/*[in]*/ long newVal);
564 STDMETHOD(TextBox)(/*[in]*/VARIANT sx,/*[in]*/VARIANT sy,/*[in]*/VARIANT ex,/*[in]*/VARIANT ey,/*[in]*/VARIANT text,/*[in,optional]*/VARIANT fmt);
566 void AddDrawData(drawdata* pDrawData);
568 CRITICAL_SECTION m_objDrawingDataProtection;
569 list<drawdata*> m_lstDraw;
575 CHAR m_szFontName[MAX_PATH];
576 int m_bTextMappingMode;
577 int m_bFontTextMappingMode;