在CListCtrl中动态创建了组合框PreSubclass 函数中:
代码为:
m_boxNum.Create(WS_CHILD | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST ,CRect(100, 17, 200, 80),this,IDD_COMBOXNUM);
风格如上 现在有个小三角形,很丑陋,想去掉 当用户点击的时候,再出现下拉, 而不是有三角形
继承CComboBox类的思路,暂且不考虑 如果重载自绘CListCtrl类的 实现,请提供代码,谢谢。。
Owner rDraw Fixed 我已经勾选了 啊 //ListCtrl自绘调用
void CAccelList:: DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{ AfxMessageBox(_T("nihao")); CListCtrl::DrawItem(lpDrawItemStruct);}
// 下面是一个自绘 TreeCtrl 的代码,你可以参考一下。
void ChbTreeCtrl::OnCustomDraw (NMHDR* pNM, LRESULT * pResult)
{
LPNMCUSTOMDRAW pNMCD = (LPNMCUSTOMDRAW)pNM;
LONG lResult = 0; if (pNMCD->dwDrawStage == CDDS_PREPAINT)
{
/* 返回这个值告诉系统接着发后续的NM_CUSTOMDRAW消息。*/
lResult = CDRF_NOTIFYITEMDRAW;
} if (pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)
{
if (pNMCD->lItemlParam)
{
int iScrollPos = 0;
RECT * prc = &(pNMCD->rc);
HTREEITEM hItem = (HTREEITEM)pNMCD->dwItemSpec;
ITEMINFO * pII = (ITEMINFO*)GetItemData (hItem);
HDC hMemDC = CreateCompatibleDC (pNMCD->hdc);
int iHeight = GetItemHeight(); HBITMAP hBmp;
// 取得横向滚动条的位置
iScrollPos = GetScrollPos(SB_HORZ);
prc->left -= iScrollPos;
prc->right -= iScrollPos; // 绘制虚线
if (hItem == GetRootItem())
{
//根目录
}
else
{
// 横线 int x1, y1, x2, y2, i;
HTREEITEM hParent = GetParentItem (hItem);
ITEMINFO * pParent = (ITEMINFO*)GetItemData (hParent);
x1 = pParent->iIndent + 8 - iScrollPos;
y1 = prc->top + (iHeight/2) - 3;
x2 = (NULL == GetNextItem (hItem, TVGN_CHILD)) ? ( x1 + TREEITEM_INDENT + 16) : (x1 + TREEITEM_INDENT);
y2 = y1;
for (i=x1; i<x2; i++)
{
if (i % 2 == 0)
SetPixel(pNMCD->hdc, i, y1, 0xff0000);
}
} // 绘制扩展标志
prc->left += pII->iIndent;
prc->right += pII->iIndent;
if (HasChildren (hItem))
{
if (pII->bIsExpand)
{
SelectObject (hMemDC, m_hDec);
}
else
{
SelectObject (hMemDC, m_hAdd);
} BitBlt (pNMCD->hdc, prc->left, prc->top, 16, 16, hMemDC, 0, 0, SRCCOPY);
} // 绘制复选框。
prc->left += TREEITEM_CHECKBOX_OFFSET;
prc->right += TREEITEM_CHECKBOX_OFFSET;
switch (pII->iState)
{
case TREE_STATE_NORMAL:
hBmp = m_hBmpNormal;
break;
case TREE_STATE_SELECTED:
hBmp = m_hBmpSelected;
break;
case TREE_STATE_GRAY:
hBmp = m_hBmpGray;
break;
} SelectObject (hMemDC, hBmp);
BitBlt (pNMCD->hdc, prc->left, prc->top, prc->right, prc->bottom, hMemDC, 0, 0, SRCCOPY);
DeleteObject (hMemDC);
// 绘制图象
if (pII->hIcon)
{
prc->left+=TREEITEM_ICON_OFFSET;
prc->right += TREEITEM_ICON_OFFSET;
DrawIconEx (pNMCD->hdc, prc->left, prc->top, pII->hIcon, 16, 16, 0, NULL, DI_NORMAL);
} // 绘制条目文字。
prc->left += TREEITEM_TEXT_OFFSET;
prc->right += TREEITEM_TEXT_OFFSET;
CString strItem = GetItemText (hItem);
DrawText (pNMCD->hdc, strItem, strItem.GetLength(), prc, DT_VCENTER); lResult = CDRF_SKIPDEFAULT;
//delete prc; } } *pResult = lResult;
}