在CListCtrl中动态创建了组合框PreSubclass 函数中:
代码为:
m_boxNum.Create(WS_CHILD | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST ,CRect(100, 17, 200, 80),this,IDD_COMBOXNUM);
风格如上  现在有个小三角形,很丑陋,想去掉 当用户点击的时候,再出现下拉, 而不是有三角形
继承CComboBox类的思路,暂且不考虑  如果重载自绘CListCtrl类的 实现,请提供代码,谢谢。。

解决方案 »

  1.   

    还有一个问题:我的DrawItem函数没有被调用,什么情况?
    Owner rDraw Fixed 我已经勾选了 啊 //ListCtrl自绘调用
    void CAccelList:: DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {   AfxMessageBox(_T("nihao"));   CListCtrl::DrawItem(lpDrawItemStruct);}
      

  2.   

    问题1  如何去掉黑色三角形问题2: 为什么CListCtrl的派生类 CAccelList类 不会响应DrawItem ,我已经勾选了Owner Draw Fixed
      

  3.   

    如果不重绘,可以建立一个Buttom按钮,下拉框用ListBox实现,点击按钮隐藏或显示 ListBox就可以了。
      

  4.   


    // 下面是一个自绘 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;
    }
      

  5.   

    还有其他法子吗?比如设置风格设么的,或者在DrawItem函数里,解决