// SkinControlsDlg.cpp : implementation file // #include "stdafx.h" #include "SkinControls.h" #include "SkinControlsDlg.h" #include "FiltersDialog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IDC_TOOLBAR 300 ///////////////////////////////////////////////////////////////////////////// // CSkinControlsDlg dialog CSkinControlsDlg::CSkinControlsDlg(CWnd* pParent /*=NULL*/) : CDialog(CSkinControlsDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSkinControlsDlg) m_nHorizAlign = 0; m_nVertAlign = 0; m_bEnabled = TRUE; m_nVisualTheme = 0; m_bRightButton = FALSE; m_nScrollPos = 0; m_bMultiLine = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); TCHAR szStylesPath[_MAX_PATH]; VERIFY(::GetModuleFileName( AfxGetApp()->m_hInstance, szStylesPath, _MAX_PATH)); m_strStylesPath = szStylesPath; int nIndex = m_strStylesPath.ReverseFind(_T('\\')); if (nIndex > 0) { m_strStylesPath = m_strStylesPath.Left(nIndex); } else { m_strStylesPath.Empty(); } m_strStylesPath += _T("\\Styles\\"); //XTPSkinManager()->AddColorFilter(new CXTPSkinManagerColorFilterColorize(50, 100, 1)); XTPSkinManager()->SetApplyOptions(XTPSkinManager()->GetApplyOptions() | xtpSkinApplyMetrics); XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Luna.cjstyles"), _T("NormalBlue.ini")); } void CSkinControlsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSkinControlsDlg) DDX_Control(pDX, IDC_SLIDER_SAMPLE, m_wndSlider); DDX_Control(pDX, IDC_TAB_SAMPLE, m_wndTab); DDX_Control(pDX, IDC_PROGRESS_SAMPLE, m_wndProgress); DDX_Control(pDX, IDC_LISTCTRL_SAMPLE, m_wndListCtrl); DDX_Control(pDX, IDC_LIST_SAMPLE, m_wndListBox); DDX_Control(pDX, IDC_SCROLLBAR_HORZ_SAMPLE, m_wndScrollBar); DDX_Control(pDX, IDC_CHECK_SAMPLE, m_wndCheckBox); DDX_Control(pDX, IDC_RADIO_SAMPLE, m_wndRadio); DDX_Control(pDX, IDC_BUTTON_SAMPLE, m_wndButton); DDX_CBIndex(pDX, IDC_COMBO_HORIZONTAL, m_nHorizAlign); DDX_CBIndex(pDX, IDC_COMBO_VERTICAL, m_nVertAlign); DDX_Check(pDX, IDC_CHECK_ENABLED, m_bEnabled); DDX_Radio(pDX, IDC_RADIO_VISUALTHEME, m_nVisualTheme); DDX_Check(pDX, IDC_CHECK_RIGHTBUTTON, m_bRightButton); DDX_Text(pDX, IDC_EDIT_SCROLLPOS, m_nScrollPos); DDX_Check(pDX, IDC_CHECK_MULTILINE, m_bMultiLine); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSkinControlsDlg, CDialog) //{{AFX_MSG_MAP(CSkinControlsDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CBN_SELCHANGE(IDC_COMBO_HORIZONTAL, OnSelChangeComboHorizontal) ON_CBN_SELCHANGE(IDC_COMBO_VERTICAL, OnSelChangeComboVertical) ON_BN_CLICKED(IDC_CHECK_ENABLED, OnCheckEnabled) ON_BN_CLICKED(IDC_RADIO_VISUALTHEME, OnRadioVisualTheme) ON_BN_CLICKED(IDC_CHECK_RIGHTBUTTON, OnCheckRightbutton) ON_WM_HSCROLL() ON_BN_CLICKED(IDC_RADIO_VISUALTHEME2, OnRadioVisualTheme) ON_BN_CLICKED(IDC_RADIO_VISUALTHEME3, OnRadioVisualTheme) ON_BN_CLICKED(IDC_RADIO_VISUALTHEME4, OnRadioVisualTheme) ON_BN_CLICKED(IDC_RADIO_VISUALTHEME5, OnRadioVisualTheme) ON_BN_CLICKED(IDC_CHECK_MULTILINE, OnCheckMultiline) ON_BN_CLICKED(ID_BUTTON_FILTERS, OnFilters) ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR, OnToolbarDropDown) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSkinControlsDlg message handlers BOOL CSkinControlsDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon SCROLLINFO si; si.fMask = SIF_ALL; si.nPos = 0; //si.nPage = 20; //si.nMax = 100 + si.nPage - 1; si.nPage = 2; si.nMax = 10 + si.nPage - 1; si.nMin = 0; m_wndScrollBar.SetScrollInfo(&si); m_wndSlider.SetRange(0, 10); m_wndSlider.SetSelection(2, 5); int i; for (i = 0; i < 20; i++) { CString strItem; strItem.Format(_T("item %i"), i); m_wndListBox.AddString(strItem); } m_wndListCtrl.InsertColumn(0, _T("Items"), LVCFMT_LEFT, 100); for (i = 0; i < 20; i++) { CString strItem; strItem.Format(_T("Item %i"), i); m_wndListCtrl.InsertItem(i, strItem); } m_wndProgress.SetPos(50); m_wndTab.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); TCITEM item; item.mask = TCIF_TEXT; item.pszText = _T("Item &1"); m_wndTab.InsertItem(0, &item); item.pszText = _T("Item &2"); m_wndTab.InsertItem(1, &item); ////////////////////////////////////////////////////////////////////////// m_ilToolbarTools.Create(16, 16, ILC_MASK|ILC_COLOR24, 0, 1); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP_TOOLBAR); m_ilToolbarTools.Add(&bmp, 0xC0C0C0); TBBUTTON nButtons[] = {{1, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1}, {2, 12, TBSTATE_ENABLED, TBSTYLE_DROPDOWN}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, {3, 13, 0, TBSTYLE_BUTTON}, {4, 14, 0, TBSTYLE_BUTTON}, {5, 15, 0, TBSTYLE_BUTTON}, {6, 16, TBSTATE_CHECKED | TBSTATE_ENABLED, TBSTYLE_BUTTON}}; CXTPWindowRect rc(GetDlgItem(IDC_STATIC_TOOLBAR)); ScreenToClient(&rc); GetDlgItem(IDC_STATIC_TOOLBAR)->ShowWindow(SW_HIDE); m_wndToolBar.Create(TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE | CBRS_TOOLTIPS | CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NODIVIDER | CCS_NORESIZE, rc, this, IDC_TOOLBAR); m_wndToolBar.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); m_wndToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)m_ilToolbarTools.GetSafeHandle()); m_wndToolBar.AddButtons(7, nButtons); return TRUE; // return TRUE unless you set the focus to a control } void CSkinControlsDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CSkinControlsDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CSkinControlsDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CSkinControlsDlg::ModifyButtonsStyle(DWORD dwRemove, DWORD dwAdd) { m_wndButton.ModifyStyle(dwRemove, dwAdd); m_wndButton.Invalidate(FALSE); m_wndRadio.ModifyStyle(dwRemove, dwAdd); m_wndRadio.Invalidate(FALSE); m_wndCheckBox.ModifyStyle(dwRemove, dwAdd); m_wndCheckBox.Invalidate(FALSE); } void CSkinControlsDlg::OnSelChangeComboHorizontal() { UpdateData(); ModifyButtonsStyle(BS_LEFT | BS_RIGHT | BS_CENTER, m_nHorizAlign == 1 ? BS_LEFT : m_nHorizAlign == 2 ? BS_CENTER : m_nHorizAlign == 3 ? BS_RIGHT : 0); } void CSkinControlsDlg::OnSelChangeComboVertical() { UpdateData(); ModifyButtonsStyle(BS_TOP | BS_BOTTOM | BS_VCENTER, m_nVertAlign == 1 ? BS_TOP : m_nVertAlign == 2 ? BS_VCENTER : m_nVertAlign == 3 ? BS_BOTTOM : 0); } void CSkinControlsDlg::OnCheckEnabled() { UpdateData(); m_wndButton.EnableWindow(m_bEnabled); m_wndRadio.EnableWindow(m_bEnabled); m_wndCheckBox.EnableWindow(m_bEnabled); } void CSkinControlsDlg::OnCheckRightbutton() { UpdateData(); m_wndRadio.ModifyStyle(BS_RIGHTBUTTON, m_bRightButton ? BS_RIGHTBUTTON : 0); m_wndRadio.Invalidate(FALSE); m_wndCheckBox.ModifyStyle(BS_RIGHTBUTTON, m_bRightButton ? BS_RIGHTBUTTON : 0); m_wndCheckBox.Invalidate(FALSE); } void CSkinControlsDlg::OnRadioVisualTheme() { UpdateData(); switch (m_nVisualTheme) { case 0: XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Luna.cjstyles")); break; case 2: XTPSkinManager()->LoadSkin(m_strStylesPath + _T("WinXP.Royale.cjstyles")); break; case 3: XTPSkinManager()->LoadSkin(m_strStylesPath + _T("Office2007.cjstyles")); break; case 4: XTPSkinManager()->LoadSkin(m_strStylesPath + _T("Vista.cjstyles")); break; default: XTPSkinManager()->LoadSkin(_T(""), _T("")); break; } RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN); } void CSkinControlsDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if (pScrollBar == &m_wndScrollBar) { SCROLLINFO si; m_wndScrollBar.GetScrollInfo(&si, SIF_ALL); int nCurPos = si.nPos; // decide what to do for each diffrent scroll event switch (nSBCode) { case SB_TOP: nCurPos = 0; break; case SB_BOTTOM: nCurPos = pScrollBar->GetScrollLimit(); break; case SB_LINEUP: nCurPos = max(nCurPos - 1, 0); break; case SB_LINEDOWN: nCurPos = min(nCurPos + 1, pScrollBar->GetScrollLimit()); break; case SB_PAGEUP: nCurPos = max(nCurPos - (int)si.nPage, 0); break; case SB_PAGEDOWN: nCurPos = min(nCurPos + (int)si.nPage, pScrollBar->GetScrollLimit()); break; case SB_THUMBTRACK: case SB_THUMBPOSITION: nCurPos = nPos; /* { SCROLLINFO si; ZeroMemory(&si, sizeof(SCROLLINFO)); si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_TRACKPOS; if (!::GetScrollInfo(pScrollBar->GetSafeHwnd(), SB_CTL, &si)) return; nCurPos = si.nTrackPos; }*/ break; } pScrollBar->SetScrollPos(nCurPos); m_nScrollPos = nCurPos; UpdateData(FALSE); } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } void CSkinControlsDlg::OnCheckMultiline() { UpdateData(); m_wndButton.SetWindowText(m_bMultiLine ? _T("Multiline\n&Sample Button") : _T("&Sample Button")); m_wndButton.ModifyStyle(BS_MULTILINE, m_bMultiLine ? BS_MULTILINE : 0); m_wndButton.Invalidate(FALSE); } void CSkinControlsDlg::OnFilters() { CFiltersDialog fd; fd.DoModal(); } void CSkinControlsDlg::OnToolbarDropDown(NMHDR* /*pNotifyStruct*/, LRESULT* /*result*/ ) { RECT rc; m_wndToolBar.GetItemRect(1, &rc); m_wndToolBar.ClientToScreen(&rc); CMenu menu; menu.LoadMenu(IDR_MENU_POPUP); TrackPopupMenu(menu.GetSubMenu(0)->GetSafeHmenu(), 0, rc.left, rc.bottom, 0, m_hWnd, 0); }