ExpandingDialog.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:4k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // ExpandingDialog.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "ExpandingDialog.h"
  6. #include <windowsx.h>
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CExpandingDialog dialog
  14. CExpandingDialog::CExpandingDialog(UINT nIDTemplate, CWnd* pParent /*=NULL*/)
  15. : CDialog(nIDTemplate, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CExpandingDialog)
  18. // NOTE: the ClassWizard will add member initialization here
  19. //}}AFX_DATA_INIT
  20. m_bExpanded = true;
  21. m_nIDButton = IDC_BUTTON_MORE;
  22. m_strExpand = "More";
  23. m_SizeBox = m_Size = CSize(0, 0);
  24. }
  25. void CExpandingDialog::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. //{{AFX_DATA_MAP(CExpandingDialog)
  29. // NOTE: the ClassWizard will add DDX and DDV calls here
  30. //}}AFX_DATA_MAP
  31. }
  32. BEGIN_MESSAGE_MAP(CExpandingDialog, CDialog)
  33. //{{AFX_MSG_MAP(CExpandingDialog)
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CExpandingDialog message handlers
  38. void CExpandingDialog::ExpandBox(BOOL fExpand)
  39. {
  40. // if the dialog is already in the requested state, return
  41. // immediately.
  42. if (fExpand == m_bExpanded) return;
  43. CRect rcDefaultBox, rcChild, rcIntersection;
  44. CWnd * wndChild=NULL;
  45. CWnd * wndDefaultBox=NULL;
  46. // get the window of the button 
  47. CWnd * pCtrl = GetDlgItem(m_nIDButton);
  48. if (pCtrl==NULL) return;
  49. /*
  50. wndDefaultBox = GetDlgItem(m_nIDFrame);
  51. if (wndDefaultBox==NULL) return;
  52. wndDefaultBox->GetWindowRect(&rcDefaultBox);
  53. //*/
  54. rcDefaultBox = CRect(CPoint(0, 0), m_SizeBox);
  55. ClientToScreen(rcDefaultBox);
  56. // enable/disable all of the child window outside of the default box.
  57. wndChild = GetTopWindow();
  58. for ( ; wndChild != NULL; wndChild = wndChild->GetWindow(GW_HWNDNEXT))
  59. {
  60. // get rectangle occupied by child window in screen coordinates.
  61. wndChild->GetWindowRect(&rcChild);
  62. if (!rcIntersection.IntersectRect(&rcChild,&rcDefaultBox))
  63. {
  64. wndChild->EnableWindow(fExpand);
  65. }
  66. }
  67. if (!fExpand)  // we are contracting
  68. {
  69. _ASSERT(m_bExpanded);
  70. // shrink the dialog box so that it encompasses everything from the top,
  71. // left up to and including the default box.
  72. SetWindowPos(NULL,0,0,
  73. m_SizeBox.cx,
  74. m_SizeBox.cy,
  75. SWP_NOZORDER|SWP_NOMOVE);
  76. CString strText = m_strExpand + ">>";
  77. strText = "扩展>>";
  78. pCtrl->SetWindowText(strText);
  79. m_bExpanded = FALSE;
  80. }
  81. else // we are expanding
  82. {
  83. _ASSERT(!m_bExpanded);
  84. SetWindowPos(NULL, 0, 0, m_Size.cx, m_Size.cy, SWP_NOZORDER|SWP_NOMOVE);
  85. // make sure that the entire dialog box is visible on the user's
  86. // screen.
  87. // SendMessage(DM_REPOSITION,0,0);
  88. CString strText = "<<" + m_strExpand;
  89. strText = "简化<<";
  90. pCtrl->SetWindowText(strText);
  91. m_bExpanded = TRUE;
  92. }
  93. }
  94.  
  95. void CExpandingDialog::OnClickAdvanced() 
  96. {
  97. Expand(!m_bExpanded);
  98. }
  99. BOOL CExpandingDialog::Expand(BOOL bExpand)
  100. {
  101. if (bExpand == m_bExpanded) return TRUE;
  102. ExpandBox(bExpand);
  103. CWnd * pCtrl = GetDlgItem(m_nIDButton);
  104. if (pCtrl != NULL)
  105. {
  106. GetNextDlgTabItem(pCtrl,0)->SetFocus();
  107. }
  108. return(m_bExpanded == bExpand);
  109. }
  110. BOOL CExpandingDialog::OnInitDialog() 
  111. {
  112. CDialog::OnInitDialog();
  113. CRect rc;
  114. GetWindowRect(&rc);
  115. m_Size = CSize(rc.Width(), rc.Height());
  116. m_SizeBox = m_Size;
  117. m_SizeBox.cy = 230;
  118. return TRUE;  // return TRUE unless you set the focus to a control
  119.               // EXCEPTION: OCX Property Pages should return FALSE
  120. }
  121. BOOL CExpandingDialog::OnCommand(WPARAM wParam, LPARAM lParam) 
  122. {
  123. HWND hwndCtl;
  124. int id;
  125. UINT codeNotify;
  126. // crack the WM_COMMAND message
  127. id = GET_WM_COMMAND_ID(wParam,lParam);
  128. hwndCtl = GET_WM_COMMAND_HWND(wParam,lParam);
  129. codeNotify = GET_WM_COMMAND_CMD(wParam,lParam);
  130. // if the "Advanced" button was clicked, then call the 
  131. // message handler.
  132. if ((id == m_nIDButton)&&(codeNotify==BN_CLICKED))
  133. {
  134. OnClickAdvanced();
  135. }
  136. return CDialog::OnCommand(wParam, lParam);
  137. }