DlgAftReg.cpp
上传用户:panpan8800
上传日期:2013-06-29
资源大小:274k
文件大小:5k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. // DlgAftReg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ImageProcessing.h"
  5. #include "DlgAftReg.h"
  6. #include "CDib.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CDlgAftReg dialog
  14. CDlgAftReg::CDlgAftReg(CWnd* pParent /*=NULL*/, CDib* pDibShow)
  15. : CDialog(CDlgAftReg::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CDlgAftReg)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. m_pDib = pDibShow;
  21. m_bCalImgLoc = FALSE;
  22. }
  23. void CDlgAftReg::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CDlgAftReg)
  27. // NOTE: the ClassWizard will add DDX and DDV calls here
  28. //}}AFX_DATA_MAP
  29. }
  30. BEGIN_MESSAGE_MAP(CDlgAftReg, CDialog)
  31. //{{AFX_MSG_MAP(CDlgAftReg)
  32. ON_WM_PAINT()
  33. // NOTE: the ClassWizard will add message map macros here
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CDlgAftReg message handlers
  38. void CDlgAftReg::OnPaint()
  39. {
  40. CPaintDC dc(this); 
  41. if(!m_bCalImgLoc)
  42. CalImgLocation();
  43. CSize sizeDisplay;
  44. CPoint pointDisplay;
  45. if(m_pDib != NULL){
  46. if(!m_pDib->IsEmpty()){
  47. sizeDisplay.cx=m_pDib->m_lpBMIH->biWidth;
  48. sizeDisplay.cy=m_pDib->m_lpBMIH->biHeight;
  49. pointDisplay.x = m_rectImage.left;
  50. pointDisplay.y = m_rectImage.top;
  51. m_pDib->Draw(&dc,pointDisplay,sizeDisplay);
  52. }
  53. }
  54. }
  55. /*************************************************************************
  56.  *
  57.  * 函数名称:
  58.  *   CalImageLocation()
  59.  *
  60.  * 输入参数:
  61.  *   无
  62.  *
  63.  * 返回值:
  64.  *   无
  65.  *
  66.  * 说明:
  67.  *   该函数设置对话框中的控件位置和大小,并设置显示图象的位置。默认的图象大小为352×288,如果图象小于
  68.  *此大小,则控件大小设置为352×288,并将图象放置在控件中间。
  69.  *
  70.  *************************************************************************
  71.  */
  72. void CDlgAftReg::CalImgLocation()
  73. {
  74. // 获得控件IDC_DlgAftReg_IMAGE的句柄,并获得控件的初始位置信息
  75. CWnd* pWnd=GetDlgItem(IDC_AFTREG_IMAGE);
  76. WINDOWPLACEMENT *winPlacement;
  77. winPlacement=new WINDOWPLACEMENT;
  78. pWnd->GetWindowPlacement(winPlacement);
  79. // 图象宽度
  80. int nImageWidth = 0;
  81. // 图象高度
  82. int nImageHeight = 0;
  83. if(m_pDib != NULL){
  84. nImageWidth = m_pDib->m_lpBMIH->biWidth;
  85. nImageHeight = m_pDib->m_lpBMIH->biHeight;
  86. }
  87. // 调整控件IDC_REG_INIT_IMAGE的大小位置,并同时设置显示基准图象的位置
  88. if(nImageHeight > 352){
  89. winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + nImageHeight;
  90. m_rectImage.bottom = winPlacement->rcNormalPosition.bottom;
  91. m_rectImage.top    = winPlacement->rcNormalPosition.top;
  92. }
  93. else{
  94. winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + 352;
  95. m_rectImage.bottom = winPlacement->rcNormalPosition.top + 176 + nImageHeight/2;
  96. m_rectImage.top    = winPlacement->rcNormalPosition.top + 176 - nImageHeight/2;
  97. }
  98. if(nImageWidth > 288){
  99. winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + nImageWidth;
  100. m_rectImage.right = winPlacement->rcNormalPosition.right;
  101. m_rectImage.left  = winPlacement->rcNormalPosition.left;
  102. }
  103. else{
  104. winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + 288;
  105. m_rectImage.right = winPlacement->rcNormalPosition.left + 144 + nImageWidth/2;
  106. m_rectImage.left  = winPlacement->rcNormalPosition.left + 144 - nImageWidth/2;
  107. }
  108. // 设置IDC_DlgAftReg_IMAGE控件的大小位置
  109. pWnd->SetWindowPlacement(winPlacement);
  110. // 获得IDC_DlgAftReg_IMAGE控件的下边位置,以便调整其他控件的位置
  111. int nIniImgBottom, nIniImgRight,nIniImgLeft;
  112. nIniImgBottom = winPlacement->rcNormalPosition.bottom;
  113. nIniImgLeft   = winPlacement->rcNormalPosition.left;
  114. nIniImgRight  = winPlacement->rcNormalPosition.right;
  115. // 设置控件IDOK的位置大小
  116. pWnd=GetDlgItem(IDOK);
  117. pWnd->GetWindowPlacement(winPlacement);
  118. winPlacement->rcNormalPosition.top = nIniImgBottom +15;
  119. winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
  120. pWnd->SetWindowPlacement(winPlacement);
  121. // 设置控件IDCANCEL的位置大小
  122. pWnd=GetDlgItem(IDCANCEL);
  123. pWnd->GetWindowPlacement(winPlacement);
  124. winPlacement->rcNormalPosition.top = nIniImgBottom +15;
  125. winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
  126. pWnd->SetWindowPlacement(winPlacement);
  127. this->GetWindowPlacement(winPlacement);
  128. winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60+ 70;
  129. winPlacement->rcNormalPosition.left   = nIniImgLeft   - 20;
  130. winPlacement->rcNormalPosition.right  = nIniImgRight  + 20;
  131. this->SetWindowPlacement(winPlacement);
  132. m_bCalImgLoc = TRUE;
  133. // 释放已分配内存
  134. delete winPlacement;
  135. }