📄 listboxex.cpp
字号:
// ListBoxEx.cpp : implementation file
//
#include "stdafx.h"
#include "ListBoxEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CListBoxEx
CListBoxEx::CListBoxEx()
{
}
CListBoxEx::~CListBoxEx()
{
}
BEGIN_MESSAGE_MAP(CListBoxEx, CListBox)
//{{AFX_MSG_MAP(CListBoxEx)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CListBoxEx message handlers
long CListBoxEx::GetExtentForString(LPCTSTR lpszItem)
{
CDC* cdc = this->GetDC();
CFont* font = this->GetFont();
CFont* pOldFont;
if (font)
{
pOldFont = cdc->SelectObject(font);
TEXTMETRIC tm;
cdc->GetTextMetrics(&tm);
CSize size = cdc->GetTextExtent(lpszItem, lstrlen(lpszItem) );
size.cx += tm.tmAveCharWidth;
cdc->SelectObject(pOldFont);
this->ReleaseDC(cdc);
return (LONG) size.cx;
}
this->ReleaseDC(cdc);
return 0L;
}
long CListBoxEx::GetExtentForEntireControl()
{
CDC* cdc = this->GetDC();
CFont* font = this->GetFont();
CFont* pOldFont;
if (font)
{
pOldFont = cdc->SelectObject(font);
TEXTMETRIC tm;
cdc->GetTextMetrics(&tm);
CString sText;
LONG max_cx = 0;
/****----------------C H A N G E---REY--8/29/98----------****
**** for(int n = 0; n<=GetCount(); n++)
****----------------------------------------------------****/
for(int n = 0; n<GetCount(); n++)
/****--------------------END CHANGE----------------------****/
{
this->GetText(n, sText);
if (sText == "")
continue;
CSize size = cdc->GetTextExtent(sText, sText.GetLength());
size.cx += tm.tmAveCharWidth;
if(max_cx <= size.cx)
max_cx = size.cx;
}
cdc->SelectObject(pOldFont);
this->ReleaseDC(cdc);
return max_cx;
}
this->ReleaseDC(cdc);
return 0L;
}
int CListBoxEx::AddString(LPCTSTR sString)
{
long lStringExtent = GetExtentForString(sString);
if(GetHorizontalExtent() < lStringExtent)
SetHorizontalExtent(lStringExtent);
return CListBox::AddString(sString);
}
int CListBoxEx::DeleteString(UINT nIndex)
{
int nCountLeft = CListBox::DeleteString(nIndex);
if(nCountLeft == LB_ERR)
return LB_ERR;
long lMaxExtent = GetExtentForEntireControl();
SetHorizontalExtent(lMaxExtent);
return nCountLeft;
}
int CListBoxEx::InsertString(int nIndex, LPCTSTR lpszItem)
{
int nInsertPos = CListBox::InsertString(nIndex, lpszItem);
if(nInsertPos == LB_ERR)
return LB_ERR;
long lStringExtent = GetExtentForString(lpszItem);
if(GetHorizontalExtent() < lStringExtent)
SetHorizontalExtent(lStringExtent);
return nInsertPos;
}
void CListBoxEx::ResetContent()
{
SetHorizontalExtent(0);
CListBox::ResetContent();
return;
}
int CListBoxEx::Dir(UINT attr, LPCTSTR lpszWildCard)
{
int nReturn = CListBox::Dir( attr, lpszWildCard );
if(nReturn == LB_ERR || nReturn == LB_ERRSPACE)
return nReturn;
LONG lMaxExtent = GetExtentForEntireControl();
SetHorizontalExtent(lMaxExtent);
return nReturn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -