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

酒店行业

开发平台:

Visual C++

  1. // HotelInfoShow.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "qq.h"
  5. #include "HotelInfoShow.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. #define AW_CENTER 0x00000010
  12. #include "QQView.h"
  13. #include "Page3.h"
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CHotelInfoShow dialog
  16. //CString CHotelInfoShow::lpszShowText="";
  17. CHotelInfoShow::CHotelInfoShow(CWnd* pParent /*=NULL*/)
  18. : CDialog(CHotelInfoShow::IDD,pParent)
  19. {
  20. //{{AFX_DATA_INIT(CHotelInfoShow)
  21. // NOTE: the ClassWizard will add member initialization here
  22. //}}AFX_DATA_INIT
  23.     lpszShowText="";//构造赋值
  24. // pntCenter.x=0;
  25. // pntCenter.y=0;
  26. }
  27. void CHotelInfoShow::DoDataExchange(CDataExchange* pDX)
  28. {
  29. CDialog::DoDataExchange(pDX);
  30. //{{AFX_DATA_MAP(CHotelInfoShow)
  31. // NOTE: the ClassWizard will add DDX and DDV calls here
  32. //}}AFX_DATA_MAP
  33. }
  34. BEGIN_MESSAGE_MAP(CHotelInfoShow, CDialog)
  35. //{{AFX_MSG_MAP(CHotelInfoShow)
  36. ON_WM_LBUTTONDOWN()
  37. ON_WM_PAINT()
  38. ON_WM_TIMER()
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CHotelInfoShow message handlers
  43. BOOL CHotelInfoShow::OnInitDialog() 
  44. {
  45. CDialog::OnInitDialog();
  46. // TODO: Add extra initialization here
  47. //文本何时显示的问题:
  48. //在初始化函数OnInitDialog()中先调用animateWindow()形成动画效果
  49. //在窗口完成动画效果后,如果从其他地方调用CDC::DrawText()函数的话
  50. //没有效果,在窗口中根本就不会显示你要显示的文本
  51. //解决方法是:
  52. //在直接调用AnimateWindow()后,立即调用CDC::DrawText()函数显示的文本
  53. //是正确的文本
  54. //若想通过OnPaint()函数来达到这个目的不行
  55. //初始化函数中调用AnimateWindow()后不会再调用OnPaint(),达不到预期的效果
  56. //  [6/7/2003-20:08]
  57. //当鼠标点击视图区时,以鼠标点击的点为中心点逐渐显示对话框
  58. //但是显示的开始点总是视图区域的原点CPoint(0,0);
  59. //需要修改
  60. //  [6/7/2003-22:52]
  61. // CRect rect;
  62. // this->GetClientRect(&rect);
  63. // CQQView* pView=CQQView::GetView();
  64. // CPoint pntCenter=pView->pnt;
  65. //  ClientToScreen(&pntCenter);//pntCenter.x-rect.Width()/2,pntCenter.y-rect.Height()/2
  66. // this->SetWindowPos(&CWnd::wndTop,pntCenter.x-rect.Width()/2,pntCenter.y-rect.Height()/2,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); 
  67. this->CenterWindow();
  68. HINSTANCE m_hInst=LoadLibrary("user32.dll");
  69. typedef BOOL(WINAPI* LPANIMATEWND)(HWND,DWORD,DWORD);
  70. LPANIMATEWND m_aniwnd=(LPANIMATEWND)GetProcAddress(m_hInst,"AnimateWindow");
  71. m_aniwnd(this->GetSafeHwnd(),650,AW_CENTER);
  72. this->ShowText(lpszShowText);//显示文本
  73. return TRUE;  // return TRUE unless you set the focus to a control
  74.               // EXCEPTION: OCX Property Pages should return FALSE
  75. }
  76. void CHotelInfoShow::OnLButtonDown(UINT nFlags, CPoint point) 
  77. {
  78.   // TODO: Add your message handler code here and/or call default
  79. CDialog::OnLButtonDown(nFlags, point);
  80.     CDialog::EndDialog(IDOK);
  81. CQQView* pView=CQQView::GetView();
  82. CDC* pDC=pView->GetDC();
  83. CRect rect;
  84. pView->GetClientRect(&rect);
  85. CPage3 page3;
  86. if(pView->nImgTypeInView==13)
  87. {
  88. //     pView->Invalidate(TRUE);
  89. //there is a bug!!
  90. //重画有问题!!仍然需要解决!!!!!!!
  91. //  [6/7/2003-21:46]
  92. pDC->FillSolidRect(rect,pDC->GetBkColor());
  93.         page3.DrawFrameImg(pDC,CRect(page3.xStart,page3.yStart,page3.xStart+350,page3.yStart+200));
  94. }
  95. }
  96. void CHotelInfoShow::OnPaint() 
  97. {
  98. CPaintDC dc(this); // device context for painting
  99. // TODO: Add your message handler code here
  100. //        CRect rect;
  101. // this->GetClientRect(&rect);
  102. // CSize size=dc.GetTextExtent(lpszShowText);
  103. // long xStart=rect.left+(rect.Width()-size.cx)/2;
  104. // long yStart=rect.top+(rect.Height()-size.cy)/2;
  105. // // dc.TextOut(xStart,yStart,lpszShowText);
  106. // CRect rectText(xStart,yStart,xStart+size.cx,yStart+size.cy);
  107. // dc.SetBkMode(TRANSPARENT);
  108. //        //打印文本的时候不能自动换行 
  109. // if( size.cx < rect.Width())
  110. // dc.DrawText(lpszShowText ,rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  111. // else
  112. // dc.DrawText(lpszShowText, rectText, DT_CENTER | DT_WORDBREAK);
  113.   //  dc.DrawText(lpszShowText,&rectText,DT_CENTER | DT_WORDBREAK);
  114. // bFinish=false;
  115. // Do not call CDialog::OnPaint() for painting messages
  116. }
  117. void CHotelInfoShow::OnTimer(UINT nIDEvent) 
  118. {
  119. // TODO: Add your message handler code here and/or call default
  120. // 通过时间器来形成动画的效果很不好,屏幕总是在闪动 [5/25/2003-13:28]
  121. // this->ShowWindow(SW_HIDE);
  122. // CRect rect;
  123. // this->GetClientRect(&rect);
  124. // long xCenter=(rect.left+rect.right)/2;
  125. // long yCenter=(rect.top+rect.bottom)/2;
  126. //
  127. // CRgn testrgn; 
  128. //
  129. // // int m=GetSystemMetrics(SM_CYSIZEFRAME); 
  130. //
  131. // //以下代码实现对话框的动态弹出 
  132. // static int i=10;
  133. // if(i<rect.Width()/2)
  134. // {
  135. // testrgn.CreateRectRgn(xCenter-i,yCenter-i,xCenter+i,yCenter+i); 
  136. //
  137. // SetWindowRgn((HRGN) testrgn,TRUE); 
  138. //
  139. // ShowWindow(SW_SHOW); 
  140. //
  141. // CenterWindow(); 
  142. //
  143. // testrgn.DeleteObject(); 
  144. // i+=5;
  145. // }
  146. //
  147. // else
  148. // {
  149. // this->ShowWindow(SW_SHOW);//动态显示完成后要显示原来的对话框
  150. // this->KillTimer(0);
  151. // }
  152. CDialog::OnTimer(nIDEvent);
  153. }
  154. /************************************************************************/
  155. /*         函数功能:将位图拷贝道指定的Rect内
  156. //         参数说明:
  157. //         pDC:设备上下文,用来拷贝位图
  158. //         rect:用来拷贝位图的区域                                                                     */
  159. /************************************************************************/
  160. void CHotelInfoShow::FillRectUseBMP(CDC *pDC, CRect rect)
  161. {
  162.     CDC MemDC;
  163. MemDC.CreateCompatibleDC(pDC);//创建与pDC兼容的设备上下文
  164. CBitmap m_bitmap;
  165. m_bitmap.LoadBitmap(IDB_TEXTBK);
  166. MemDC.SelectObject(&m_bitmap);//将位图对象选入设备上下文
  167. BITMAP bitamp;
  168. m_bitmap.GetBitmap(&bitamp);//获取位图属性
  169. pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,bitamp.bmWidth,bitamp.bmHeight,SRCCOPY);
  170. m_bitmap.DeleteObject();
  171. }
  172. void CHotelInfoShow::ShowText(CString strShowText)
  173. {
  174.     CDC* pDC=this->GetDC();
  175. CRect rect,strTextRect;
  176. GetClientRect(&rect);
  177. // int nMaxLength=0;
  178. CRect rectTextShw(rect.Width()/10,rect.Height()/10,rect.Width()*9/10,rect.Height()*9/10);
  179. CSize sizeText=pDC->GetTextExtent(strShowText);
  180. FillRectUseBMP(pDC,rect);
  181. pDC->SetBkMode(TRANSPARENT);
  182.     if(sizeText.cx<rectTextShw.Width())
  183. {
  184. pDC->DrawText(strShowText,&rectTextShw,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  185. }
  186. else
  187. {
  188. pDC->DrawText(strShowText,&rectTextShw,DT_CENTER | DT_WORDBREAK);
  189. }
  190. }