SkinControlsDlg.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:11k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // SkinControlsDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SkinControls.h"
  5. #include "SkinControlsDlg.h"
  6. #include "FiltersDialog.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define IDC_TOOLBAR 300
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CSkinControlsDlg dialog
  15. CSkinControlsDlg::CSkinControlsDlg(CWnd* pParent /*=NULL*/)
  16. : CDialog(CSkinControlsDlg::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(CSkinControlsDlg)
  19. m_nHorizAlign = 0;
  20. m_nVertAlign = 0;
  21. m_bEnabled = TRUE;
  22. m_nVisualTheme = 0;
  23. m_bRightButton = FALSE;
  24. m_nScrollPos = 0;
  25. m_bMultiLine = FALSE;
  26. //}}AFX_DATA_INIT
  27. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  28. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  29. TCHAR szStylesPath[_MAX_PATH];
  30. VERIFY(::GetModuleFileName(
  31. AfxGetApp()->m_hInstance, szStylesPath, _MAX_PATH));
  32. m_strStylesPath = szStylesPath;
  33. int nIndex  = m_strStylesPath.ReverseFind(_T('\'));
  34. if (nIndex > 0) {
  35. m_strStylesPath = m_strStylesPath.Left(nIndex);
  36. }
  37. else {
  38. m_strStylesPath.Empty();
  39. }
  40. m_strStylesPath += _T("\Styles\");
  41. //XTPSkinManager()->AddColorFilter(new CXTPSkinManagerColorFilterColorize(50, 100, 1));
  42. XTPSkinManager()->SetApplyOptions(XTPSkinManager()->GetApplyOptions() | xtpSkinApplyMetrics);
  43. XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Luna.cjstyles"), _T("NormalBlue.ini"));
  44. }
  45. void CSkinControlsDlg::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CDialog::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CSkinControlsDlg)
  49. DDX_Control(pDX, IDC_SLIDER_SAMPLE, m_wndSlider);
  50. DDX_Control(pDX, IDC_TAB_SAMPLE, m_wndTab);
  51. DDX_Control(pDX, IDC_PROGRESS_SAMPLE, m_wndProgress);
  52. DDX_Control(pDX, IDC_LISTCTRL_SAMPLE, m_wndListCtrl);
  53. DDX_Control(pDX, IDC_LIST_SAMPLE, m_wndListBox);
  54. DDX_Control(pDX, IDC_SCROLLBAR_HORZ_SAMPLE, m_wndScrollBar);
  55. DDX_Control(pDX, IDC_CHECK_SAMPLE, m_wndCheckBox);
  56. DDX_Control(pDX, IDC_RADIO_SAMPLE, m_wndRadio);
  57. DDX_Control(pDX, IDC_BUTTON_SAMPLE, m_wndButton);
  58. DDX_CBIndex(pDX, IDC_COMBO_HORIZONTAL, m_nHorizAlign);
  59. DDX_CBIndex(pDX, IDC_COMBO_VERTICAL, m_nVertAlign);
  60. DDX_Check(pDX, IDC_CHECK_ENABLED, m_bEnabled);
  61. DDX_Radio(pDX, IDC_RADIO_VISUALTHEME, m_nVisualTheme);
  62. DDX_Check(pDX, IDC_CHECK_RIGHTBUTTON, m_bRightButton);
  63. DDX_Text(pDX, IDC_EDIT_SCROLLPOS, m_nScrollPos);
  64. DDX_Check(pDX, IDC_CHECK_MULTILINE, m_bMultiLine);
  65. //}}AFX_DATA_MAP
  66. }
  67. BEGIN_MESSAGE_MAP(CSkinControlsDlg, CDialog)
  68. //{{AFX_MSG_MAP(CSkinControlsDlg)
  69. ON_WM_SYSCOMMAND()
  70. ON_WM_PAINT()
  71. ON_WM_QUERYDRAGICON()
  72. ON_CBN_SELCHANGE(IDC_COMBO_HORIZONTAL, OnSelChangeComboHorizontal)
  73. ON_CBN_SELCHANGE(IDC_COMBO_VERTICAL, OnSelChangeComboVertical)
  74. ON_BN_CLICKED(IDC_CHECK_ENABLED, OnCheckEnabled)
  75. ON_BN_CLICKED(IDC_RADIO_VISUALTHEME, OnRadioVisualTheme)
  76. ON_BN_CLICKED(IDC_CHECK_RIGHTBUTTON, OnCheckRightbutton)
  77. ON_WM_HSCROLL()
  78. ON_BN_CLICKED(IDC_RADIO_VISUALTHEME2, OnRadioVisualTheme)
  79. ON_BN_CLICKED(IDC_RADIO_VISUALTHEME3, OnRadioVisualTheme)
  80. ON_BN_CLICKED(IDC_RADIO_VISUALTHEME4, OnRadioVisualTheme)
  81. ON_BN_CLICKED(IDC_RADIO_VISUALTHEME5, OnRadioVisualTheme)
  82. ON_BN_CLICKED(IDC_CHECK_MULTILINE, OnCheckMultiline)
  83. ON_BN_CLICKED(ID_BUTTON_FILTERS, OnFilters)
  84. ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR, OnToolbarDropDown)
  85. //}}AFX_MSG_MAP
  86. END_MESSAGE_MAP()
  87. /////////////////////////////////////////////////////////////////////////////
  88. // CSkinControlsDlg message handlers
  89. BOOL CSkinControlsDlg::OnInitDialog()
  90. {
  91. CDialog::OnInitDialog();
  92. // Add "About..." menu item to system menu.
  93. // IDM_ABOUTBOX must be in the system command range.
  94. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  95. ASSERT(IDM_ABOUTBOX < 0xF000);
  96. CMenu* pSysMenu = GetSystemMenu(FALSE);
  97. if (pSysMenu != NULL)
  98. {
  99. CString strAboutMenu;
  100. strAboutMenu.LoadString(IDS_ABOUTBOX);
  101. if (!strAboutMenu.IsEmpty())
  102. {
  103. pSysMenu->AppendMenu(MF_SEPARATOR);
  104. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  105. }
  106. }
  107. // Set the icon for this dialog.  The framework does this automatically
  108. //  when the application's main window is not a dialog
  109. SetIcon(m_hIcon, TRUE); // Set big icon
  110. SetIcon(m_hIcon, FALSE); // Set small icon
  111. SCROLLINFO si;
  112. si.fMask = SIF_ALL;
  113. si.nPos = 0;
  114. //si.nPage = 20;
  115. //si.nMax = 100 + si.nPage - 1;
  116. si.nPage = 2;
  117. si.nMax = 10 + si.nPage - 1;
  118. si.nMin = 0;
  119. m_wndScrollBar.SetScrollInfo(&si);
  120. m_wndSlider.SetRange(0, 10);
  121. m_wndSlider.SetSelection(2, 5);
  122. int i;
  123. for (i = 0; i < 20; i++)
  124. {
  125. CString strItem;
  126. strItem.Format(_T("item %i"), i);
  127. m_wndListBox.AddString(strItem);
  128. }
  129. m_wndListCtrl.InsertColumn(0, _T("Items"), LVCFMT_LEFT, 100);
  130. for (i = 0; i < 20; i++) 
  131. {
  132. CString strItem;
  133. strItem.Format(_T("Item %i"), i);
  134. m_wndListCtrl.InsertItem(i, strItem);
  135. }
  136. m_wndProgress.SetPos(50);
  137. m_wndTab.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
  138. TCITEM item;
  139. item.mask = TCIF_TEXT;
  140. item.pszText = _T("Item &1");
  141. m_wndTab.InsertItem(0, &item);
  142. item.pszText = _T("Item &2");
  143. m_wndTab.InsertItem(1, &item);
  144. //////////////////////////////////////////////////////////////////////////
  145. m_ilToolbarTools.Create(16, 16, ILC_MASK|ILC_COLOR24, 0, 1);
  146. CBitmap bmp;
  147. bmp.LoadBitmap(IDB_BITMAP_TOOLBAR);
  148. m_ilToolbarTools.Add(&bmp, 0xC0C0C0);
  149. TBBUTTON nButtons[] = {{1, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1}, 
  150. {2, 12, TBSTATE_ENABLED, TBSTYLE_DROPDOWN}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, {3, 13, 0, TBSTYLE_BUTTON},
  151. {4, 14, 0, TBSTYLE_BUTTON}, {5, 15, 0, TBSTYLE_BUTTON}, {6, 16, TBSTATE_CHECKED | TBSTATE_ENABLED, TBSTYLE_BUTTON}};
  152. CXTPWindowRect rc(GetDlgItem(IDC_STATIC_TOOLBAR));
  153. ScreenToClient(&rc);
  154. GetDlgItem(IDC_STATIC_TOOLBAR)->ShowWindow(SW_HIDE);
  155. m_wndToolBar.Create(TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE | CBRS_TOOLTIPS | 
  156. CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NODIVIDER | CCS_NORESIZE, rc, this, IDC_TOOLBAR);
  157. m_wndToolBar.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
  158. m_wndToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)m_ilToolbarTools.GetSafeHandle());
  159. m_wndToolBar.AddButtons(7, nButtons);
  160. return TRUE;  // return TRUE  unless you set the focus to a control
  161. }
  162. void CSkinControlsDlg::OnSysCommand(UINT nID, LPARAM lParam)
  163. {
  164. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  165. {
  166. CAboutDlg dlgAbout;
  167. dlgAbout.DoModal();
  168. }
  169. else
  170. {
  171. CDialog::OnSysCommand(nID, lParam);
  172. }
  173. }
  174. // If you add a minimize button to your dialog, you will need the code below
  175. //  to draw the icon.  For MFC applications using the document/view model,
  176. //  this is automatically done for you by the framework.
  177. void CSkinControlsDlg::OnPaint() 
  178. {
  179. if (IsIconic())
  180. {
  181. CPaintDC dc(this); // device context for painting
  182. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  183. // Center icon in client rectangle
  184. int cxIcon = GetSystemMetrics(SM_CXICON);
  185. int cyIcon = GetSystemMetrics(SM_CYICON);
  186. CRect rect;
  187. GetClientRect(&rect);
  188. int x = (rect.Width() - cxIcon + 1) / 2;
  189. int y = (rect.Height() - cyIcon + 1) / 2;
  190. // Draw the icon
  191. dc.DrawIcon(x, y, m_hIcon);
  192. }
  193. else
  194. {
  195. CDialog::OnPaint();
  196. }
  197. }
  198. // The system calls this to obtain the cursor to display while the user drags
  199. //  the minimized window.
  200. HCURSOR CSkinControlsDlg::OnQueryDragIcon()
  201. {
  202. return (HCURSOR) m_hIcon;
  203. }
  204. void CSkinControlsDlg::ModifyButtonsStyle(DWORD dwRemove, DWORD dwAdd)
  205. {
  206. m_wndButton.ModifyStyle(dwRemove, dwAdd);
  207. m_wndButton.Invalidate(FALSE);
  208. m_wndRadio.ModifyStyle(dwRemove, dwAdd);
  209. m_wndRadio.Invalidate(FALSE);
  210. m_wndCheckBox.ModifyStyle(dwRemove, dwAdd);
  211. m_wndCheckBox.Invalidate(FALSE);
  212. }
  213. void CSkinControlsDlg::OnSelChangeComboHorizontal() 
  214. {
  215. UpdateData();
  216. ModifyButtonsStyle(BS_LEFT | BS_RIGHT | BS_CENTER, 
  217. m_nHorizAlign == 1 ? BS_LEFT : m_nHorizAlign == 2 ? BS_CENTER : m_nHorizAlign == 3 ? BS_RIGHT : 0);
  218. }
  219. void CSkinControlsDlg::OnSelChangeComboVertical() 
  220. {
  221. UpdateData();
  222. ModifyButtonsStyle(BS_TOP | BS_BOTTOM | BS_VCENTER, 
  223. m_nVertAlign == 1 ? BS_TOP : m_nVertAlign == 2 ? BS_VCENTER : m_nVertAlign == 3 ? BS_BOTTOM : 0);
  224. }
  225. void CSkinControlsDlg::OnCheckEnabled() 
  226. {
  227. UpdateData();
  228. m_wndButton.EnableWindow(m_bEnabled);
  229. m_wndRadio.EnableWindow(m_bEnabled);
  230. m_wndCheckBox.EnableWindow(m_bEnabled);
  231. }
  232. void CSkinControlsDlg::OnCheckRightbutton() 
  233. {
  234. UpdateData();
  235. m_wndRadio.ModifyStyle(BS_RIGHTBUTTON, m_bRightButton ? BS_RIGHTBUTTON : 0);
  236. m_wndRadio.Invalidate(FALSE);
  237. m_wndCheckBox.ModifyStyle(BS_RIGHTBUTTON,  m_bRightButton ? BS_RIGHTBUTTON : 0);
  238. m_wndCheckBox.Invalidate(FALSE);
  239. }
  240. void CSkinControlsDlg::OnRadioVisualTheme() 
  241. {
  242. UpdateData();
  243. switch (m_nVisualTheme)
  244. {
  245. case 0:
  246. XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Luna.cjstyles"));
  247. break;
  248. case 2:
  249. XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Royale.cjstyles"));
  250. break;
  251. case 3:
  252. XTPSkinManager()->LoadSkin(m_strStylesPath + _T("Office2007.cjstyles"));
  253. break;
  254. case 4:
  255. XTPSkinManager()->LoadSkin(m_strStylesPath + _T("Vista.cjstyles"));
  256. break;
  257. default:
  258. XTPSkinManager()->LoadSkin(_T(""), _T(""));
  259. break;
  260. }
  261. RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);
  262. }
  263. void CSkinControlsDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  264. {
  265. if (pScrollBar == &m_wndScrollBar)
  266. {
  267. SCROLLINFO si;
  268. m_wndScrollBar.GetScrollInfo(&si, SIF_ALL);
  269. int nCurPos = si.nPos;
  270. // decide what to do for each diffrent scroll event
  271. switch (nSBCode)
  272. {
  273. case SB_TOP: nCurPos = 0; break;
  274. case SB_BOTTOM: nCurPos = pScrollBar->GetScrollLimit(); break;
  275. case SB_LINEUP: nCurPos = max(nCurPos - 1, 0); break;
  276. case SB_LINEDOWN: nCurPos = min(nCurPos + 1, pScrollBar->GetScrollLimit()); break;
  277. case SB_PAGEUP: nCurPos = max(nCurPos - (int)si.nPage, 0); break;
  278. case SB_PAGEDOWN: nCurPos = min(nCurPos + (int)si.nPage, pScrollBar->GetScrollLimit()); break;
  279. case SB_THUMBTRACK:
  280. case SB_THUMBPOSITION:
  281. nCurPos = nPos;
  282. /* {
  283. SCROLLINFO si;
  284. ZeroMemory(&si, sizeof(SCROLLINFO));
  285. si.cbSize = sizeof(SCROLLINFO);
  286. si.fMask = SIF_TRACKPOS;
  287. if (!::GetScrollInfo(pScrollBar->GetSafeHwnd(), SB_CTL, &si))
  288. return;
  289. nCurPos = si.nTrackPos;
  290. }*/
  291. break;
  292. }
  293. pScrollBar->SetScrollPos(nCurPos);
  294. m_nScrollPos = nCurPos;
  295. UpdateData(FALSE);
  296. }
  297. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  298. }
  299. void CSkinControlsDlg::OnCheckMultiline() 
  300. {
  301. UpdateData();
  302. m_wndButton.SetWindowText(m_bMultiLine ? _T("Multilinen&Sample Button") : _T("&Sample Button"));
  303. m_wndButton.ModifyStyle(BS_MULTILINE, m_bMultiLine ? BS_MULTILINE : 0);
  304. m_wndButton.Invalidate(FALSE);
  305. }
  306. void CSkinControlsDlg::OnFilters()
  307. {
  308. CFiltersDialog fd;
  309. fd.DoModal();
  310. }
  311. void CSkinControlsDlg::OnToolbarDropDown(NMHDR* /*pNotifyStruct*/, LRESULT* /*result*/ )
  312. {
  313. RECT rc;
  314. m_wndToolBar.GetItemRect(1, &rc);
  315. m_wndToolBar.ClientToScreen(&rc);
  316. CMenu menu;
  317. menu.LoadMenu(IDR_MENU_POPUP);
  318. TrackPopupMenu(menu.GetSubMenu(0)->GetSafeHmenu(), 0, rc.left, rc.bottom, 0, m_hWnd, 0);
  319. }