www.pudn.com > clking_src.rar > GuiListEdit.cpp
//-----------------------------------------------------------------------// // This is a part of the GuiLib MFC Extention. // // Autor : Francisco Campos // // (C) 2002 Francisco CamposAll rights reserved // // This code is provided "as is", with absolutely no warranty expressed // // or implied. Any use is at your own risk. // // You must obtain the author's consent before you can include this code // // in a software library. // // If the source code in this file is used in any application // // then acknowledgement must be made to the author of this program // // fcampos@tutopia.com // //-----------------------------------------------------------------------// #include "stdafx.h" #include "GuiLib.h" #include "resource.h" #include "GuiListEdit.h" #define LST_DELETE 555 #define LST_INSERT 556 #define LST_UP 557 #define LST_DOWN 558 #define LST_LIST 559 #define DROPBUTTON 560 // CGuiListEdit IMPLEMENT_DYNAMIC(CGuiListEdit, CStatic) CGuiListEdit::CGuiListEdit() { m_border=STYLEFRAME; m_clrface=GuiDrawLayer::GetRGBColorFace(); } CGuiListEdit::~CGuiListEdit() { } BEGIN_MESSAGE_MAP(CGuiListEdit, CStatic) ON_COMMAND(LST_DELETE,Delete) ON_COMMAND(LST_INSERT,Insert) ON_COMMAND(LST_UP,Up) ON_COMMAND(LST_DOWN,Down) ON_WM_PAINT() ON_WM_CREATE() ON_WM_SIZE() ON_NOTIFY(LVN_ENDLABELEDIT, LST_LIST, OnEndlabeleditList) ON_NOTIFY(NM_DBLCLK, LST_LIST, OnClickList) END_MESSAGE_MAP() // CGuiListEdit message handlers void CGuiListEdit::Delete() { //solo nos interesa el seleccionado actualmente int nItem=m_list->GetNextItem(-1,LVNI_SELECTED); m_list->DeleteItem(nItem); } CString CGuiListEdit::GetText(int nItem) { if (nItem < 0) return _T(""); if (nItem > m_list->GetItemCount()) return _T(""); CString m_szA=m_list->GetItemText(nItem,0); return m_szA; } int CGuiListEdit::GetNumItem() { return m_list->GetItemCount(); } void CGuiListEdit::AddItem(CString m_szCad) { int nItem=m_list->GetItemCount(); nItem=m_list->InsertItem(nItem,m_szCad); m_list->SetItemData (nItem, 0); } void CGuiListEdit::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) { int nActual=m_list->GetNextItem(-1,LVNI_SELECTED); if (nActual == -1) Insert(); } void CGuiListEdit::Insert() { CRect rc; m_list->SetFocus(); int nItem=m_list->GetItemCount(); nItem=m_list->InsertItem(nItem,_T("")); m_list->SetItemData (nItem, 0); m_list->GetItemRect(0,&rc,LVIS_SELECTED | LVIS_FOCUSED); CEdit* mEdit=m_list->EditLabel(nItem); CSize szBtn=m_toolBtn.GetSizeButton(); mEdit->SetWindowPos (NULL, -1, -1, rc.Width () - 10, rc.Height (), SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); } void CGuiListEdit::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here LV_ITEM* pItem = &((LV_DISPINFO*)pNMHDR)->item; CString m_sz=pItem->pszText; if (!m_sz.IsEmpty()) m_list->SetItemText(pItem->iItem,0,m_sz); else m_list->DeleteItem(pItem->iItem); *pResult = 0; } void CGuiListEdit::Up() { int nActual=m_list->GetNextItem(-1,LVNI_SELECTED); if (nActual == -1) return; if (nActual > 0) { CString m_szA=m_list->GetItemText(nActual,0); CString m_sz=m_list->GetItemText(nActual-1,0); m_list->SetItemText(nActual,0,m_sz); m_list->SetItemText(nActual-1,0,m_szA); m_list->SetItemState (nActual-1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); } m_list->SetFocus(); } void CGuiListEdit::Down() { int nActual=m_list->GetNextItem(-1,LVNI_SELECTED); if (nActual == -1) return; if (nActual+1 < m_list->GetItemCount()) { CString m_szA=m_list->GetItemText(nActual,0); CString m_sz=m_list->GetItemText(nActual+1,0); m_list->SetItemText(nActual,0,m_sz); m_list->SetItemText(nActual+1,0,m_szA); m_list->SetItemState (nActual+1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); } m_list->SetFocus(); } void CGuiListEdit::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class ModifyStyle(0,BS_OWNERDRAW); if ( !m_Conta.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x9999)) return ; m_Conta.AddComponen(&m_MiniTool); /*m_toolBtn.Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,DROPBUTTON); m_toolBtn.SetCaption(_T(" ... ")); m_toolBtn.SetStyleButton(CGuiNormalButton::STL_SEMIFLAT); */m_list=(CListCtrl*) m_Conta.AddComponen(RUNTIME_CLASS(CListCtrl),LST_LIST,WS_VISIBLE | WS_CHILD); m_MiniTool.SetImageList(IDB_DOCKBAROFFICE,14,12,RGB(255,0,255)); m_MiniTool.AddButton(9,LST_DOWN,NULL,_T(""),_T("Item Down")); m_MiniTool.AddButton(11,LST_UP,NULL,_T(""),_T("Item Up")); m_MiniTool.AddButton(8,LST_DELETE,NULL,_T(""),_T("Delete")); m_MiniTool.AddButton(10,LST_INSERT,NULL,_T(""),_T("Insert")); m_MiniTool.AutoSize(TRUE); m_MiniTool.SetBorder(CGuiMiniTool::STYLEPRESS); m_MiniTool.SetCaption(_T("Options:"),CGuiMiniTool::ALIGN_LEFT); m_MiniTool.AlingButtons(CGuiMiniTool::ALIGN_RIGHT); m_MiniTool.SetColorCaption(RGB(0,0,0)); m_list->ModifyStyleEx(0,WS_EX_CLIENTEDGE); m_list->ModifyStyle(0,WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_EDITLABELS | LVS_SHOWSELALWAYS); m_list->SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT); m_list->InsertColumn(0,_T("")); m_Conta.UsedAllWindow(TRUE); //m_MiniTool.SetColor(GuiDrawLayer::GetRGBColorXP()); CStatic::PreSubclassWindow(); } void CGuiListEdit::SetStyle(Border border) { m_border=border; } void CGuiListEdit::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CStatic::OnPaint() for painting messages CBrush cbr; CRect m_rectDraw; GetClientRect(&m_rectDraw); cbr.CreateSolidBrush(m_clrface); dc.FillRect(&m_rectDraw,&cbr); if (m_border == STYLE3D) dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorBTNHigh(), GuiDrawLayer::GetRGBColorShadow()); if (m_border == STYLEPRESS) { dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(), GuiDrawLayer::GetRGBColorBTNHigh()); } if (m_border == STYLEFRAME) { dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(), GuiDrawLayer::GetRGBColorShadow()); } m_Conta.MoveWindow(0,0,m_rectDraw.Width(),m_rectDraw.Height()); m_list->SetColumnWidth (0, m_rectDraw.Width ()-10); } int CGuiListEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CStatic::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here return 0; } void CGuiListEdit::OnSize(UINT nType, int cx, int cy) { CStatic::OnSize(nType, cx, cy); CWnd* pWnd = GetWindow(GW_CHILD); if (pWnd != NULL) { pWnd->MoveWindow(0, 0, cx, cy); ASSERT(pWnd->GetWindow(GW_HWNDNEXT) == NULL); } //m_Conta.MoveWindow(0,0,cx,cy); // TODO: Add your message handler code here }