settingvaluelistctrl.cpp
来自「一个很好的LFP规约调试器」· C++ 代码 · 共 221 行
CPP
221 行
// SettingValueListCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "TestLFPProtocol.h"
#include "SettingValueListCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSettingValueListCtrl
CSettingValueListCtrl::CSettingValueListCtrl()
{
m_pEdit = NULL;
m_pComboBox = NULL;
}
CSettingValueListCtrl::~CSettingValueListCtrl()
{
delete m_pEdit;
delete m_pComboBox;
}
BEGIN_MESSAGE_MAP(CSettingValueListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CSettingValueListCtrl)
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDOWN()
ON_EN_KILLFOCUS(IDC_EDIT_CTRL, OnEnKillFocus)
ON_CBN_SELCHANGE(IDC_COMBOBOX_CTRL, OnSelchangeCombo)
ON_COMMAND(IDC_CTRL_CHANGE, OnChangeValue )
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSettingValueListCtrl message handlers
void CSettingValueListCtrl::OnRButtonDown(UINT nFlags, CPoint point)
{
CListCtrl::OnRButtonDown(nFlags, point);
CMenu PopMenu;
CMenu *pMenu;
CPoint pt;
pt = point;
CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
PopMenu.LoadMenu( IDR_MENU_POPUP );
ClientToScreen ( &pt );
pMenu = PopMenu.GetSubMenu( 1 );
pMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this );
}
void CSettingValueListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListCtrl::OnLButtonDblClk(nFlags, point);
LVHITTESTINFO hti = {0};
hti.pt = point;
if( SubItemHitTest( &hti ) == -1 ) return;
int iItem = hti.iItem;
int iSubItem = hti.iSubItem;
if( iItem == -1 || iSubItem == -1 ) return;
CRect rect;
GetSubItemRect( iItem, iSubItem, LVIR_LABEL, rect );
ClientToScreen( rect );
CPoint pt( rect.right, rect.bottom );
CRect rc;
GetWindowRect( rc );
if( !rc.PtInRect( pt ) ) SendMessage( WM_VSCROLL, SB_LINEDOWN, 0 );
pt.x = rect.left;
pt.y = rect.top;
if( !rc.PtInRect( pt ) ) SendMessage( WM_VSCROLL, SB_LINEUP, 0 );
m_iRow = iItem;
m_iCol = iSubItem;
CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
switch( m_iCol ) {
case 2:
if( m_iRow == 0 ) {
OnShowEditCtrl();
break;
}
if( pApp->m_pMainView->dev_settingvalue_type[m_iRow] == 1 ) {
OnShowEditCtrl();
break;
}
if( pApp->m_pMainView->dev_settingvalue_type[m_iRow] == 2 ) {
OnShowComboxCtrl();
break;
}
if( pApp->m_pMainView->dev_settingvalue_type[m_iRow] == 3 ) {
OnShowComboxCtrl( TRUE );
break;
}
break;
default: break;
}
}
void CSettingValueListCtrl::OnShowEditCtrl( void )
{
if( m_iRow >= GetItemCount() ) return;
if( GetItemData( m_iRow ) & 1 ) {
if( m_pEdit ) m_pEdit->ShowWindow( SW_HIDE );
return;
}
CRect rect;
GetSubItemRect( m_iRow, m_iCol, LVIR_LABEL, rect );
rect.top;
if( m_pEdit == NULL ) {
m_pEdit = new CEdit;
m_pEdit->Create( WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_TABSTOP | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,
rect, this, IDC_EDIT_CTRL );
m_pEdit->SetFont( GetFont() );
m_pEdit->ShowWindow( SW_SHOW );
}
else {
m_pEdit->SetWindowPos( NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW );
}
if( m_pComboBox ) m_pComboBox->ShowWindow( SW_HIDE );
TCHAR szItem[256] = {0};
LVITEM item;
item.mask = LVIF_TEXT;
item.iItem = m_iRow;
item.iSubItem = m_iCol;
item.cchTextMax = ARRSIZE( szItem );
item.pszText = szItem;
GetItem( &item );
m_pEdit->SetWindowText( szItem );
m_pEdit->SetSel( 0, -1 );
m_pEdit->SetFocus();
m_pEdit->BringWindowToTop();
}
void CSettingValueListCtrl::OnEnKillFocus()
{
if( m_iRow != -1 && m_iCol != -1 ) {
if( m_pEdit && m_pEdit->IsWindowVisible() ) {
CString strItem;
m_pEdit->GetWindowText( strItem );
strItem.TrimLeft();
strItem.TrimRight();
SetItemText( m_iRow, m_iCol, strItem );
}
}
if( m_pEdit ) m_pEdit->ShowWindow( SW_HIDE );
}
void CSettingValueListCtrl::OnShowComboxCtrl( BOOL IsAlarm /*= FALSE*/ )
{
if( m_iRow >= GetItemCount() ) return;
if( GetItemData( m_iRow ) & 1 ) {
if( m_pComboBox ) m_pComboBox->ShowWindow( SW_HIDE );
return;
}
CRect rect;
GetSubItemRect(m_iRow, m_iCol, LVIR_LABEL, rect );
rect.bottom += 200;
if( m_pComboBox == NULL ) {
m_pComboBox = new CComboBox;
m_pComboBox->Create( WS_VSCROLL | CBS_DROPDOWNLIST | WS_CHILD |
WS_VISIBLE | WS_TABSTOP, rect, this, IDC_COMBOBOX_CTRL );
m_pComboBox->SetFont( GetFont() );
m_pComboBox->ShowWindow( SW_SHOW );
}
else {
m_pComboBox->SetWindowPos( NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW );
}
if( m_pEdit ) m_pEdit->ShowWindow( SW_HIDE );
m_pComboBox->ResetContent();
CreateComboBox( IsAlarm );
m_pComboBox->ShowDropDown( TRUE );
TCHAR szItem[256] = {0};
LVITEM item;
item.mask = LVIF_TEXT;
item.iItem = m_iRow;
item.iSubItem = m_iCol;
item.cchTextMax = ARRSIZE( szItem );
item.pszText = szItem;
GetItem( &item );
m_pComboBox->SetFocus();
m_pComboBox->SelectString( -1, szItem );
m_pComboBox->BringWindowToTop();
}
void CSettingValueListCtrl::OnSelchangeCombo()
{
if( m_iRow != -1 && m_iCol != -1 ) {
if( m_pComboBox && m_pComboBox->IsWindowVisible() ) {
CString strItem;
m_pComboBox->GetWindowText( strItem );
strItem.TrimLeft();
strItem.TrimRight();
SetItemText( m_iRow, m_iCol, strItem );
}
}
if( m_pComboBox ) m_pComboBox->ShowWindow( SW_HIDE );
}
void CSettingValueListCtrl::CreateComboBox( BOOL IsAlarm )
{
if( IsAlarm ) {
m_pComboBox->AddString( "报警" );
m_pComboBox->AddString( "跳闸" );
}
else {
m_pComboBox->AddString( "退出" );
m_pComboBox->AddString( "投入" );
}
}
void CSettingValueListCtrl::OnChangeValue()
{
CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
pApp->m_pMainView->dev_ctrl.dev_set_settings = TRUE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?