Professional UI Solutions
Site Map   /  Register
 
 

Forum

Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS General Discussion » Can't display listctrl's item in CExtContrlBar Collapse All
Subject Author Date
raymond wong Jan 11, 2005 - 2:40 AM

I’ve written a class derived from CListCtrl for my data’s display and embed to a CExtControlBar object.
Unfortunately,the header display right,but can’t display item rightly(all blanks).Later I embed a pure CListCtrl object to the CExtControlBar,everything is ok.Why?
Please help me!

Technical Support Jan 11, 2005 - 4:52 AM

There is not enough information in your message, so we cannot say what’s wrong with your app. Please give us more details or send us a test application that demonstrates the problem.

raymond wong Jan 11, 2005 - 6:03 PM

Well ,
---MainFrm.h---
...
CDetailListCtrl m_wndCtrlListDetail;
CExtControlBar m_wndDetailBar;
.....
----MainFrm.cpp---
if(!m_wndDetailBar.Create(_T("Detail"),this,ID_VIEW_DETAIL_BAR)) return -1;
if( !m_wndCtrlListDetail.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,CRect(0,0,0,0),&m_wndDetailBar,IDW_DETAIL_BAR)) return -1;
...
m_wndDetailBar.EnableDocking(CBRS_ALIGN_ANY);
...
Here is my CDetailListCtrl implement
#pragma once


// CDetailListCtrl
class CTestTask;
class CDetailListCtrl : public CListCtrl
{
    DECLARE_DYNAMIC(CDetailListCtrl)

public:
    CDetailListCtrl();
    virtual ~CDetailListCtrl();

protected:
    DECLARE_MESSAGE_MAP()
public:
    void ShowDetail(CTestTask* );
    virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
    void        InsertColumn(int nColumn, LPCTSTR pszCaption, int nFormat, int nWidth);
protected:
    BOOL LoadColumnState(void);
    void SaveColumnState(void);
protected:
    CImageList m_img;//Must provide an imagelist
public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnDestroy();
};

// DetailListCtrl.cpp : 实现文件
//

#include "stdafx.h"
#include "StbFunTest.h"
#include "DetailListCtrl.h"

// CDetailListCtrl
#define DETAIL_COLUMN_VALID        0
#define DETAIL_COLUMN_NAME        1
#define DETAIL_COLUMN_VALUE        2
#define DETAIL_COLUMN_NEXTWAIT     3

IMPLEMENT_DYNAMIC(CDetailListCtrl, CListCtrl)
CDetailListCtrl::CDetailListCtrl()
{
}

CDetailListCtrl::~CDetailListCtrl()
{
}


BEGIN_MESSAGE_MAP(CDetailListCtrl, CListCtrl)
    ON_WM_CREATE()
    ON_WM_CONTEXTMENU()
    ON_WM_SIZE()
    ON_WM_DESTROY()
    ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()



// CDetailListCtrl 消息处理程序


void CDetailListCtrl::ShowDetail(CTestTask* pTask)
{
    CWaitCursor wait;
    DeleteAllItems();
    if(pTask==NULL)
        return;
    CString csText;
    POSITION pos = pTask->m_lstTstDataSeq.GetHeadPosition();
    CTestData* pData=NULL;
    int nItem=0;
    while(pos)
    {
        pData = (CTestData*)pTask->m_lstTstDataSeq.GetNext(pos);
        ASSERT(pData!=NULL);
        InsertItem(nItem,_T(""),0);
        SetCheck(nItem,pData->m_bValid);
        SetItemText(nItem,DETAIL_COLUMN_NAME,pData->m_cstrKeyName);
        
        csText.Format(_T("%s"),pData->m_uintNextWait);
        SetItemText(nItem,DETAIL_COLUMN_NEXTWAIT,csText );
        
        SetItemData(nItem,(DWORD_PTR)pData);
        nItem++;
    }    
    Invalidate();
}

BOOL CDetailListCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
    return CListCtrl::Create(dwStyle|WS_HSCROLL|WS_VSCROLL, rect, pParentWnd, nID);
}

BOOL CDetailListCtrl::LoadColumnState(void)
{
    CString strOrdering, strWidths, strItem;
    
    strOrdering = theApp.GetProfileString( _T("ListStates"), _T("CDetailCtrl.Ordering"), _T("") );
    strWidths = theApp.GetProfileString( _T("ListStates"), _T("CDetailCtrl.Widths"), _T("") );
    
    HDITEM pItem = { HDI_WIDTH|HDI_ORDER };
    
    if ( _tcsncmp( strWidths, _T("0000"), 4 ) == 0 &&
         _tcsncmp( strOrdering, _T("00"), 2 ) == 0 )
    {
        strWidths = strWidths.Mid( 4 );
        strOrdering = strOrdering.Mid( 2 );
    }
    
    for ( int nColumns = 0 ; GetHeaderCtrl()->GetItem( nColumns, &pItem ) ; nColumns++ )
    {
        if ( strWidths.GetLength() < 4 || strOrdering.GetLength() < 2 ) return FALSE;
        
        _stscanf( strWidths.Left( 4 ), _T("%x"), &pItem.cxy );
        _stscanf( strOrdering.Left( 2 ), _T("%x"), &pItem.iOrder );
        
        strWidths = strWidths.Mid( 4 );
        strOrdering = strOrdering.Mid( 2 );
        
        GetHeaderCtrl()->SetItem( nColumns, &pItem );
    }
    
    return TRUE;
}

void CDetailListCtrl::SaveColumnState(void)
{
    HDITEM pItem = { HDI_WIDTH|HDI_ORDER };
    
    CString strOrdering, strWidths, strItem;
    
    for ( int nColumns = 0 ; GetHeaderCtrl()->GetItem( nColumns, &pItem ) ; nColumns++ )
    {
        GetHeaderCtrl()->GetItem( nColumns, &pItem );
        
        strItem.Format( _T("%.2x"), pItem.iOrder );
        strOrdering += strItem;
        
        strItem.Format( _T("%.4x"), pItem.cxy );
        strWidths += strItem;
    }
    
    theApp.WriteProfileString( _T("ListStates"), _T("CDetailCtrl.Ordering"), strOrdering );
    theApp.WriteProfileString( _T("ListStates"), _T("CDetailCtrl.Widths"), strWidths );
}

int CDetailListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CListCtrl::OnCreate(lpCreateStruct) == -1)
        return -1;

    SetExtendedStyle(GetExtendedStyle()|LVS_EX_CHECKBOXES|
        LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_GRIDLINES);
    //associate imagelist with listviewctrl,
    //this imagelist is only for the first column re: the tree column    
    if(!m_img.Create(IDB_DETAIL,16,1,RGB(0, 255, 255)))
        return -1;
    SetImageList(&m_img, LVSIL_SMALL);

        // TODO: 在此添加专用代码和/或调用基类
    InsertColumn(DETAIL_COLUMN_VALID,_T("valid?"),LVCFMT_CENTER,40);
    InsertColumn( DETAIL_COLUMN_NAME, _T("key"), LVCFMT_LEFT, 80 );
    InsertColumn( DETAIL_COLUMN_NEXTWAIT, _T("wait"), LVCFMT_CENTER, 80 );
    

    return 0;
}
void CDetailListCtrl::InsertColumn(int nColumn, LPCTSTR pszCaption, int nFormat, int nWidth)
{
    HDITEM pColumn;
    
    ZeroMemory( &pColumn, sizeof(pColumn) );
    
    pColumn.mask    = HDI_FORMAT | HDI_LPARAM | HDI_TEXT | HDI_WIDTH;
    pColumn.cxy        = nWidth;
    pColumn.pszText    = (LPTSTR)pszCaption;
    pColumn.fmt        = nFormat;
    pColumn.lParam    = nColumn;
    
    GetHeaderCtrl()->InsertItem( GetHeaderCtrl()->GetItemCount(), &pColumn );
}

void CDetailListCtrl::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
{
    gDefaultMsg(_T("DetailListCtrl ContextMenu"));
}

void CDetailListCtrl::OnSize(UINT nType, int cx, int cy)
{
    CListCtrl::OnSize(nType, cx, cy);
    Invalidate();
}

void CDetailListCtrl::OnDestroy()
{
    SaveColumnState();
    CListCtrl::OnDestroy();
}

Please help!!!

Sergiy Lavrynenko Jan 13, 2005 - 7:26 AM

Dear Raymond,


I guess the problem is somewhere outside the source code you published in the parent message. Could you send me the project with this source code and I will help you.


Best regards, Sergiy.