// PattDlg.cpp : implementation file // #include "stdafx.h" #include "demo.h" #include "PattDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPatternDlg dialog CPatternDlg::CPatternDlg(CWnd* pParent /*=NULL*/) : CDialog(CPatternDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPatternDlg) m_nPattern = 0; //}}AFX_DATA_INIT } void CPatternDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPatternDlg) DDX_CBIndex(pDX, IDC_PATTERN, m_nPattern); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPatternDlg, CDialog) //{{AFX_MSG_MAP(CPatternDlg) ON_BN_CLICKED(IDC_BACKCOLOR, OnBackcolor) ON_BN_CLICKED(IDC_FORECOLOR, OnForecolor) ON_WM_DRAWITEM() ON_CBN_SELCHANGE(IDC_PATTERN, OnSelchangePattern) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPatternDlg message handlers L_UINT CPatternDlg::FindStyle() { //given a style, get the index L_UINT uStyles[]= { EFX_PATTERN_SOLID, EFX_PATTERN_TRANSPARENT, EFX_PATTERN_HORZ_LINE, EFX_PATTERN_VERT_LINE, EFX_PATTERN_DOWNWARD_DIAG, EFX_PATTERN_UPWARD_DIAG, EFX_PATTERN_CROSS, EFX_PATTERN_DIAG_CROSS }; m_uStyle = uStyles[m_nPattern]; return m_uStyle; } int CPatternDlg::FindIndex() { //given an index, get the style L_UINT uStyles[]= { EFX_PATTERN_SOLID, EFX_PATTERN_TRANSPARENT, EFX_PATTERN_HORZ_LINE, EFX_PATTERN_VERT_LINE, EFX_PATTERN_DOWNWARD_DIAG, EFX_PATTERN_UPWARD_DIAG, EFX_PATTERN_CROSS, EFX_PATTERN_DIAG_CROSS }; for (L_UINT i=0; iInvalidate(); } void CPatternDlg::OnForecolor() { // TODO: Add your control notification handler code here if (GetColor(m_crFore)) GetDlgItem(IDC_FORECOLOR)->Invalidate(); } BOOL CPatternDlg::GetColor(COLORREF & crColor) { CHOOSECOLOR color; COLORREF CustomColors[16] = { RGB(0, 0, 0), RGB(128, 0, 0), RGB(0, 128, 0), RGB(128, 128, 0), RGB(0, 0, 128), RGB(128, 0, 128), RGB(0, 128, 128), RGB(128, 128, 128), RGB(192, 192, 192), RGB(255, 0, 0), RGB(0, 255, 0), RGB(255, 255, 0), RGB(0, 0, 255), RGB(255, 0, 255), RGB(0, 255, 255), RGB(255, 255, 255), }; memset(&color, 0, sizeof(CHOOSECOLOR)); color.lStructSize = sizeof(CHOOSECOLOR); color.hwndOwner = GetOwner()->m_hWnd; color.rgbResult = crColor; color.lpCustColors = CustomColors; color.Flags = CC_FULLOPEN | CC_RGBINIT; if( ChooseColor(&color) ) { crColor = color.rgbResult; return TRUE; } return FALSE; } void CPatternDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDS) { // TODO: Add your message handler code here and/or call default CBrush brush; LOGBRUSH logBrush; CDC * pDC = CDC::FromHandle(lpDS->hDC); logBrush.lbStyle = BS_SOLID; switch (nIDCtl) { case IDC_BACKCOLOR: { logBrush.lbColor = m_crBack; } break; case IDC_FORECOLOR: { logBrush.lbColor = m_crFore; } break; } brush.CreateBrushIndirect(&logBrush); CBrush * pBrushOld = pDC->SelectObject(&brush); pDC->Rectangle(&lpDS->rcItem); pDC->SelectObject(pBrushOld); CDialog::OnDrawItem(nIDCtl, lpDS); } void CPatternDlg::OnSelchangePattern() { // TODO: Add your control notification handler code here UpdateData(); FindStyle(); } BOOL CPatternDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here FindIndex(); CComboBox * pCombo = (CComboBox *) GetDlgItem(IDC_PATTERN); if (pCombo) pCombo->SetCurSel(m_nPattern); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }