?? tabview.cpp
字號:
// TabView.cpp : implementation file
//
#include "stdafx.h"
#include "TestLib.h"
#include "TabView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int _DEFCOLS[] =
{
0,2,4,5,6,3,1,8,7
};
/////////////////////////////////////////////////////////////////////////////
// CTabView
IMPLEMENT_DYNCREATE(CTabView, CFormView)
CTabView::CTabView()
: CFormView(CTabView::IDD)
{
//{{AFX_DATA_INIT(CTabView)
//}}AFX_DATA_INIT
lima.Create(IDB_ARANLIST, 16, 0, RGB(255,0,255));
limah.Create(IDB_ARANCOL, 11, 0, RGB(255,0,255));
ftTimes.CreatePointFont(90, "Times New Roman");
iSelBmp = -1;
}
CTabView::~CTabView()
{
}
void CTabView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTabView)
DDX_Control(pDX, IDC_LIST1, m_listCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTabView, CFormView)
//{{AFX_MSG_MAP(CTabView)
ON_WM_SIZE()
ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST1, OnGetdispinfoList1)
ON_COMMAND(ID_CUSTOMHEADER, OnCustomheader)
ON_COMMAND(ID_FORMATHEADER, OnFormatheader)
ON_COMMAND(ID_TESTCAT, OnTestcat)
ON_UPDATE_COMMAND_UI(ID_TESTCAT, OnUpdateTestcat)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
ON_COMMAND(ID_ADDANITEM, OnAddanitem)
ON_WM_DESTROY()
ON_COMMAND(ID_BLENDBMP, OnBlendbmp)
ON_UPDATE_COMMAND_UI(ID_BLENDBMP, OnUpdateBlendbmp)
ON_COMMAND(ID_TRYBITMAP1, OnTrybitmap1)
ON_UPDATE_COMMAND_UI(ID_TRYBITMAP1, OnUpdateTrybitmap1)
ON_COMMAND(ID_TRYBITMAP2, OnTrybitmap2)
ON_UPDATE_COMMAND_UI(ID_TRYBITMAP2, OnUpdateTrybitmap2)
ON_COMMAND(ID_DRAGGABLECOL, OnDraggablecol)
ON_UPDATE_COMMAND_UI(ID_DRAGGABLECOL, OnUpdateDraggablecol)
ON_COMMAND(ID_GRIDH, OnGridh)
ON_UPDATE_COMMAND_UI(ID_GRIDH, OnUpdateGridh)
ON_COMMAND(ID_GRIDV, OnGridv)
ON_UPDATE_COMMAND_UI(ID_GRIDV, OnUpdateGridv)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_TESTDAO, OnTestdao)
ON_UPDATE_COMMAND_UI(ID_TESTDAO, OnUpdateTestdao)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1)
ON_COMMAND(ID_AUTOPREVIEW, OnAutopreview)
ON_UPDATE_COMMAND_UI(ID_AUTOPREVIEW, OnUpdateAutopreview)
ON_MESSAGE(WM_LISTEX_NOTIFY, OnListExNotify)
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTabView diagnostics
BOOL CTabView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSuperGrid1View printing
BOOL CTabView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTabView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_listCtrl.SetPrintFlag(ptUseColor|ptUseFonts|ptListName|ptPageNumbers|ptPageDate);
m_listCtrl.SetPrintName("數據名稱");
m_listCtrl.SetMargins(15,10,10,10);
m_listCtrl.OnBeginPrinting(pDC, pInfo);
}
void CTabView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_listCtrl.OnEndPrinting(pDC, pInfo);
}
void CTabView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
m_listCtrl.OnPrint(pDC, pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CSuperGrid1View diagnostics
#ifdef _DEBUG
void CTabView::AssertValid() const
{
CFormView::AssertValid();
}
void CTabView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CTestLibDoc* CTabView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestLibDoc)));
return (CTestLibDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTabView message handlers
void CTabView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
CGfxColumnManager * pManager = m_listCtrl.CreateColumnManager();
pManager->DefineColumn(0, "", NULL, LVCFMT_LEFT, 0, fhNoSortArrow|fhNoResizeColumn);
pManager->DefineColumn(1, "列0");
pManager->DefineColumn(2, "列1", NULL, LVCFMT_CENTER, 120, fhEdit|fhNumeric|fhSortAble);
pManager->DefineColumn(3, "列2", NULL, LVCFMT_LEFT, 220, fhEdit|fhSortAble);
pManager->DefineColumn(7, "列3", NULL, LVCFMT_LEFT, 120, fhEdit|fhSortAble);
pManager->DefineColumn(4, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 0, "Image 1");
pManager->DefineColumn(5, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 1, "Image 2");
pManager->DefineColumn(6, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 2, "Image 3");
pManager->DefineColumn(8, "組合框", NULL, LVCFMT_LEFT, 120, fhComboBoxEx|fhSortAble);
pManager->DefineDefaultColumns(sizeof(_DEFCOLS)/sizeof(int), _DEFCOLS);
pManager->ReadFromProfile("TheMainList");
m_listCtrl.SetItemImageList(&lima);
m_listCtrl.SetHeaderImageList(&limah);
m_listCtrl.OnInit();
m_listCtrl.ModifyFlag(0,fHighRowSelect|fVertGrid|fHorizGrid|fAutoSort,0);
SetWindowPos(0,0,0,0,0,SWP_FRAMECHANGED);
m_listCtrl.SetupColumnData();
m_listCtrl.SetItemCount(200);
for (int t = 0; t < 200; t++)
m_listCtrl.InsertItemEx(t,t);
m_listCtrl.SetItemHeight(17);
m_listCtrl.SetCategoryCallback((void (CWnd::*)(CGfxCategoryManager * , long &))CategoryCallBack);
// m_listCtrl.SetGetTextCallback((void (CWnd::*)(int , int, long, CString &)) GetTextCallback);
m_listCtrl.SetExInfoCallback((long (CWnd::*)(LXHDREX *))GetExInfoCallback);
}
void CTabView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if (m_listCtrl.GetSafeHwnd()) m_listCtrl.SetWindowPos(0,2,2,cx-4,cy-4,SWP_NOZORDER);
SetScrollSizes(MM_TEXT, CSize(cx,cy));
}
void CTabView::OnGetdispinfoList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
*pResult = 0;
long index = pDispInfo->item.iItem;
long subItem = pDispInfo->item.iSubItem;
long objCode = pDispInfo->item.lParam;
if(pDispInfo->item.mask & LVIF_TEXT)
{
CString cs;
GetTextCallback(index, subItem, objCode, cs);
lstrcpyn(pDispInfo->item.pszText, cs, pDispInfo->item.cchTextMax);
*pResult = 1;
}
if(pDispInfo->item.mask & LVIF_IMAGE) pDispInfo->item.iImage = 0;//set image to first in list
}
void CTabView::CategoryCallBack(CGfxCategoryManager * pCatMan, long & lData)
{
long value = lData;
int iCat = pCatMan->FindCategory(value);
if (iCat < 0)
{
CString cs;
long val1 = value / 20;
val1 *= 20;
long val2 = val1 + 20;
cs.Format("%d - %d", val1, val2);
iCat = pCatMan->AddCategory(cs, val1, val2);
}
if (iCat >= 0)
{
pCatMan->AddItemToCategory(iCat, value);
}
if (lData > 310)
{
pCatMan->AddItemToCategory(0, value);
}
}
void CTabView::OnCustomheader()
{
m_listCtrl.OnGfxCustomizehead();
}
void CTabView::OnFormatheader()
{
m_listCtrl.OnGfxFormatheader();
}
void CTabView::OnListCmdUpdate(CCmdUI* pCmdUI)
{
pCmdUI->Enable(true);
}
void CTabView::OnTestcat()
{
if (m_listCtrl.GetCategoryManager()) m_listCtrl.EnableCategoryView(false);
else m_listCtrl.EnableCategoryView(true);
}
void CTabView::OnUpdateTestcat(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.GetCategoryManager() != NULL);
}
void CTabView::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
int i = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);
if (i < 0) return;
int idx = m_listCtrl.GetItemData(i);
CString cs;
cs.Format("Click on %d", idx);
AfxMessageBox(cs);
}
long CTabView::GetExInfoCallback(LXHDREX * pLx)
{
ASSERT(pLx);
switch(pLx->iNotifyCode)
{
case NTEX_ITEMINFO:
if (pLx->dwItemData < 25 || (pLx->dwItemData > 200 && pLx->dwItemData % 2 == 0))
pLx->dwFlag |= LXHDREX::exBold;
if (pLx->iSubItem == 7) pLx->dwFlag |= LXHDREX::exUnderline;
if (pLx->iSubItem == 2)
{
pLx->hfText = (HFONT) ftTimes.GetSafeHandle();
pLx->dwFlag |= LXHDREX::exHFont;
}
if (pLx->iSubItem == 3)
{
pLx->dwFlag |= LXHDREX::exTextColor;
pLx->crText = RGB(255,0,0);
}
if (pLx->iSubItem == 8)
{
pLx->dwFlag |= LXHDREX::exTextColor;
pLx->crText = RGB(255,0,128);
}
return 1;
break;
case NTEX_COMBOREQUEST:
{
pLx->pComboArray->Add(CString(""));
pLx->pComboArray->Add(pLx->csText);
pLx->pComboArray->Add(CString("Provincia"));
pLx->pComboArray->Add(CString("Anas"));
pLx->pComboArray->Add(CString("Comune"));
return 1;
}
break;
case NTEX_SETTEXT:
return 1;
case NTEX_AUTOPREVIEW:
{
if (pLx->dwItemData % 2 == 0) return 0;
LXHDREX_DIV * pLxEx = (LXHDREX_DIV *) pLx;
COLORREF ocr = pLxEx->pDC->SetTextColor(RGB(0,0,255));
CString cs;
cs.Format("測試項");
pLxEx->pDC->DrawText(cs, pLxEx->rcItem, DT_END_ELLIPSIS|DT_WORDBREAK);
pLxEx->pDC->SetTextColor(ocr);
return 0;
}
};
return 0L;
}
LRESULT CTabView::OnListExNotify(WPARAM wParam, LPARAM lParam)
{
TRACE0("OnListExNotify\n");
LXHDREX * pLx = (LXHDREX *) lParam;
ASSERT(pLx);
switch(pLx->iNotifyCode)
{
case NTEX_ITEMINFO:
if (pLx->dwItemData < 25 || (pLx->dwItemData > 200 && pLx->dwItemData % 2 == 0))
pLx->dwFlag |= LXHDREX::exBold;
if (pLx->iSubItem == 7) pLx->dwFlag |= LXHDREX::exUnderline;
if (pLx->iSubItem == 3)
{
pLx->dwFlag |= LXHDREX::exTextColor;
pLx->crText = RGB(255,0,0);
}
if (pLx->iSubItem == 2)
{
pLx->hfText = (HFONT) ftTimes.GetSafeHandle();
pLx->dwFlag |= LXHDREX::exHFont;
}
return 1;
break;
case NTEX_COMBOREQUEST:
{
pLx->pComboArray->Add(CString(""));
pLx->pComboArray->Add(pLx->csText);
pLx->pComboArray->Add(CString("Provincia"));
pLx->pComboArray->Add(CString("Anas"));
pLx->pComboArray->Add(CString("Comune"));
return 1;
}
break;
case NTEX_SETTEXT:
m_listCtrl.SetItemText(pLx->iItem, pLx->iSubItem, pLx->csText);
return 1;
};
return 0L;
}
void CTabView::OnAddanitem()
{
static int inewitem = 317;
m_listCtrl.InsertItemEx(m_listCtrl.GetItemCount(), inewitem++);
}
void CTabView::OnDestroy()
{
if (m_listCtrl.GetCategoryManager()) m_listCtrl.EnableCategoryView(false);
CGfxColumnManager * pManager = m_listCtrl.GetColumnManager();
pManager->RetrieveColumnData(&m_listCtrl);
pManager->WriteToProfile("TheMainList");
CFormView::OnDestroy();
}
void CTabView::OnBlendbmp()
{
m_listCtrl.SetBlendBitmap(!m_listCtrl.bBlendBitmap);
m_listCtrl.Invalidate();
}
void CTabView::OnUpdateBlendbmp(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.bBlendBitmap);
pCmdUI->Enable(iSelBmp >= 0);
}
void CTabView::OnTrybitmap1()
{
if (iSelBmp == 0)
{
m_listCtrl.SetBkImage(-1);
iSelBmp = -1;
}
else
{
m_listCtrl.SetBkImage(IDB_BITMAP1);
iSelBmp = 0;
}
m_listCtrl.Invalidate();
}
void CTabView::OnUpdateTrybitmap1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(iSelBmp == 0);
}
void CTabView::OnTrybitmap2()
{
if (iSelBmp == 1)
{
m_listCtrl.SetBkImage(-1);
iSelBmp = -1;
}
else
{
m_listCtrl.SetBkImage(IDB_BITMAP2);
iSelBmp = 1;
}
m_listCtrl.Invalidate();
}
void CTabView::OnUpdateTrybitmap2(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(iSelBmp == 1);
}
void CTabView::OnDraggablecol()
{
m_listCtrl.EnableColumnDrag(!m_listCtrl.IsColumnDragEnabled());
}
void CTabView::OnUpdateDraggablecol(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.IsColumnDragEnabled());
}
void CTabView::OnGridh()
{
if (m_listCtrl.GetFlag() & fHorizGrid) m_listCtrl.ModifyFlag(fHorizGrid, 0, 0);
else m_listCtrl.ModifyFlag(0, fHorizGrid, 0);
Invalidate();
}
void CTabView::OnUpdateGridh(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.GetFlag() & fHorizGrid ? 1 : 0);
}
void CTabView::OnGridv()
{
if (m_listCtrl.GetFlag() & fVertGrid) m_listCtrl.ModifyFlag(fVertGrid, 0, 0);
else m_listCtrl.ModifyFlag(0, fVertGrid, 0);
Invalidate();
}
void CTabView::OnUpdateGridv(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.GetFlag() & fVertGrid ? 1 : 0);
}
void CTabView::OnEditCopy()
{
m_listCtrl.DoCopyInClipboard(m_listCtrl.GetSelectedCount() > 0 ? true : false);
}
void CTabView::OnTestdao()
{
// see the other demo at codeguru for dao sample, here i putted instead a dialog demo
// CTestDialog dlg;
// dlg.DoModal();
}
void CTabView::OnUpdateTestdao(CCmdUI* pCmdUI)
{
}
void CTabView::GetTextCallback(int iIndex, int iSubItem, long lCode, CString &cs)
{
cs = "";
int rc = m_listCtrl.GetColumnIndex(iSubItem);
if (rc == 4) cs = "1";
else if (rc == 5) cs = "2";
else if (rc == 6) cs = "3";
else if (rc == 2) cs.Format("%d", lCode);
else if (rc == 3) cs.Format("第%d項", lCode);
else cs.Format("%d, %d", lCode, rc);
}
void CTabView::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CTabView::OnAutopreview()
{
int oah = m_listCtrl.GetAutoPreviewHeight();
if (oah <= 0) m_listCtrl.SetAutoPreviewHeight(30);
else m_listCtrl.SetAutoPreviewHeight(0);
}
void CTabView::OnUpdateAutopreview(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_listCtrl.GetAutoPreviewHeight());
pCmdUI->Enable(m_listCtrl.GetCategoryManager() == NULL);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -