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.
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.
|
|