📄 comboboxdlg.cpp
字号:
// ComboBoxDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Controls.h"
#include "ComboBoxDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CComboBoxDlg property page
IMPLEMENT_DYNCREATE(CComboBoxDlg, CPropertyPage)
CComboBoxDlg::CComboBoxDlg() : CPropertyPage(CComboBoxDlg::IDD)
{
//{{AFX_DATA_INIT(CComboBoxDlg)
m_nComboType = 0;
m_nComboExType = 1;
m_strComboSample = _T("");
m_bComboVScroll = FALSE;
m_bUseImageList = TRUE;
//}}AFX_DATA_INIT
m_psp.dwFlags &= ~PSP_HASHELP;
}
CComboBoxDlg::~CComboBoxDlg()
{
}
void CComboBoxDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CComboBoxDlg)
DDX_Control(pDX, IDC_COMBOEX_SAMPLE, m_ComboExSample);
DDX_Control(pDX, IDC_COMBO_SAMPLE, m_ComboSample);
DDX_Radio(pDX, IDC_COMBO_SIMPLE, m_nComboType);
DDX_Radio(pDX, IDC_COMBOEX_SIMPLE, m_nComboExType);
DDX_CBString(pDX, IDC_COMBO_SAMPLE, m_strComboSample);
DDX_Check(pDX, IDC_VSCROLLBOX, m_bComboVScroll);
DDX_Check(pDX, IDC_COMBOEX_USEIMAGELIST, m_bUseImageList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CComboBoxDlg, CPropertyPage)
//{{AFX_MSG_MAP(CComboBoxDlg)
ON_BN_CLICKED(IDC_COMBO_SIMPLE, OnComboSimple)
ON_BN_CLICKED(IDC_COMBO_DROPLIST, OnComboDroplist)
ON_BN_CLICKED(IDC_COMBO_DROPDOWN, OnComboDropdown)
ON_BN_CLICKED(IDC_COMBOEX_SIMPLE, OnComboexSimple)
ON_BN_CLICKED(IDC_COMBOEX_DROPLIST, OnComboexDroplist)
ON_BN_CLICKED(IDC_COMBOEX_DROPDOWN, OnComboexDropdown)
ON_CBN_EDITCHANGE(IDC_COMBO_SAMPLE, OnEditchangeComboSample)
ON_BN_CLICKED(IDC_VSCROLLBOX, OnComboVscrollbox)
ON_BN_CLICKED(IDC_COMBOEX_USEIMAGELIST, OnComboexUseimagelist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CComboBoxDlg message handlers
BOOL CComboBoxDlg::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_ComboSample.Dir (0, "*.*");
char szDir[_MAX_PATH];
memset (szDir, '\0', sizeof (szDir));
GetCurrentDirectory (_MAX_PATH, szDir);
CString strDir;
m_ComboExSample.SetPath (szDir);
CFont *font = GetFont ();
LOGFONT lf;
font->GetLogFont (&lf);
m_Font.CreateFontIndirect (&lf);
m_ComboSample.SetFont (&m_Font);
m_ComboSample.GetDroppedControlRect (m_rcDrop);
m_ComboSample.GetWindowRect (m_rcCombo);
ScreenToClient (m_rcCombo);
m_ComboExSample.GetWindowRect (m_rcComboEx);
ScreenToClient (m_rcComboEx);
m_rcComboEx.bottom += 4 * (m_rcComboEx.bottom - m_rcComboEx.top);
m_dwComboStyle = m_ComboSample.GetStyle ();
m_dwComboExStyle = m_ComboExSample.GetStyle ();
m_dwComboExStyleEx = m_ComboExSample.GetExStyle ();
m_ComboSample.SetCurSel (0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
// Combo Box Functions
void CComboBoxDlg::OnComboSimple()
{
UpdateData (TRUE);
m_dwComboStyle &= ~(CBS_DROPDOWN | CBS_DROPDOWNLIST);
m_dwComboStyle |= CBS_SIMPLE;
RecreateComboBox();
m_ComboSample.SetFocus ();
}
void CComboBoxDlg::OnComboDroplist()
{
UpdateData (TRUE);
m_dwComboStyle &= ~(CBS_DROPDOWN | CBS_SIMPLE);
m_dwComboStyle |= CBS_DROPDOWNLIST;
RecreateComboBox();
m_ComboSample.SetFocus ();
if (m_ComboSample.GetDroppedState ())
m_ComboSample.ShowDropDown (FALSE);
}
void CComboBoxDlg::OnComboDropdown()
{
UpdateData (TRUE);
m_dwComboStyle &= ~(CBS_DROPDOWNLIST | CBS_SIMPLE);
m_dwComboStyle |= CBS_DROPDOWN;
RecreateComboBox();
m_ComboSample.SetFocus ();
if (m_ComboSample.GetDroppedState ())
m_ComboSample.ShowDropDown (FALSE);
}
void CComboBoxDlg::RecreateComboBox()
{
int nSel = m_ComboSample.GetCurSel ();
int nCount = m_ComboSample.GetCount ();
COMBODATA *pData = new COMBODATA [nCount];
for (int n = 0; n < nCount; ++n)
{
m_ComboSample.GetLBText(n, pData[n].strData);
pData[n].dwData = m_ComboSample.GetItemData (n);
}
m_ComboSample.ResetContent();
m_ComboSample.DestroyWindow ();
m_ComboSample.Create (m_dwComboStyle, m_rcCombo, this, IDC_COMBO_SAMPLE);
for (n = 0; n < nCount; ++n)
{
int nIndex = m_ComboSample.AddString (pData[n].strData);
m_ComboSample.SetItemData (nIndex, pData[n].dwData);
}
delete [] pData;
m_ComboSample.SetFont (&m_Font);
m_ComboSample.SetCurSel (nSel);
}
void CComboBoxDlg::OnEditchangeComboSample()
{
CString strText;
m_ComboSample.GetWindowText (strText);
DWORD dwSel = m_ComboSample.GetEditSel();
int nStart = LOWORD (dwSel);
int nEnd = HIWORD (dwSel);
if (!m_ComboSample.GetDroppedState())
m_ComboSample.ShowDropDown (TRUE);
int nSel = m_ComboSample.GetCurSel ();
// int nLoc = m_ComboSample.FindString (nSel, (LPCSTR) strText);
int nLoc = m_ComboSample.SelectString (nSel, (LPCSTR) strText);
if (nLoc >= 0)
m_ComboSample.SetCurSel (nLoc);
m_ComboSample.SetEditSel (nStart, -1);
m_ComboSample.Invalidate();
}
void CComboBoxDlg::OnComboVscrollbox()
{
UpdateData (TRUE);
if (m_bComboVScroll)
m_dwComboStyle |= WS_VSCROLL;
else
m_dwComboStyle &= ~WS_VSCROLL;
RecreateComboBox ();
}
/////////////////////////////////////////////////////////////////////////////
// Extended Combo Box Functions
void CComboBoxDlg::RecreateComboExBox()
{
POSITION pos = m_ComboExSample.GetSelPosition();
m_ComboExSample.ResetContent();
m_ComboExSample.DestroyWindow ();
m_ComboExSample.Create (m_dwComboExStyle, m_rcComboEx, this, IDC_COMBOEX_SAMPLE);
m_ComboExSample.SetExtendedStyle (m_dwComboExStyleEx, m_dwComboExStyleEx);
m_ComboExSample.SetFont (&m_Font);
m_ComboExSample.UpdateDisplay (pos);
CControlsApp *app = (CControlsApp *) AfxGetApp();
m_ComboExSample.SetImageList (app->GetSystemImageList ());
}
void CComboBoxDlg::OnComboexSimple()
{
UpdateData (TRUE);
m_dwComboExStyle &= ~(CBS_DROPDOWN | CBS_DROPDOWNLIST);
m_dwComboExStyle |= CBS_SIMPLE;
RecreateComboExBox();
m_ComboExSample.Invalidate ();
}
void CComboBoxDlg::OnComboexDroplist()
{
UpdateData (TRUE);
m_dwComboExStyle &= ~(CBS_DROPDOWN | CBS_SIMPLE);
m_dwComboExStyle |= CBS_DROPDOWNLIST;
RecreateComboExBox();
}
void CComboBoxDlg::OnComboexDropdown()
{
Invalidate ();
UpdateData (TRUE);
m_dwComboExStyle &= ~(CBS_DROPDOWNLIST | CBS_SIMPLE);
m_dwComboExStyle |= CBS_DROPDOWN;
RecreateComboExBox();
if (m_ComboExSample.GetDroppedState ())
m_ComboExSample.ShowDropDown (FALSE);
}
void CComboBoxDlg::OnComboexUseimagelist()
{
UpdateData (TRUE);
if (m_bUseImageList)
m_dwComboExStyleEx &= ~(CBES_EX_NOEDITIMAGE | CBES_EX_NOEDITIMAGEINDENT);
else
m_dwComboExStyleEx |= CBES_EX_NOEDITIMAGE | CBES_EX_NOEDITIMAGEINDENT;
RecreateComboExBox();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -