亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multicolumnsortlistview.cpp

?? 數據結構鏈表的演示程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
	
	Usage:
		You generally should not use this class directly, though it
		is possible. You need to do two things to use it directly.
		Set m_strUniqueName to someting, and set m_strColumnWidthSection
		to where you want the column widths to be saved.

		The purpose of m_strUniqueName is to allow for saving of
		multiple instances of listview objects. So obviously you would
		need to set this differently for each instance. SetUniqueName must be called
		before calling InsertColumn() or LoadColumnWidths().

		If you are deriving from this class, you need to do the following:
		Add a class to your project derived from CListView, then go into the
		header file and include MultiColumnSortListView.h and change all
		references to CListView to CMultiColumnSortListView. Then in the .cpp
		file of your class, change all the message maps to CMultiColumnSortListView
		instead of CListView. That should do it.

  Compiling:
		One problem you will have is finding IDB_ARROWUP and IDB_ARROWDOWN.
		Those bitmaps will be included with this set of classes, You should
		add them to your project or add your own bitmaps named correctly.
		These are the bitmaps that show the sort order on the header control.

        I hope this is simple enough, kind of a pain to get started but after
		that it should be cake and hopefully it will be useful.
  
  Things to be aware of:
		
		Multithreading:
		     If you delete all the items from another thread
			 in the middle of a sort, it will crash. This is the only
			 bug i have found.
		
		Column Widths:
			 
			MINCOLWIDTH - Minimum width a column can be.
			MAXCOLWIDTH - Maximum width a column can be.
			These are hard coded in the header file. Be aware.
			
			MAXCOLUMNS  - The most columns you can have right
			now is 64, that is only because im use __int64 to
			hold the column sort states. Who needs more than
			64 columns anyway? If you do, you can change it to
			CUIntArray, i just didnt see the need for a whole int
			when all i needed was a bit. 
		        

  Credits:
		
		Iuri Apollonio -- Sorting Class ( great class )
		Zafir Anjum    -- CMultiColumnSortListView::GetColumnCount
		Roger Onslow   -- CMultiColumnSortListView::AutoSizeColumns
		Zafir Anjum    -- CSortableHeaderCtrl::SetSortImage
		Me             -- The Rest, I think.

*/
// MultiColumnSortListView.cpp : implementation file
//

#include "stdafx.h"
#include "MultiColumnSortListView.h"
#include "SortClass.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMultiColumnSortListView

IMPLEMENT_DYNCREATE(CMultiColumnSortListView, CListView)
/*
When deriving from this class you must set m_strUniqueName to something
this name is used to save each instances column widths to the registry
*/
CMultiColumnSortListView::CMultiColumnSortListView()
{	
//	m_strUniqueName.Empty();
	m_strUniqueName="結果顯示";
	m_strColumnWidthSection = "ColumnWidths";
	m_bSorting = false;
	m_lColumnSortStates = 0;
}

CMultiColumnSortListView::~CMultiColumnSortListView()
{
}


BEGIN_MESSAGE_MAP(CMultiColumnSortListView, CListView)
	//{{AFX_MSG_MAP(CMultiColumnSortListView)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
	ON_NOTIFY(HDN_ITEMCLICKA, 0, OnHeaderClicked) 
	ON_NOTIFY(HDN_ITEMCLICKW, 0, OnHeaderClicked)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMultiColumnSortListView drawing

void CMultiColumnSortListView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
}
/////////////////////////////////////////////////////////////////////////////
// CMultiColumnSortListView diagnostics
#ifdef _DEBUG
void CMultiColumnSortListView::AssertValid() const
{
	CListView::AssertValid();
}
void CMultiColumnSortListView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMultiColumnSortListView message handlers

/*
This function saves the columns widths of the listctrl to the registry.
This is called in two places, OnDestroy, and OnEndTrack in the headerCtrl class.
*/
void CMultiColumnSortListView::SaveColumnWidths()
{	//You must set a unique name for every listctrl
	ASSERT( m_strUniqueName.GetLength() );
	CString strEntry( m_strUniqueName );
	CString strValue;
	CListCtrl &rListCtrl = GetListCtrl();
	int iNumColumns = GetColumnCount();
	for( int i = 0; i < iNumColumns; i++ )
	{
		CString strTemp;
		strTemp.Format("%d,", rListCtrl.GetColumnWidth( i ) );
		strValue += strTemp;
	}
	AfxGetApp()->WriteProfileString( m_strColumnWidthSection, strEntry, strValue );
}

/*
This function loads all the column widths for each column that was saved and applies the width
to the column. This function should be called when you are done inserting data. Or you 
can call SetColumnWidth to set the column width right after you InsertColumn(), If you call 
my InsertColumn it will do this for you.
*/
int CMultiColumnSortListView::LoadColumnWidths()
{	//This function will load all the column widths and apply the widths to each respective column
	int iNumColumns = GetColumnCount();
	CListCtrl &rListCtrl = GetListCtrl();
	for( int i = 0; i < iNumColumns; i++ )
	{
		SetColumnWidth( i );
	}
	return 1;
}

/*
This function is the heart of the class. This will get called automatically
when you click a header, and if you press control while clicking the header,
a multi column sort will take place (ie: sorting the current columns within all the
previously control+clicked columns). The multi column sort saves all the previosuly
control+clicked columns in an array and sorts them in reverse order. So if you click 
column 0, 2, 3, 5 while holding control, it will sort 5, 3, 2, 0. ( this acheives a
muli-column sort).
*/
void CMultiColumnSortListView::SortColumn( int iSubItem, bool bSortingMultipleColumns )
{	
	CListCtrl &rListCtrl = GetListCtrl();
	int iNumCombinedSortedCols = GetNumCombinedSortedColumns();
	m_bSorting = true;

	if( bSortingMultipleColumns )
	{
		if( NotInCombinedSortedColumnList( iSubItem ) )
			m_aCombinedSortedColumns[ iNumCombinedSortedCols++ ] = iSubItem;
		else
			MoveItemInCombinedSortedListToEnd( iSubItem );

		for( int i = iNumCombinedSortedCols - 1; i >= 0 ; i-- )
		{
			SORT_STATE ssEachItem = GetItemSortState( m_aCombinedSortedColumns[i] );
			if( iNumCombinedSortedCols - 1 != i )
				ssEachItem = (SORT_STATE)!ssEachItem;
			
			CSortClass csc(&rListCtrl, m_aCombinedSortedColumns[i], IsColumnNumeric( m_aCombinedSortedColumns[i] ) , IsColumnFloat(m_aCombinedSortedColumns[i]));	
			csc.Sort( ssEachItem );
			if( i == iNumCombinedSortedCols - 1 )
			{	//Only swap the last column's sort order.
				m_ctlHeaderCtrl.SetSortImage( m_aCombinedSortedColumns[i], ssEachItem );
				SetItemSortState( m_aCombinedSortedColumns[i] , (SORT_STATE)!ssEachItem );			
			}
		}
	}
	else
	{
		m_ctlHeaderCtrl.RemoveAllSortImages();
		EmptyArray(m_aCombinedSortedColumns);
		m_aCombinedSortedColumns[ 0 ] = iSubItem;
		SORT_STATE ssEachItem = GetItemSortState( iSubItem );
		
		CSortClass csc(&rListCtrl, iSubItem, IsColumnNumeric( iSubItem ) ,IsColumnFloat(iSubItem));	
		csc.Sort( ssEachItem );
		m_ctlHeaderCtrl.SetSortImage( iSubItem, ssEachItem );
		SetItemSortState( iSubItem , (SORT_STATE)!ssEachItem );
	}
	m_bSorting = false;
}

/*
My version of InsertColumn that will automatically load the last column
width from the registry. 
*/
int CMultiColumnSortListView::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem)
{
	CListCtrl &rListCtrl = GetListCtrl();
	GetListCtrl().InsertColumn( nCol, lpszColumnHeading, nFormat, nWidth, nSubItem );
	SetColumnWidth( nCol );
	return 1;
}

/*
Utility function to size columns based on its data.
written by Roger Onslow
*/
void CMultiColumnSortListView::AutoSizeColumn( int iColumn )
{
	CListCtrl &rListCtrl = GetListCtrl();
	rListCtrl.SetRedraw(false);
	
	rListCtrl.SetColumnWidth(iColumn,LVSCW_AUTOSIZE);
	int wc1 = rListCtrl.GetColumnWidth( iColumn );
	rListCtrl.SetColumnWidth(iColumn,LVSCW_AUTOSIZE_USEHEADER);
	int wc2 = rListCtrl.GetColumnWidth( iColumn );
	int wc = max(MINCOLWIDTH,max( wc1,wc2 ));
	
	if( wc > MAXCOLWIDTH )
		wc = MAXCOLWIDTH;
	
	rListCtrl.SetColumnWidth( iColumn,wc );  
	rListCtrl.SetRedraw(true);
}

/*
Utility function to get rid of all the columns
*/
void CMultiColumnSortListView::DeleteAllColumns()
{
	CListCtrl &rListCtrl = GetListCtrl();
	int iNumCols = GetColumnCount();
	for ( int i = 0; i < iNumCols; i++ )
		rListCtrl.DeleteColumn(0);
}

/*
Utility function to get rid of all items.
*/
void CMultiColumnSortListView::DeleteAllItems()
{
	CListCtrl &rListCtrl = GetListCtrl();
	if( rListCtrl.GetItemCount() > 0 )
		rListCtrl.DeleteAllItems();
}

/*
Utility function to get the number of columns
written by Zafir Anjum
*/
UINT CMultiColumnSortListView::GetColumnCount()
{
	CHeaderCtrl *pHeaderCtrl = (CHeaderCtrl*)GetListCtrl().GetDlgItem(0);
	return pHeaderCtrl->GetItemCount();
}

/*
Just add some extended styles from the new IE4 stuff.
Of course you can either change the code or change your
derived class's OnCreate to call CListView::OnCreate
*/
int CMultiColumnSortListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道综合亚洲| 成人av在线网站| 亚洲综合成人在线视频| 国产精品婷婷午夜在线观看| 精品国产凹凸成av人网站| 欧美精品一区二区三区久久久| 在线电影国产精品| 欧美大片日本大片免费观看| 日韩精品专区在线影院重磅| 日韩精品中午字幕| 久久亚洲精精品中文字幕早川悠里| 26uuu亚洲| 亚洲欧洲av另类| 亚洲一区二区三区不卡国产欧美| 亚洲欧洲日本在线| 亚洲国产中文字幕在线视频综合| 日韩国产高清影视| 国产麻豆一精品一av一免费 | 国产91丝袜在线播放0| 国产福利一区二区| 99精品国产99久久久久久白柏| 日本道精品一区二区三区| 欧美日韩激情一区二区三区| 日韩一级免费观看| 国产精品五月天| 亚洲午夜免费电影| 加勒比av一区二区| 91网站在线观看视频| 7777精品伊人久久久大香线蕉的 | 精品在线播放午夜| 粉嫩13p一区二区三区| 91国偷自产一区二区使用方法| 欧美一区二区视频网站| 国产日韩成人精品| 亚洲成人777| 波多野洁衣一区| 制服丝袜亚洲精品中文字幕| 国产精品每日更新在线播放网址| 亚洲动漫第一页| 国产成人综合精品三级| 欧美日韩电影一区| 国产精品久久久久久久久快鸭| 天堂一区二区在线免费观看| 成人动漫视频在线| 日韩精品在线一区| 亚洲一区二区三区四区在线观看| 国产在线一区观看| 欧美日韩不卡在线| 亚洲免费观看高清完整| 国产一区欧美二区| 在线播放/欧美激情| ...xxx性欧美| 国产高清精品网站| 日韩一区二区影院| 五月婷婷欧美视频| 91久久线看在观草草青青 | 成人福利视频在线看| 日韩欧美国产成人一区二区| 一区二区三区日韩| 99久久婷婷国产精品综合| 国产日韩欧美电影| 国产精品一品二品| 精品欧美久久久| 免费精品视频最新在线| 欧美猛男男办公室激情| 亚洲国产一区二区三区青草影视| 波波电影院一区二区三区| 国产女同互慰高潮91漫画| 国产麻豆一精品一av一免费| 日韩女同互慰一区二区| 美国毛片一区二区| 欧美一区二区三区免费| 蜜桃久久久久久久| 日韩女优视频免费观看| 久久99精品久久久久久久久久久久| 欧美欧美欧美欧美首页| 午夜精品一区二区三区电影天堂| 欧美在线视频不卡| 亚洲一区二区av电影| 欧美性猛交xxxx黑人交| 亚洲国产另类av| 欧美日韩久久久一区| 偷拍与自拍一区| 欧美大片日本大片免费观看| 看片网站欧美日韩| 久久天天做天天爱综合色| 国产综合久久久久久久久久久久| 久久一区二区三区国产精品| 国产精品996| 亚洲欧美另类久久久精品 | 日本中文字幕一区| 日韩欧美国产三级| 国产白丝网站精品污在线入口| 最新久久zyz资源站| 欧美视频精品在线观看| 久久电影网站中文字幕| 国产精品美女久久久久久久| 欧洲精品中文字幕| 久久国产剧场电影| 最新日韩av在线| 69久久夜色精品国产69蝌蚪网| 狠狠色伊人亚洲综合成人| 中文字幕在线不卡国产视频| 欧美性xxxxxxxx| 国产一区二区在线看| 中文字幕一区二区三区av| 欧美日韩精品免费| 国产不卡一区视频| 亚洲mv在线观看| 欧美激情综合网| 欧美日韩激情一区二区| 国产99久久久久| 水野朝阳av一区二区三区| 欧美韩国日本不卡| 91精品国产色综合久久ai换脸 | 日韩电影在线观看一区| 国产亚洲女人久久久久毛片| 在线观看av一区| 国产福利一区在线观看| 日韩专区欧美专区| 亚洲视频资源在线| 久久久久高清精品| 欧美日韩国产色站一区二区三区| 久99久精品视频免费观看| 亚洲一区在线观看免费观看电影高清| wwwwxxxxx欧美| 欧美精品第1页| 色综合天天综合网天天狠天天| 韩国精品一区二区| 亚洲线精品一区二区三区八戒| 中文字幕欧美日本乱码一线二线 | 极品美女销魂一区二区三区| 亚洲精品视频一区| 国产精品嫩草影院com| 日韩一级黄色片| 欧美理论电影在线| 91免费国产在线| 成人av影视在线观看| 国产剧情在线观看一区二区| 久久精品国产亚洲aⅴ | 精品亚洲成a人| 日韩av在线免费观看不卡| 一区二区三区免费看视频| 国产精品久久久久久久蜜臀 | 成人高清视频在线| 国产宾馆实践打屁股91| 国产一区二区在线影院| 国产精品123| 国产精品自在欧美一区| 国产成人在线视频网站| 国产精品影视天天线| 国产福利一区二区三区| 国产精品69毛片高清亚洲| 国产盗摄精品一区二区三区在线 | 欧美视频在线播放| 在线观看欧美黄色| 精品污污网站免费看| 欧美日韩免费视频| 欧美一区二区三区四区高清| 91精品国产91久久综合桃花| 欧美一卡在线观看| 精品国产精品网麻豆系列| 精品福利二区三区| 中文字幕精品三区| 国产精品久久久久影院亚瑟 | 国产日韩欧美一区二区三区乱码| www成人在线观看| 日本一区二区视频在线| 日韩美女视频一区| 香蕉av福利精品导航| 久久99国产精品免费网站| 精品无人区卡一卡二卡三乱码免费卡| 国产精品一区二区果冻传媒| 成人国产在线观看| 99久久婷婷国产综合精品电影 | 久久不见久久见免费视频1| 国产精品久久久久影院亚瑟| 亚洲欧美在线视频观看| 最好看的中文字幕久久| 亚洲精品乱码久久久久久久久| 欧美成人精品1314www| 国产精品久久久久久久久晋中| 麻豆视频观看网址久久| 欧美狂野另类xxxxoooo| 亚洲色图制服诱惑| 成人h动漫精品| 国产欧美视频一区二区三区| 美女被吸乳得到大胸91| 777亚洲妇女| 日韩不卡一区二区| 欧美日本不卡视频| 亚洲国产美国国产综合一区二区| 北岛玲一区二区三区四区| 国产亚洲综合在线| 国产精品乡下勾搭老头1| 久久午夜电影网| 国产不卡在线视频| 国产精品亲子乱子伦xxxx裸| 福利电影一区二区| 国产精品美女久久久久av爽李琼 |