⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guilistedit.cpp

📁 一个很好用的串口侦听源代码
💻 CPP
字号:
//-----------------------------------------------------------------------//
// This is a part of the GuiLib MFC Extention.							 //	
// Autor  :  Francisco Campos											 //
// (C) 2002 Francisco Campos <www.beyondata.com> All 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		 //	
// fco_campos@tutopia.com													 //
// version : 1.1														 //
// Modified by : Francisco Campos										 //
//-----------------------------------------------------------------------//


#include "stdafx.h"
#include "..\header\GuiLib.h"
#include "..\header\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)
	ON_NOTIFY(LVN_BEGINLABELEDIT, LST_LIST, OnBeginlabeleditList)
	
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);
}

void CGuiListEdit::OnBeginlabeleditList(NMHDR *pNMHDR, LRESULT *pResult)
{
	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
	
	// TODO: Add your control notification handler code here
	*pResult = 0;
}

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);

	*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
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -