ControlDlg.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. SetExtrude(true);
  37. m_ImageBack.LoadImage(AfxGetInstanceHandle(),TEXT("BACK_VIEW"));
  38. m_ImageLogo.LoadImage(AfxGetInstanceHandle(),TEXT("LOGO"));
  39. HDC hParentDC = GetBackDC();
  40. CRect rcControl(0,0,0,0);
  41. m_btClose.Create(NULL,WS_CHILD|WS_VISIBLE,rcControl,this,IDCANCEL);
  42. 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"));
  43. m_btClose.SetButtonType(en_PushButton);
  44. m_btClose.SetParentBack(hParentDC);
  45. m_btClose.SetSize(39,20);
  46. m_btMinSize.Create(NULL,WS_CHILD|WS_VISIBLE,rcControl,this,IDCANCEL);
  47. 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"));
  48. m_btMinSize.SetButtonType(en_PushButton);
  49. m_btMinSize.SetParentBack(hParentDC);
  50. m_btMinSize.SetSize(28,20);
  51. m_ListBoxEx.Create(WS_CHILD|WS_VISIBLE| LBS_OWNERDRAWVARIABLE|LBS_HASSTRINGS,rcControl,this,IDC_LISTBAR);
  52. m_ListBoxEx.SetItemHeight(26);
  53. m_ListBoxEx.AddString(TEXT("Button"));
  54. m_ListBoxEx.AddString(TEXT("Edit"));
  55. m_ListBoxEx.AddString(TEXT("Combo Box"));
  56. m_ListBoxEx.AddString(TEXT("List Box"));
  57. m_ListBoxEx.AddString(TEXT("Scroll Bar"));
  58. m_ListBoxEx.AddString(TEXT("Slider Control"));
  59. m_ListBoxEx.AddString(TEXT("Progress Control"));
  60. m_ListBoxEx.AddString(TEXT("List Control"));
  61. m_ListBoxEx.AddString(TEXT("Tree Control"));
  62. m_ListBoxEx.AddString(TEXT("Tab Control"));
  63. m_ListBoxEx.AddString(TEXT("Rich Edit"));
  64. m_ListBoxEx.AddString(TEXT("Menu"));
  65. m_ListBoxEx.AddString(TEXT("Hot Key"));
  66. m_ListBoxEx.AddString(TEXT("IP Address Control"));
  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. m_ArrayControl.push_back(&m_ProgressDlg);
  77. m_ArrayControl.push_back(&m_ListCtrlDlg);
  78. m_ArrayControl.push_back(&m_TreeCtrlDlg);
  79. m_ArrayControl.push_back(&m_TabCtrlDlg);
  80. m_ArrayControl.push_back(&m_RichEditDlg);
  81. m_ArrayControl.push_back(&m_MenuDlg);
  82. //激活子项
  83. ActiveOptionItem(m_ArrayControl.size()-1);
  84. m_ListBoxEx.SetCurSel(m_ArrayControl.size()-1);
  85. m_bIsInit = true;
  86. CRect rcClient;
  87. GetClientRect(&rcClient);
  88. RectifyControl(rcClient.Width(),rcClient.Height());
  89. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  90. }
  91. //当用户拖动最小化窗口时系统调用此函数取得光标
  92. //显示。
  93. HCURSOR CControlDlg::OnQueryDragIcon()
  94. {
  95. return static_cast<HCURSOR>(m_hIcon);
  96. }
  97. void CControlDlg::OnLButtonDown(UINT nFlags, CPoint point)
  98. {
  99. PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
  100. CSkinDialog::OnLButtonDown(nFlags, point);
  101. }
  102. void CControlDlg::OnSize(UINT nType, int cx, int cy)
  103. {
  104. CSkinDialog::OnSize(nType, cx, cy);
  105. if( !m_bIsInit ) return;
  106. RectifyControl(cx, cy);
  107. }
  108. void CControlDlg::RectifyControl( int cx, int cy )
  109. {
  110. //变量定义
  111. const UINT uFlags=SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS;
  112. //锁定屏幕
  113. LockWindowUpdate();
  114. //移动控件
  115. HDWP hDwp=BeginDeferWindowPos(32);
  116. CRect rcButton;
  117. m_btClose.GetWindowRect(&rcButton);
  118. DeferWindowPos(hDwp,m_btClose,NULL,cx-rcButton.Width(),0,0,0,uFlags|SWP_NOSIZE);
  119. DeferWindowPos(hDwp,m_btMinSize,NULL,cx-rcButton.Width()-28,0,0,0,uFlags|SWP_NOSIZE);
  120. DeferWindowPos(hDwp,m_ListBoxEx,NULL,1,85,130,cy-86,uFlags);
  121. if( m_ArrayControl[m_wActiveIndex] != NULL )
  122. {
  123. DeferWindowPos(hDwp,m_ArrayControl[m_wActiveIndex]->GetSafeHwnd(),NULL,131,85,cx-135,cy-86,uFlags);
  124. }
  125. EndDeferWindowPos(hDwp);
  126. //重画界面
  127. Invalidate(FALSE);
  128. UpdateWindow();
  129. //解除锁定
  130. UnlockWindowUpdate();
  131. }
  132. LRESULT CControlDlg::OnActiveItem( WPARAM wParam,LPARAM lParam )
  133. {
  134. int nItem = int(wParam);
  135. ActiveOptionItem(nItem);
  136. return 0L;
  137. }
  138. //激活配置
  139. bool CControlDlg::ActiveOptionItem( WORD wIndex )
  140. {
  141. //判断状态
  142. if (m_wActiveIndex==wIndex)
  143. {
  144. m_ArrayControl[m_wActiveIndex]->SetFocus();
  145. return true;
  146. }
  147. if ( wIndex+1 > m_ArrayControl.size() )
  148. {
  149. return true;
  150. }
  151. //保存旧项
  152. CDlgControlItem * pControlItem=NULL;
  153. if (m_wActiveIndex<m_ArrayControl.size()) pControlItem=m_ArrayControl[m_wActiveIndex];
  154. //创建新项
  155. m_wActiveIndex=wIndex;
  156. CRect rcClient,rcItemRect;
  157. GetWindowRect(&rcClient);
  158. rcItemRect.left = 131;
  159. rcItemRect.top = 85;
  160. rcItemRect.right = rcClient.Width()-1;
  161. rcItemRect.bottom = rcClient.Height()-1;
  162. CString strItemText;
  163. m_ListBoxEx.GetText(m_wActiveIndex,strItemText);
  164. m_ArrayControl[m_wActiveIndex]->ShowControlItem(rcItemRect,this,strItemText);
  165. //激活新项
  166. m_ArrayControl[m_wActiveIndex]->SetFocus();
  167. if (pControlItem!=NULL) pControlItem->ShowWindow(SW_HIDE);
  168. if ( wIndex == 7 )
  169. {
  170. SetWindowPos(NULL,0,0,1024,730,SWP_NOMOVE);
  171. CenterWindow();
  172. }
  173. else if ( wIndex == 8 )
  174. {
  175. SetWindowPos(NULL,0,0,850,450,SWP_NOMOVE);
  176. CenterWindow();
  177. }
  178. else if ( wIndex == 10 )
  179. {
  180. SetWindowPos(NULL,0,0,950,450,SWP_NOMOVE);
  181. CenterWindow();
  182. }
  183. else
  184. SetWindowPos(NULL,0,0,625,450,SWP_NOMOVE);
  185. return true;
  186. }
  187. void CControlDlg::DrawClientArea( CDC*pDC,int nWidth,int nHeight )
  188. {
  189. m_ImageBack.Draw(pDC,0,0,nWidth,nHeight,2,86,4,4);
  190. m_ImageLogo.DrawImage(pDC,10,5,20,20);
  191. }