Page3.cpp
上传用户:sunh8215
上传日期:2010-02-13
资源大小:1616k
文件大小:9k
源码类别:

酒店行业

开发平台:

Visual C++

  1. // Page3.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "qq.h"
  5. #include "Page3.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /*
  12.  * 常数定义
  13.  */
  14. const DFrame=2;
  15. const HFrame=18;
  16. const NLengthMainFrame=80;
  17. const NLengthSubFrame=50;
  18. const nDXWIDTH=NLengthMainFrame-NLengthSubFrame;
  19. const nX=120+nDXWIDTH;//150
  20. #include "QQView.h"
  21. #include "MainFrm.h"
  22. #include "Tools.h"
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CPage3 dialog
  25. IMPLEMENT_DYNCREATE(CPage3, CDialog)
  26. /*
  27.  * 静态成员初始化
  28.  */
  29. long CPage3::xStart=0;
  30. long CPage3::yStart=0;
  31. CPoint CPage3::pntArray[30]={CPoint(0,0)};
  32. BOOL CPage3::bDrawTreeImage=FALSE;
  33. BOOL CPage3::bDrawFrameImage=FALSE;
  34. CPage3::CPage3(CWnd* pParent /*=NULL*/)
  35. : CDialog(CPage3::IDD, pParent)
  36. {
  37. //{{AFX_DATA_INIT(CPage3)
  38. m_ShowType = -1;
  39. //}}AFX_DATA_INIT
  40. }
  41. void CPage3::DoDataExchange(CDataExchange* pDX)
  42. {
  43. CDialog::DoDataExchange(pDX);
  44. //{{AFX_DATA_MAP(CPage3)
  45. DDX_Radio(pDX, IDC_RADIO1, m_ShowType);
  46. //}}AFX_DATA_MAP
  47. }
  48. BEGIN_MESSAGE_MAP(CPage3, CDialog)
  49. //{{AFX_MSG_MAP(CPage3)
  50. ON_BN_CLICKED(IDC_RADIO1, OnRadio)
  51. ON_BN_CLICKED(IDC_RADIO2, OnRadio)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CPage3 message handlers
  56. /*
  57.  * pDC:  画图的设备上下文
  58.  *  rect: 画图的范围
  59.  */
  60. void CPage3::DrawFrameImage(CDC *pDC,CRect rect)
  61. {//画公司的框架图
  62.    int nXWidth=rect.Width()/10;
  63.    int nYHeight=rect.Height()/10;
  64.    //构造可画图矩形区域
  65.    CRect rectDraw(rect.left+nXWidth,rect.top+nYHeight,rect.right-nXWidth,rect.bottom-nYHeight);
  66.    int   nDX=rectDraw.Width()/10;
  67.    long  XCenter=(rectDraw.left+rectDraw.right)/2;
  68.    DrawRangeText(XCenter-nDX,rectDraw.top,XCenter+nDX,rectDraw.top+nDX,"酒店",pDC);
  69. }
  70. void CPage3::DrawRangeText(long x1, long y1, long x2, long y2, CString strTtext, CDC *pDC)
  71. {//在矩形区域内部画文本
  72. //如果给定的矩形没有文本那么大,就调整矩形的大小来适应文本
  73.         CSize size=pDC->GetTextExtent(strTtext);//得到文本的大小
  74. if(abs(x2-x1)<size.cx)
  75. {
  76. if(x1<=x2) 
  77. {
  78. x2=x1+size.cx+1;
  79. }
  80. else{x1=x2+size.cx+1;}
  81. }
  82. if(abs(y2-y1)<size.cy)
  83. {
  84. if(y1<=y2) 
  85. {
  86. y2=y1+size.cy+1;
  87. }
  88. else{y1=y2+size.cy+1;}
  89. }
  90.         long xStart,yStart;
  91. xStart=x1+(abs(x2-x1)-size.cx)/2;
  92. yStart=y1+(abs(y2-y1)-size.cy)/2;
  93. pDC->MoveTo(x1,y1);
  94. pDC->LineTo(x2,y1);
  95. pDC->LineTo(x2,y2);
  96. pDC->LineTo(x1,y2);
  97. pDC->LineTo(x1,y1);
  98. pDC->TextOut(xStart,yStart,strTtext);//  [5/22/2003]
  99. }
  100. void CPage3::OnRadio() 
  101. {
  102. // TODO: Add your control notification handler code here
  103. this->UpdateData(TRUE);
  104. CQQView* pView=CQQView::GetView();
  105. CDC* pDC=pView->GetDC();
  106. CRect rect;
  107. pView->GetClientRect(&rect);
  108. long xstart=rect.left+(rect.Width()-350)/2;
  109. long ystart=rect.top+(rect.Height()-200)/2;
  110. if(m_ShowType==0)
  111. {//树型类型
  112. pView->nImgTypeInView=12;
  113. pView->bFirstRun=FALSE;
  114. //  pDC->FillSolidRect(rect,pDC->GetBkColor());
  115. //  [6/29/2003-9:36]
  116. //  DrawTreeImage(pDC,CPoint(xstart+65,0));//画酒店树型图
  117. bDrawTreeImage=TRUE;//画树型图
  118. pView->Invalidate(TRUE);
  119. }
  120. if(m_ShowType==1)
  121. {//框架类型
  122. pView->nImgTypeInView=13;//指定为框架图像类型
  123. pView->bFirstRun=FALSE;
  124. bDrawFrameImage=TRUE;
  125. pView->Invalidate(TRUE);//引起重画
  126. //  pDC->FillSolidRect(rect,pDC->GetBkColor());
  127. //         this->DrawFrameImg(pDC,CRect(xstart,ystart,xstart+350,ystart+200));
  128. xStart=xstart;
  129. yStart=ystart;
  130. //拷贝当前屏幕的图像为拖动或者其他的消息引起的重画情况
  131. // ClientToScreen(&rect);//将客户区域转变成屏幕坐标
  132. // ScreenToClient(&rect);//有些问题,拖动的时候显示的图像不正确
  133. //     pView->m_CurScreenBitmap=::GetScreenBitmap(&rect);
  134. }
  135. }
  136. void CPage3::DrawFrameImg(CDC *pDC,CRect rect)
  137. {
  138. CBitmap bitmap;
  139. bitmap.LoadBitmap(IDB_FRAMEIMG);
  140. CDC m;
  141. m.CreateCompatibleDC(pDC);//创建一个于pDC兼容的DC
  142. m.SelectObject(&bitmap);
  143. pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m,0,0,SRCCOPY);
  144.         m.DeleteDC(); 
  145. }
  146. CPoint CPage3::GetImgOrgPoint()
  147. {//得到图像相对客户区的坐标
  148. CQQView* pView=CQQView::GetView();
  149. CDC* pDC=pView->GetDC();
  150. return CPoint(xStart,yStart);
  151. }
  152. static LPTSTR strTextArray[]=
  153. {  
  154. "酒店",
  155. "客房部",
  156. "接待",
  157. "楼层",
  158. "洗衣间",
  159. "餐饮部",
  160. "餐厅",
  161. "酒吧",
  162. "康乐部",
  163. "洗浴",
  164. "娱乐",
  165. "财务部",
  166. "购物",
  167. "库房",
  168. "收银台",
  169. NULL
  170. };
  171. void CPage3::DrawFrameAndText(CDC *pDC, CPoint LeftTop, CPoint RightButtom, const CString &strDrawedText)
  172. {
  173. //画指定的矩形和矩形内的文本
  174.     //画矩形
  175. pDC->MoveTo(LeftTop);
  176. pDC->LineTo(RightButtom.x,LeftTop.y);
  177. pDC->LineTo(RightButtom);
  178. pDC->LineTo(LeftTop.x,RightButtom.y);
  179. pDC->LineTo(LeftTop);
  180. //画矩形内的文本
  181. CSize sizeText=pDC->GetTextExtent(strDrawedText);
  182. CRect FrameRect(LeftTop,RightButtom);
  183. if(FrameRect.Width()>sizeText.cx&&FrameRect.Height()>sizeText.cy)
  184. {
  185. if(!strDrawedText.IsEmpty())
  186. {
  187. long x1=LeftTop.x+(FrameRect.Width()-sizeText.cx)/2;
  188. long y1=LeftTop.y+(FrameRect.Height()-sizeText.cy)/2;
  189. long x2=RightButtom.x-(FrameRect.Width()-sizeText.cx)/2;
  190. long y2=RightButtom.y-(FrameRect.Height()-sizeText.cx)/2;
  191. CRect rectDrawText(x1,y1,x2,y2);
  192.             pDC->DrawText(strDrawedText,&rectDrawText,DT_CENTER );
  193. }
  194. }
  195. }
  196. void CPage3::DrawTreeImage(CDC *pDC, CPoint pntStart)
  197. {
  198. pntArray[0]=CPoint(0+pntStart.x,0+pntStart.y);pntArray[1]=CPoint(100+pntStart.x,25+pntStart.y);pntArray[2]=CPoint(120+pntStart.x,50+pntStart.y);
  199. pntArray[10]=CPoint(120+pntStart.x,50+4*(DFrame+HFrame)+pntStart.y);
  200. pntArray[16]=CPoint(120+pntStart.x,50+7*(DFrame+HFrame)+pntStart.y);
  201. pntArray[22]=CPoint(120+pntStart.x,50+10*(DFrame+HFrame)+pntStart.y);
  202. for(int i=0;i<14;i++)
  203. {
  204. pntArray[3+i*2]=CPoint(pntStart.x+120+NLengthMainFrame,pntStart.y+50+HFrame+(DFrame+HFrame)*i);
  205. }
  206. for(i=0;i<3;i++)
  207. {//nX=150
  208. pntArray[4+i*2]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+1));
  209. pntArray[24+i*2]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+11));
  210. }
  211. for(i=0;i<2;i++)
  212. {
  213. pntArray[12+2*i]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+5));
  214. pntArray[18+2*i]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+8));
  215. }
  216. for(i=0;i<15;i++)
  217. {
  218. DrawFrameAndText(pDC,pntArray[i*2],pntArray[2*i+1],strTextArray[i]);
  219. }
  220. //画直线
  221. pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,pntArray[1].y);
  222. pDC->LineTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[22].y+pntArray[23].y)/2);
  223. pDC->LineTo(pntArray[22].x,(pntArray[22].y+pntArray[23].y)/2);
  224. pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[2].y+pntArray[3].y)/2);
  225. pDC->LineTo(pntArray[2].x,(pntArray[2].y+pntArray[3].y)/2);
  226. pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[10].y+pntArray[11].y)/2);
  227. pDC->LineTo(pntArray[10].x,(pntArray[10].y+pntArray[11].y)/2);
  228. pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[16].y+pntArray[17].y)/2);
  229. pDC->LineTo(pntArray[10].x,(pntArray[16].y+pntArray[17].y)/2);
  230. long nSubCenterX=((pntArray[0].x+pntArray[1].x)/2+pntArray[2].x)/2;
  231. long nSubCenterY=(pntArray[2].y+pntArray[3].y)/2;
  232. pDC->MoveTo(nSubCenterX,nSubCenterY);
  233. pDC->LineTo(nSubCenterX,(pntArray[8].y+pntArray[9].y)/2);
  234. pDC->LineTo(pntArray[8].x,(pntArray[8].y+pntArray[9].y)/2);
  235. pDC->MoveTo(nSubCenterX,(pntArray[4].y+pntArray[5].y)/2);
  236. pDC->LineTo(pntArray[4].x,(pntArray[4].y+pntArray[5].y)/2);
  237. pDC->MoveTo(nSubCenterX,(pntArray[6].y+pntArray[7].y)/2);
  238. pDC->LineTo(pntArray[6].x,(pntArray[6].y+pntArray[7].y)/2);
  239. pDC->MoveTo(nSubCenterX,(pntArray[10].y+pntArray[11].y)/2);
  240. pDC->LineTo(nSubCenterX,(pntArray[14].y+pntArray[15].y)/2);
  241. pDC->LineTo(pntArray[14].x,(pntArray[14].y+pntArray[15].y)/2);
  242. pDC->MoveTo(nSubCenterX,(pntArray[12].y+pntArray[13].y)/2);
  243. pDC->LineTo(pntArray[12].x,(pntArray[12].y+pntArray[13].y)/2);
  244. pDC->MoveTo(nSubCenterX,(pntArray[16].y+pntArray[17].y)/2);
  245. pDC->LineTo(nSubCenterX,(pntArray[20].y+pntArray[21].y)/2);
  246. pDC->LineTo(pntArray[20].x,(pntArray[20].y+pntArray[21].y)/2);
  247. pDC->MoveTo(nSubCenterX,(pntArray[18].y+pntArray[19].y)/2);
  248. pDC->LineTo(pntArray[18].x,(pntArray[18].y+pntArray[19].y)/2);
  249. pDC->MoveTo(nSubCenterX,(pntArray[22].y+pntArray[23].y)/2);
  250. pDC->LineTo(nSubCenterX,(pntArray[28].y+pntArray[29].y)/2);
  251. pDC->LineTo(pntArray[28].x,(pntArray[28].y+pntArray[29].y)/2);
  252. pDC->MoveTo(nSubCenterX,(pntArray[24].y+pntArray[25].y)/2);
  253. pDC->LineTo(pntArray[24].x,(pntArray[24].y+pntArray[25].y)/2);
  254. pDC->MoveTo(nSubCenterX,(pntArray[26].y+pntArray[27].y)/2);
  255. pDC->LineTo(pntArray[26].x,(pntArray[26].y+pntArray[27].y)/2);
  256. }