读书人

怎样可以在CListCtrl只有16宽度的列中

发布时间: 2012-03-07 09:13:51 作者: rapoo

怎样可以在CListCtrl只有16宽度的列中,正确显示了两位数字如"99"
再这里我有个问题想请教,

怎样可以在CListCtrl只有16宽度的列中,正确显示了两位数字呢
也就是 InsertColumn(isub, "99 ", LVCFMT_LEFT, 16);

但我现在发现目前只能
InsertColumn(isub, "99 ", LVCFMT_LEFT, 24);
也就是24列宽才能全显示出 99


要是要自绘CListCtrl那么该怎样写~希望有代码

[解决办法]
设置字体的大小
http://dev.cbw.com/vc/interface/20057225003_4116363.shtml
http://www.codeproject.com/listctrl/xlistctrl.asp
[解决办法]
自绘呀,
人为的把那一列的字体设小,你怎么会有这个需求呀.
[解决办法]
在你的父窗口中响应WM_DRAWITEM消息,在响应函数
afx_msg void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct );

中重绘控件,应该是这样的
[解决办法]
http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=323
[解决办法]
看代码
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

int nItem=lpDrawItemStruct- >itemID;
if(nItem == -1)
return ;
CRect rcCol = lpDrawItemStruct- >rcItem;
CString sText;

CDC* pDC=CDC::FromHandle(lpDrawItemStruct- >hDC);
int nOldDCMode=pDC- >SaveDC();

LVITEM item;
item.iItem = nItem;
item.iSubItem = 0;
item.mask = LVIF_IMAGE ¦LVIF_STATE; //bu可选 //LVIF_IMAGE 可选
item.stateMask = 0XFFFF;
GetItem(&item);
BOOL bSelected = item.state&LVIS_SELECTED;

COLORREF color=::GetSysColor(COLOR_WINDOW);
if(bSelected )
{
pDC- >SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
pDC- >SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
color=::GetSysColor(COLOR_HIGHLIGHT);
}
else
{
pDC- >SetBkColor(color);
pDC- >SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
}


LV_COLUMN lvc;
lvc.mask=LVCF_FMT ¦LVCF_WIDTH;

rcCol.right = rcCol.left;
for(int nCol=0; GetColumn(nCol,&lvc); nCol++)
{

rcCol.left = rcCol.right;
rcCol.right = rcCol.left + GetColumnWidth(nCol);
HPEN hOldPen = (HPEN)::SelectObject(lpDrawItemStruct- >hDC, ::CreatePen(PS_SOLID, 1, RGB(0xc0,0xc0,0xc0)));
HBRUSH hOldBrush = (HBRUSH)::SelectObject(lpDrawItemStruct- >hDC, ::CreateSolidBrush(color));
::Rectangle(lpDrawItemStruct- >hDC, rcCol.left-1, rcCol.top-1, rcCol.right, rcCol.bottom);
::DeleteObject(SelectObject(lpDrawItemStruct- >hDC, hOldBrush));
::DeleteObject(SelectObject(lpDrawItemStruct- >hDC, hOldPen));

//sText=MakeShortString(pDC,GetItemText(nItem,nCol),rcCol.Width(),0);
sText=GetItemText(nItem,nCol);
pDC- >DrawText(sText, -1, CRect::CRect(rcCol.left+3,rcCol.top,rcCol.right,rcCol.bottom-2), DT_LEFT);

}
pDC- >RestoreDC(nOldDCMode);
}

读书人网 >VC/MFC

热点推荐