ImageView.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. // ImageView.cpp : CImageView クラス インプリメンテ�`ションファイル
  2. // Date 2006/05/17 Ver. 1.22 Psytec Inc.
  3. #include "stdafx.h"
  4. #include "QR_Image.h"
  5. #include "MainFrm.h"
  6. #include "ImageView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CImageView
  14. IMPLEMENT_DYNCREATE(CImageView, CView)
  15. CImageView::CImageView()
  16. {
  17. }
  18. CImageView::~CImageView()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CImageView, CView)
  22. //{{AFX_MSG_MAP(CImageView)
  23. ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
  24. ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
  25. ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
  26. ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
  27. ON_WM_ERASEBKGND()
  28. ON_WM_CONTEXTMENU()
  29. ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
  30. ON_WM_LBUTTONDOWN()
  31. //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CImageView 宙鮫
  35. void CImageView::OnDraw(CDC* pDC)
  36. {
  37. CRect rcClient;
  38. GetClientRect(&rcClient);
  39. CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
  40. if (pMainFrame->m_bDataEncoded)
  41. {
  42. int nSrcSize = pMainFrame->m_nSymbleSize;
  43. int nDstSize = min(rcClient.Width(), rcClient.Height());
  44. //咀葎 互堀晒匯稀壓坪贋坪起薦恂岻朔壓鮫中燕幣
  45. CDC* pWorkDC = new CDC;
  46. pWorkDC->CreateCompatibleDC(NULL);
  47. CBitmap* pWorkBitmap = new CBitmap;
  48. pWorkBitmap->CreateBitmap(nDstSize, nDstSize, 1, 1, NULL);
  49. CBitmap* pOldBitmap = pWorkDC->SelectObject(pWorkBitmap);
  50. pWorkDC->StretchBlt(0, 0, nDstSize, nDstSize, pMainFrame->m_pSymbleDC, 0, 0, nSrcSize, nSrcSize, SRCCOPY);
  51. pDC->BitBlt(0, 0, nDstSize, nDstSize, pWorkDC, 0, 0, SRCCOPY);
  52. pWorkDC->SelectObject(pOldBitmap);
  53. delete pWorkBitmap;
  54. delete pWorkDC;
  55. }
  56. else
  57. {
  58. pDC->FillSolidRect(&rcClient, RGB(255, 255, 255));
  59. }
  60. }
  61. BOOL CImageView::OnEraseBkgnd(CDC* pDC)
  62. {
  63. CRect rcClient;
  64. GetClientRect(&rcClient);
  65. // 喘易畠中与懲憲催燕幣曝囃參翌
  66. if (rcClient.Width() != rcClient.Height())
  67. {
  68. if (rcClient.Width() > rcClient.Height())
  69. rcClient.left += rcClient.Height();
  70. else
  71. rcClient.top += rcClient.Width();
  72. pDC->FillSolidRect(&rcClient, RGB(255, 255, 255));
  73. }
  74. return TRUE;
  75. }
  76. /////////////////////////////////////////////////////////////////////////////
  77. // CImageView �\僅
  78. #ifdef _DEBUG
  79. void CImageView::AssertValid() const
  80. {
  81. CView::AssertValid();
  82. }
  83. void CImageView::Dump(CDumpContext& dc) const
  84. {
  85. CView::Dump(dc);
  86. }
  87. #endif //_DEBUG
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CImageView メッセ�`ジ ハンドラ
  90. /////////////////////////////////////////////////////////////////////////////
  91. // 喇報炎汽似嘔囚議貧性暇汽燕幣
  92. void CImageView::OnContextMenu(CWnd* pWnd, CPoint point)
  93. {
  94. CMenu Menu;
  95. // 揃暇汽(彿坿)
  96. Menu.LoadMenu(IDR_IMAGEMENU);
  97. // 絹廁�pop up �暇汽函誼
  98. CMenu* pPopupMenu = Menu.GetSubMenu(0);
  99. // 暇汽�朕議嗤丼/涙丼晒
  100. pPopupMenu->EnableMenuItem(ID_EDIT_COPY, ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_bDataEncoded ? MF_ENABLED : MF_GRAYED);
  101. // 燕幣貧性暇汽
  102. pPopupMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTBUTTON, point.x, point.y, this);
  103. }
  104. /////////////////////////////////////////////////////////////////////////////
  105. // メニュ�`��朕厚仟
  106. void CImageView::OnUpdateEditUndo(CCmdUI* pCmdUI)
  107. {
  108. pCmdUI->Enable(FALSE);
  109. }
  110. void CImageView::OnUpdateEditCut(CCmdUI* pCmdUI)
  111. {
  112. pCmdUI->Enable(FALSE);
  113. }
  114. void CImageView::OnUpdateEditCopy(CCmdUI* pCmdUI)
  115. {
  116. pCmdUI->Enable(((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_bDataEncoded);
  117. }
  118. void CImageView::OnUpdateEditPaste(CCmdUI* pCmdUI)
  119. {
  120. pCmdUI->Enable(FALSE);
  121. }
  122. // 暇汽糞佩
  123. void CImageView::OnEditCopy()
  124. {
  125. ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->CopyImage();
  126. }
  127. /////////////////////////////////////////////////////////////////////////////
  128. //OLE 溶慧糞�
  129. void CImageView::OnLButtonDown(UINT nFlags, CPoint point)
  130. {
  131. if (((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_bDataEncoded)
  132. {
  133. ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->CopyImage(&m_OleDataSource);
  134. }
  135. CView::OnLButtonDown(nFlags, point);
  136. }