ControlDlg.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. // ControlDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "Control.h"
  5. #include "ControlDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // CControlDlg 对话框
  10. CControlDlg::CControlDlg(CWnd* pParent /*=NULL*/)
  11. : CSkinDialog(CControlDlg::IDD, pParent)
  12. {
  13. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  14. m_bIsInit = false;
  15. }
  16. void CControlDlg::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CSkinDialog::DoDataExchange(pDX);
  19. //DDX_Control(pDX,IDC_LISTBAR,m_ListBoxEx);
  20. }
  21. BEGIN_MESSAGE_MAP(CControlDlg, CSkinDialog)
  22. ON_WM_QUERYDRAGICON()
  23. //}}AFX_MSG_MAP
  24. ON_WM_LBUTTONDOWN()
  25. ON_WM_SIZE()
  26. ON_MESSAGE(WM_ACTIVE_ITEM,OnActiveItem)
  27. END_MESSAGE_MAP()
  28. // CControlDlg 消息处理程序
  29. BOOL CControlDlg::OnInitDialog()
  30. {
  31. CSkinDialog::OnInitDialog();
  32. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  33. // 执行此操作
  34. SetIcon(m_hIcon, TRUE); // 设置大图标
  35. SetIcon(m_hIcon, FALSE); // 设置小图标
  36. m_ImageBack.LoadImage(AfxGetInstanceHandle(),TEXT("BACK_VIEW"));
  37. m_ImageLogo.LoadImage(AfxGetInstanceHandle(),TEXT("LOGO"));
  38. HDC hParentDC = GetBackDC();
  39. CRect rcControl(0,0,0,0);
  40. m_btClose.Create(NULL,WS_CHILD|WS_VISIBLE,rcControl,this,IDCANCEL);
  41. m_btClose.SetBackImage(TEXT("Res\\Button\\btn_close_normal.png"),TEXT("Res\\Button\\btn_close_highlight.png"),TEXT("Res\\Button\\btn_close_down.png"),TEXT("Res\\Button\\btn_close_normal.png"));
  42. m_btClose.SetButtonType(en_PushButton);
  43. m_btClose.SetParentBack(hParentDC);
  44. m_btClose.SetSize(39,20);
  45. m_btMinSize.Create(NULL,WS_CHILD|WS_VISIBLE,rcControl,this,IDCANCEL);
  46. m_btMinSize.SetBackImage(TEXT("Res\\Button\\btn_mini_normal.png"),TEXT("Res\\Button\\btn_mini_highlight.png"),TEXT("Res\\Button\\btn_mini_down.png"),TEXT("Res\\Button\\btn_mini_normal.png"));
  47. m_btMinSize.SetButtonType(en_PushButton);
  48. m_btMinSize.SetParentBack(hParentDC);
  49. m_btMinSize.SetSize(28,20);
  50. m_ListBoxEx.Create(WS_CHILD|WS_VISIBLE| LBS_OWNERDRAWVARIABLE|LBS_HASSTRINGS,rcControl,this,IDC_LISTBAR);
  51. m_ListBoxEx.SetItemHeight(26);
  52. m_ListBoxEx.AddString(TEXT("Button"));
  53. m_ListBoxEx.AddString(TEXT("Edit"));
  54. m_ListBoxEx.AddString(TEXT("Combo Box"));
  55. m_ListBoxEx.AddString(TEXT("List Box"));
  56. m_ListBoxEx.AddString(TEXT("Scroll Bar"));
  57. m_ListBoxEx.AddString(TEXT("Slider Control"));
  58. m_ListBoxEx.AddString(TEXT("Spin Control"));
  59. m_ListBoxEx.AddString(TEXT("Progress Control"));
  60. m_ListBoxEx.AddString(TEXT("Hot Key"));
  61. m_ListBoxEx.AddString(TEXT("List Control"));
  62. m_ListBoxEx.AddString(TEXT("Tree Control"));
  63. m_ListBoxEx.AddString(TEXT("Tab Control"));
  64. m_ListBoxEx.AddString(TEXT("Rich Edit"));
  65. m_ListBoxEx.AddString(TEXT("IP Address Control"));
  66. m_ListBoxEx.SetCurSel(0);
  67. //设置变量
  68. m_wActiveIndex=0xFF;
  69. //基本配置
  70. m_ArrayControl.push_back(&m_ButtonDlg);
  71. m_ArrayControl.push_back(&m_EditDlg);
  72. m_ArrayControl.push_back(&m_ComBoxDlg);
  73. m_ArrayControl.push_back(&m_ListBoxDlg);
  74. m_ArrayControl.push_back(&m_ScrollDlg);
  75. m_ArrayControl.push_back(&m_SliderDlg);
  76. //激活子项
  77. ActiveOptionItem(0);
  78. m_bIsInit = true;
  79. CRect rcClient;
  80. GetClientRect(&rcClient);
  81. RectifyControl(rcClient.Width(),rcClient.Height());
  82. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  83. }
  84. //当用户拖动最小化窗口时系统调用此函数取得光标
  85. //显示。
  86. HCURSOR CControlDlg::OnQueryDragIcon()
  87. {
  88. return static_cast<HCURSOR>(m_hIcon);
  89. }
  90. void CControlDlg::OnLButtonDown(UINT nFlags, CPoint point)
  91. {
  92. PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
  93. CSkinDialog::OnLButtonDown(nFlags, point);
  94. }
  95. void CControlDlg::OnSize(UINT nType, int cx, int cy)
  96. {
  97. CSkinDialog::OnSize(nType, cx, cy);
  98. if( !m_bIsInit ) return;
  99. RectifyControl(cx, cy);
  100. }
  101. void CControlDlg::RectifyControl( int cx, int cy )
  102. {
  103. //变量定义
  104. const UINT uFlags=SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS;
  105. //锁定屏幕
  106. LockWindowUpdate();
  107. //移动控件
  108. HDWP hDwp=BeginDeferWindowPos(32);
  109. CRect rcButton;
  110. m_btClose.GetWindowRect(&rcButton);
  111. DeferWindowPos(hDwp,m_btClose,NULL,cx-rcButton.Width(),0,0,0,uFlags|SWP_NOSIZE);
  112. DeferWindowPos(hDwp,m_btMinSize,NULL,cx-rcButton.Width()-28,0,0,0,uFlags|SWP_NOSIZE);
  113. DeferWindowPos(hDwp,m_ListBoxEx,NULL,1,80,130,cy-81,uFlags);
  114. EndDeferWindowPos(hDwp);
  115. //重画界面
  116. Invalidate(FALSE);
  117. UpdateWindow();
  118. //解除锁定
  119. UnlockWindowUpdate();
  120. }
  121. LRESULT CControlDlg::OnActiveItem( WPARAM wParam,LPARAM lParam )
  122. {
  123. int nItem = int(wParam);
  124. ActiveOptionItem(nItem);
  125. return 0L;
  126. }
  127. //激活配置
  128. bool CControlDlg::ActiveOptionItem( WORD wIndex )
  129. {
  130. //判断状态
  131. if (m_wActiveIndex==wIndex)
  132. {
  133. m_ArrayControl[m_wActiveIndex]->SetFocus();
  134. return true;
  135. }
  136. if ( wIndex+1 > m_ArrayControl.size() )
  137. {
  138. return true;
  139. }
  140. //保存旧项
  141. CDlgControlItem * pControlItem=NULL;
  142. if (m_wActiveIndex<m_ArrayControl.size()) pControlItem=m_ArrayControl[m_wActiveIndex];
  143. //创建新项
  144. m_wActiveIndex=wIndex;
  145. CRect rcClient,rcItemRect;
  146. GetWindowRect(&rcClient);
  147. rcItemRect.left = 131;
  148. rcItemRect.top = 80;
  149. rcItemRect.right = rcClient.Width()-1;
  150. rcItemRect.bottom = rcClient.Height()-1;
  151. CString strItemText;
  152. m_ListBoxEx.GetText(m_wActiveIndex,strItemText);
  153. m_ArrayControl[m_wActiveIndex]->ShowControlItem(rcItemRect,this,strItemText);
  154. //激活新项
  155. m_ArrayControl[m_wActiveIndex]->SetFocus();
  156. if (pControlItem!=NULL) pControlItem->ShowWindow(SW_HIDE);
  157. return true;
  158. }
  159. void CControlDlg::DrawClientArea( CDC*pDC,int nWidth,int nHeight )
  160. {
  161. m_ImageBack.Draw(pDC,0,0,nWidth,nHeight,2,86,4,4);
  162. m_ImageLogo.DrawImage(pDC,10,5,20,20);
  163. }