|
本帖最后由 cjwchenhui 于 2018-12-13 18:40 编辑
CListCtrlEx关联CListCtrl控件变量:IDC_LIS : m_lst;
General页:设置visible,Tab stop;
Styles页:设置Report
More Styles页:设置Own draw fixed
CSilDlg.h文件:
#pragma once
#if !defined(AFX_SILDLG_H__DF3BE44D_678D_4A04_95E6_A40993CD6BBA__INCLUDED_)
#define AFX_SILDLG_H__DF3BE44D_678D_4A04_95E6_A40993CD6BBA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ComboEx.h"
#include "ButtonEx.h"
#include "ListCtrlEx.h"
/////////////////////////////////////////////////////////////////////////////
// CSilDlg dialog
class CSilDlg : public CDialog
{
// Construction
struct SData
{UINT row;
CString number;
CString name;
CString country;
};
public:
CSilDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CSilDlg)
enum { IDD = IDD_SIL_DIALOG };
CEdit m_num;
CEdit m_nam;
CListCtrlEx m_lst;
CButtonEx m_mod;
CButtonEx m_del;
CButtonEx m_add;
CComboEx m_comb;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSilDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
public:
HICON m_hIcon;
struct SData* pData;
protected:
// Generated message map functions
//{{AFX_MSG(CSilDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnAdd();
afx_msg void OnMod();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg UINT OnNcHitTest(CPoint point);
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
afx_msg void OnDestroy();
afx_msg void OnClose();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SILDLG_H__DF3BE44D_678D_4A04_95E6_A40993CD6BBA__INCLUDED_)
CSilDlg.cpp文件:
#include "stdafx.h"
#include "sil.h"
#include "silDlg.h"
#include "HeaderEx.h"
#include "ComboEx.h"
#include "ListCtrlEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSilDlg dialog
extern CImageList* m_hList;
CSilDlg::CSilDlg(CWnd* pParent)
: CDialog(CSilDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSilDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSilDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSilDlg)
DDX_Control(pDX, IDC_NUMB, m_num);
DDX_Control(pDX, IDC_NAME, m_nam);
DDX_Control(pDX, IDC_LIS, m_lst);
DDX_Control(pDX, IDC_MOD, m_mod);
DDX_Control(pDX, IDC_DEL, m_del);
DDX_Control(pDX, IDC_ADD, m_add);
DDX_Control(pDX, IDC_NATION, m_comb);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSilDlg, CDialog)
//{{AFX_MSG_MAP(CSilDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_MOD, OnMod)
ON_WM_CTLCOLOR()
ON_WM_NCHITTEST()
ON_WM_SHOWWINDOW()
ON_WM_DESTROY()
ON_WM_CLOSE()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSilDlg message handlers
extern CHeaderCtrl* pHeader;
BOOL CSilDlg::OnInitDialog()
{
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE);
// Set small ico
// TODO: Add extra initialization here
((CButtonEx*)GetDlgItem(IDC_ADD))->SetIcon(IDI_ADD);
((CButtonEx*)GetDlgItem(IDC_MOD))->SetIcon(IDI_MOD);
((CButtonEx*)GetDlgItem(IDC_DEL))->SetIcon(IDI_DEL);
((CComboEx*)GetDlgItem(IDC_NATION))->AddItem("韩国",0);
((CComboEx*)GetDlgItem(IDC_NATION))->AddItem("日本",1);
((CComboEx*)GetDlgItem(IDC_NATION))->AddItem("美国",2);
((CComboEx*)GetDlgItem(IDC_NATION))->AddItem("加拿大",3);
((CComboEx*)GetDlgItem(IDC_NATION))->AddItem("英国",4);
((CComboEx*)GetDlgItem(IDC_NATION))->SetCurSel(0);
((CComboEx*)GetDlgItem(IDC_NATION))->ModifyStyle(0, LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|LVS_OWNERDRAWFIXED);
((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetExtendedStyle (LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES );
int cishu=0;
((CListCtrlEx*)GetDlgItem(IDC_LIS))->InsertColumn(0,"序号",LVCFMT_CENTER,100);
((CListCtrlEx*)GetDlgItem(IDC_LIS))->InsertColumn(1, "姓名", LVCFMT_CENTER, 100);
((CListCtrlEx*)GetDlgItem(IDC_LIS))->InsertColumn(2, "国籍", LVCFMT_CENTER, 100);
//CHeaderEx* pHeader=(CHeaderEx*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetHeaderCtrl());
ModifyStyle(0,WS_SYSMENU|WS_MINIMIZEBOX);
CDialog::OnInitDialog();
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSilDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSilDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSilDlg::OnAdd()
{
CString str,strn,strc;
int imagindex;
GetDlgItemText(IDC_NUMB,str);
GetDlgItemText(IDC_NAME,strn);
((CComboEx*)GetDlgItem(IDC_NATION))->GetWindowText(strc);
imagindex=((CComboEx*)GetDlgItem(IDC_NATION))->GetCurSel();
//CString nb,nm,cot;
//((CEdit*)GetDlgItem(IDC_NUMB))->GetWindowText(nb);
//((CEdit*)GetDlgItem(IDC_NAME))->GetWindowText(nm);
//((CComboEx*)GetDlgItem(IDC_NATION))->GetWindowText(cot);
int II=((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetItemCount();
int jj=0;
CRect rect;
GetDlgItem(IDC_LIS)->GetWindowRect(&rect);
DRAWITEMSTRUCT btnds;
if(II==0)
{ while(jj<3)
{
((CListCtrlEx*)GetDlgItem(IDC_LIS))->InsertItem(jj,NULL);
}
}
//II=((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetItemCount();
((CListCtrlEx*)GetDlgItem(IDC_LIS))->InsertItem(II,str);
((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetItemText(II,1,strn);
((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetItemText(II,2,strc);
SData* pData=new SData;
pData->row=II;
pData->number=str;
pData->name=strn;
pData->country=strc;
((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetItemData(II,(DWORD)pData);
btnds.CtlID = IDC_LIS;
btnds.CtlType = ODT_LISTBOX;
btnds.hDC = GetDC()->GetSafeHdc();
btnds.hwndItem = GetDlgItem(IDC_LIS)->GetSafeHwnd();
btnds.itemAction = ODS_DEFAULT;
btnds.itemData = (DWORD)pData;
btnds.itemID = IDC_LIS;
btnds.itemState = ODS_DEFAULT;
btnds.rcItem = rect;
::SendMessage(m_hWnd,WM_DRAWITEM,IDC_LIS,(LPARAM)&btnds);
// TODO: Add your control notification handler code here
//((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetSafeHwnd()
}
void CSilDlg::OnMod()
{ int count=((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetSelectedCount();
// TODO: Add your control notification handler code here
if(!count)
{
AfxMessageBox("请选中一条记录再修改!");
return;
}
int i=((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetSelectionMark();
CString str1,str2,str3;
GetDlgItemText(IDC_NAME,str2);
GetDlgItemText(IDC_NUMB,str1);
//((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetItemText(i,1,str);
((CComboEx*)GetDlgItem(IDC_NATION))->GetWindowText(str3);
//LVITEM li={LVIF_TEXT,i,2};
//li.pszText=(LPSTR)(LPCSTR)str;
//((CListCtrlEx*)GetDlgItem(IDC_LIS))->SetItem(&li);
//li.iImage=m_comb.GetCurSel();
//li.iImage=m_comb.GetCurSel();
//li.mask=LVIF_IMAGE;
//li.iSubItem=0;
//((CListCtrlEx*)GetDlgItem(IDC_LIS))->SendChildNotifyLastMsg();
CRect rect;
GetDlgItem(IDC_LIS)->GetWindowRect(&rect);
DRAWITEMSTRUCT btnds;
btnds.CtlID = IDC_LIS;
btnds.CtlType = ODT_LISTBOX;
btnds.hDC = GetDC()->GetSafeHdc();
btnds.hwndItem = GetDlgItem(IDC_LIS)->GetSafeHwnd();
btnds.itemAction = ODA_FOCUS;
btnds.itemData = (DWORD)pData;
btnds.itemID = IDC_LIS;
btnds.itemState = ODS_DEFAULT;
btnds.rcItem = rect;
::SendMessage(m_hWnd,WM_DRAWITEM,IDC_LIS,(LPARAM)&btnds);
}
HBRUSH CSilDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) //chenhu
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_STATI1)
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,255,0));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
else
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,255,0));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
UINT CSilDlg::OnNcHitTest(CPoint point) //CHENHU
{
// TODO: Add your message handler code here and/or call default
UINT nRet=CDialog::OnNcHitTest(point);
if(HTCLIENT==nRet)
{
ScreenToClient(&point);
if(point.y<25)
return HTCAPTION;
}
return nRet;
}
void CSilDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
}
void CSilDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
void CSilDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
//AfxMessageBox("删除m_iList");
//AfxMessageBox("程序退出");
CDialog::OnClose();
}
BOOL CSilDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
CBitmap m_pBmp;
BITMAP bm;
CDC dcMem;
m_pBmp.LoadBitmap(IDB_BITMAP1);
m_pBmp.GetBitmap(&bm);//得到位图尺寸
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);
pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return TRUE;
return CDialog::OnEraseBkgnd(pDC);
}
ListCtrlEx.h文件
#if !defined(AFX_LISTCTRLEX_H__2FF3B4C8_A37F_4549_8FB2_0B3E5557CCF9__INCLUDED_)
#define AFX_LISTCTRLEX_H__2FF3B4C8_A37F_4549_8FB2_0B3E5557CCF9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ListCtrlEx.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CListCtrlEx window
int CALLBACK byNumb(LPARAM lParam1,LPARAM lParam2,LPARAM lParam);
int CALLBACK byName(LPARAM lParam1,LPARAM lParam2,LPARAM lParam);
int CALLBACK byNationS(LPARAM lParam1,LPARAM lParam2,LPARAM lParam);
class CSilDlg;
class CListCtrlEx : public CListCtrl
{
// Construction
public:
CListCtrlEx();
void SetSort(int nCol)
{
m_nSort=nCol;
}
// Attributes
public:
int m_nSort; //chenhu
CImageList* m_hList;
CImageList* m_iList;;
//static int m_Border;
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CListCtrlEx)
//}}AFX_VIRTUAL
// Implementation
public:
void DrawBack(CDC* pDC,CRect& rc,LPDRAWITEMSTRUCT lpDIS);
void DrawImage(CDC* pDC,CRect& rc,int nItem);
virtual ~CListCtrlEx();
// Generated message map functions
protected:
//{{AFX_MSG(CListCtrlEx)
afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult);
virtual void DrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS);
virtual void MeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMIS);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnInsertitem(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_LISTCTRLEX_H__2FF3B4C8_A37F_4549_8FB2_0B3E5557CCF9__INCLUDED_)
ListCtrlEx.cpp文件:
#include "stdafx.h"
#include "sil.h"
#include "ListCtrlEx.h"
#include "HeaderEx.h"
#include "SilDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CListCtrlEx
extern struct SData
{UINT row;
CString number;
CString name;
CString country;
};
CListCtrlEx::CListCtrlEx() //chenhu
{ m_nSort=-1;
//CBitmap b1,b2;
//b1.LoadBitmap(IDB_ASC);
//b2.LoadBitmap(IDB_DES);
//m_hList = new CImageList();
//m_hList->Create(16,16,ILC_COLOR16|ILC_MASK,6,6);
//m_hList->Add(&b1,RGB(255,255,255));
// m_hList->Add(&b2,RGB(255,255,255));
}
CListCtrlEx::~CListCtrlEx()
{
if(m_hList!=NULL)
{
delete m_hList;
m_hList=NULL;
//AfxMessageBox("删除m_hList");
}
}
BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
//{{AFX_MSG_MAP(CListCtrlEx)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
ON_WM_DRAWITEM_REFLECT()
ON_WM_MEASUREITEM_REFLECT()
ON_WM_ERASEBKGND()
ON_WM_SETFOCUS()
ON_NOTIFY_REFLECT(LVN_INSERTITEM, OnInsertitem)
ON_WM_PAINT()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CListCtrlEx message handlers
void CListCtrlEx::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) //chenhu
{
NM_LISTVIEW* p= (NM_LISTVIEW*)pNMHDR;
int nCol=p->iSubItem;
//HDITEM hi={HDI_IMAGE|HDI_FORMAT};
CHeaderEx* pHeader=(CHeaderEx*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetHeaderCtrl());
static int i=0;
if(nCol>-1)
{
//pHeader->GetItem(nCol,&hi);
// hi.fmt=HDF_IMAGE;
// hi.iImage=i;
// i=!i;
// pHeader->GetItem(nCol,&hi);
// hi.fmt&=~HDF_IMAGE;
// pHeader->SetItem(nCol,&hi);
// pHeader->GetItem(nCol,&hi);
}
int j=0,nCount=GetItemCount();
while(j<nCount)
{
SetItemData(j,j);
++j;
}
//SetSort(nCol);
switch(nCol)
{case 0:
((CListCtrl*)GetDlgItem(IDC_LIS))->SortItems((PFNLVCOMPARE)byNumb,(DWORD)this);
break;
case 1:
((CListCtrl*)GetDlgItem(IDC_LIS))->SortItems((PFNLVCOMPARE)byName,(DWORD)this);
break;
case 2:
((CListCtrl*)GetDlgItem(IDC_LIS))->SortItems((PFNLVCOMPARE)byNationS,(DWORD)this);
break;
}
//pHeader->SetItem(nCol,&hi);
// TODO: Add your control notification handler code here
*pResult = 0;
}
int CALLBACK byNumb(LPARAM lParam1,LPARAM lParam2,LPARAM lParam)
{
CListCtrlEx* pTh=(CListCtrlEx*)lParam;
// if(pTh)AfxMessageBox("yes1");
int n1=atoi(pTh->GetItemText((int)lParam1,0));
int n2=atoi(pTh->GetItemText((int)lParam2,0));
if(true)return n1>n2;
else return n1<n2;
}
int CALLBACK byName(LPARAM lParam1,LPARAM lParam2,LPARAM lParam)
{
CListCtrlEx* pTh=(CListCtrlEx*)lParam;
//int num=(int)lParam;
CString str1=pTh->GetItemText((int)lParam1,1);
CString str2=pTh->GetItemText((int)lParam2,1);
if(true)return str1>str2;
else return str1<str2;
}
int CALLBACK byNationS(LPARAM lParam1,LPARAM lParam2,LPARAM lParam)
{
CListCtrlEx* pTh=(CListCtrlEx*)lParam;
// int num=(int)lParam;
CString str1=pTh->GetItemText((int)lParam1,2);
CString str2=pTh->GetItemText((int)lParam2,2);
if(true)return str1>str2;
else return str1<str2;
}
void CListCtrlEx::DrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS) //chenhu
{
// TODO: Add your message handler code here and/or call default
CDC dc;
dc.Attach(lpDIS->hDC);
static CRect rect(lpDIS->rcItem);
int nItem=lpDIS->itemID;
int i=0;
SData* pTemp=(SData*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetItemData(lpDIS->itemData));
CHeaderEx* pHeader=(CHeaderEx*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetHeaderCtrl());
int nCount=pHeader->GetItemCount();
//pData = (SData*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetItemData(lpDIS->itemData));
// TODO: Add your control notification handler code here
while(i<nCount)
{
CRect rc;
CString str;
pHeader->GetItemRect(i,rc);
rc.top=rect.top;
rc.bottom=rect.bottom;
//// DrawImage(&dc,rc,i);
rc.left+=18;
DrawBack(&dc,rc,lpDIS);
rc.left+=2;
CString s1,s2,s3;
if(lpDIS->itemData)
{
//s1=pTemp->number;
//s2=pTemp->name;
//s3=pTemp->country;
//str=GetItemText(nItem,i);
switch(nCount)
{case 0:
str=s1;
break;
case 1:
str=s2;
break;
case 2:
str=s3;
break;
}
rc.top+=rc.Height();
rc.bottom+=rc.Height();
if(str)
dc.DrawText(str,rc,DT_VCENTER|DT_SINGLELINE);
}
++i;
}
if(lpDIS->itemState&ODS_FOCUS)
dc.DrawFocusRect(rect);
DrawItem(nItem, lpDIS);
dc.Detach();
}
void CListCtrlEx::DrawImage(CDC *pDC, CRect &rc, int nItem)
{
LVITEM lvi={LVIF_IMAGE};
GetItem(&lvi);
CImageList* pImageList=GetImageList(LVSIL_SMALL);
pImageList->Draw(pDC,nItem,CPoint(rc.top,rc.left),ILD_TRANSPARENT);
}
void CListCtrlEx::DrawBack(CDC *pDC, CRect &rc, LPDRAWITEMSTRUCT lpDIS) //chenhu
{
int nItem=lpDIS->itemID;
if(ODS_SELECTED&lpDIS->itemState)
{
pDC->FillSolidRect(rc,GetSysColor(COLOR_HIGHLIGHT));
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
}
else
{if(nItem%2)
{
pDC->FillSolidRect(rc,RGB(165,203,247));
pDC->SetTextColor(RGB(200,0,217));
}
else
{
pDC->FillSolidRect(rc,RGB(105,100,247));
pDC->SetTextColor(RGB(0,200,217));
}
}
}
void CListCtrlEx::MeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMIS)
{
// TODO: Add your message handler code here and/or call default
if(lpMIS->itemData>-1)
{lpMIS->itemHeight=20;
lpMIS->itemWidth=320;
}
else
{lpMIS->itemHeight=0;
lpMIS->itemWidth=320;
}
CListCtrl::OnMeasureItem(nIDCtl, lpMIS);
}
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//CRect rclh;
//CHeaderEx* pHeader=(CHeaderEx*)(((CListCtrlEx*)GetDlgItem(IDC_LIS))->GetHeaderCtrl());
//pHeader->GetWindowRect(&rclh);
//CBrush br(RGB(0,255,0));
//CDC* dn=GetDC();
//dn->SelectObject(&br);
//dn->FillRect(&rclh,&br);
return CListCtrl::OnEraseBkgnd(pDC);
}
void CListCtrlEx::OnSetFocus(CWnd* pOldWnd)
{
CListCtrl::OnSetFocus(pOldWnd);
// TODO: Add your message handler code here
}
void CListCtrlEx::OnInsertitem(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
UpdateData(false);
*pResult = 0;
}
void CListCtrlEx::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int i=0;
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
BOOL CSilApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
int nResult;
CSilDlg dlg;
if(nResult=dlg.DoModal())
{
}
return FALSE;
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
}
|
|