⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comboboxex.cpp

📁 我上载了那么多怎么都说已经有上载的啦
💻 CPP
字号:
// ComboBoxEx.cpp : 僀儞僾儕儊儞僥乕僔儑儞 僼傽僀儖
//

#include "stdafx.h"
#include "ComboBoxEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CComboBoxEx2

CComboBoxEx2::CComboBoxEx2()
{
	m_addSpace = FALSE;
}

CComboBoxEx2::~CComboBoxEx2()
{
}


BEGIN_MESSAGE_MAP(CComboBoxEx2, CComboBox)
	//{{AFX_MSG_MAP(CComboBoxEx2)
	ON_WM_KEYDOWN()
	ON_CONTROL_REFLECT(CBN_DROPDOWN, OnDropdown)
	ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CComboBoxEx2 儊僢僙乕僕 僴儞僪儔

inline LPCSTR
AsnToKeyInput(const WORD wVKey)
{
	LPCSTR psz;
	switch (wVKey)
	{
	case (48):
	case (96):
		psz = "0";
		break;
	case (49):
	case (97):
		psz = "1";
		break;
	case (50):
	case (98):
		psz = "2";
		break;
	case (51):
	case (99):
		psz = "3";
		break;
	case (52):
	case (100):
		psz = "4";
		break;
	case (53):
	case (101):
		psz = "5";
		break;
	case (54):
	case (102):
		psz = "6";
		break;
	case (55):
	case (103):
		psz = "7";
		break;
	case (56):
	case (104):
		psz = "8";
		break;
	case (57):
	case (105):
		psz = "9";
		break;
	case (65):
		psz = "a";
		break;
	case (66):
		psz = "b";
		break;
	case (67):
		psz = "c";
		break;
	case (68):
		psz = "d";
		break;
	case (69):
		psz = "e";
		break;
	case (70):
		psz = "f";
		break;
	case (71):
		psz = "g";
		break;
	case (72):
		psz = "h";
		break;
	case (73):
		psz = "i";
		break;
	case (74):
		psz = "j";
		break;
	case (75):
		psz = "k";
		break;
	case (76):
		psz = "l";
		break;
	case (77):
		psz = "m";
		break;
	case (78):
		psz = "n";
		break;
	case (79):
		psz = "o";
		break;
	case (80):
		psz = "p";
		break;
	case (81):
		psz = "q";
		break;
	case (82):
		psz = "r";
		break;
	case (83):
		psz = "s";
		break;
	case (84):
		psz = "t";
		break;
	case (85):
		psz = "u";
		break;
	case (86):
		psz = "v";
		break;
	case (87):
		psz = "w";
		break;
	case (88):
		psz = "x";
		break;
	case (89):
		psz = "y";
		break;
	case (90):
		psz = "z";
		break;
	default:
		psz = " ";
	}
	return	psz;
}


void CComboBoxEx2::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// DELETE key傑偨偼Combo偵擖偭偰側偄Key擖椡偑偁傟偽Selection傪僋儕傾偡傞丅
	if ( (VK_HELP < nChar) && (VK_MULTIPLY > nChar) )
	{
		LPCSTR lpszString = AsnToKeyInput(nChar);
		if (CB_ERR == FindString(-1, lpszString))
			SetCurSel(-1);
	}
	else if ((VK_DELETE == nChar) || (VK_BACK == nChar))
		SetCurSel(-1);
	CComboBox::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CComboBoxEx2::OnDropdown() 
{
	if (!m_addSpace)	return;
	int cnt = GetCount();
	CString tmpString;
	GetLBText(cnt-1, tmpString);
	if ("" != tmpString)
		AddString("");
}

void CComboBoxEx2::OnSelchange() 
{
	if (!m_addSpace)	return;
	CString tmpString;
	GetWindowText(tmpString);
	if (tmpString == "")
		SetCurSel(-1);
}

void CComboBoxEx2::AdjustComboWidth(BOOL addSpace) 
{
	m_addSpace = addSpace;
	int width = 0;
	for(int nIndex = 0; nIndex<GetCount(); nIndex++)
	{
		CString strItem;
		GetLBText(nIndex, strItem);
		if (!strItem.IsEmpty())
		{
			// Calulate the ideal text length.
			CClientDC DC(this);
			CFont* pOldFont = DC.SelectObject(GetFont());
			CSize ItemSize = DC.GetTextExtent(strItem);
			DC.SelectObject(pOldFont);

			// Take the maximum of regular width and ideal width.
			const int cxEdgeSpace = 2;
			width = max(width, 
				ItemSize.cx + (cxEdgeSpace * 2));
		}
	}
	SetDroppedWidth(18+width);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -