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

📄 bcgpintellisenselb.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				lstrcmp  (strToCompare, pData2->m_strItemName.Left (strToCompare.GetLength ()));
		}
		return CBCGPIntelliSenseLB::m_bComparenoCase ? 
				lstrcmpi (strToCompare, pData2->m_strItemName) :
				lstrcmp  (strToCompare, pData2->m_strItemName);
		
	}

	return CBCGPIntelliSenseLB::m_bComparenoCase ? 
				lstrcmpi (strToCompare, pData2->m_strItemName) :
				lstrcmp (strToCompare, pData2->m_strItemName);
}
//*****************************************************************************************
void CBCGPIntelliSenseLB::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();	
	ASSERT_VALID (pEditCtrl);

	if (nChar == VK_TAB)
	{
		return;
	}

	pEditCtrl->SendMessage (WM_CHAR, nChar, MAKELPARAM (nRepCnt, nFlags));
	SelectCurrentWord ();
}
//*****************************************************************************************
void CBCGPIntelliSenseLB::SelectCurrentWord ()
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();	
	ASSERT_VALID (pEditCtrl);
	
	int nWordStart = 0;
	int nWordFinish = 0;

	pEditCtrl->FindWordStartFinish (m_nInitOffset, pEditCtrl->m_strBuffer, nWordStart, nWordFinish);

	int nWordLen = nWordFinish - nWordStart;

	if (nWordLen < 1 || nWordStart < 0)
	{
		SetCurSel (-1); 
		SetCaretIndex (0, TRUE);
		return;
	}

	CString str = pEditCtrl->m_strBuffer.Mid (nWordStart, nWordLen);

	if (str.IsEmpty ())
	{
		SetCurSel (-1); 
		SetCaretIndex (0, TRUE);
		return;
	}

	CBCGPIntelliSenseLB::m_bComparenoCase = TRUE;

	int iIdx = FindString (-1, str); 
	if (iIdx != -1)
	{
		SetCurSel (iIdx);
	}
	else
	{
		int nIdxPrev = 0;
		for (int i = 0; i < str.GetLength () - 1; i++)
		{
			CString strSub = str.Mid (0, i + 1);
			iIdx = FindString (nIdxPrev - 1, strSub); 
			if (iIdx == -1)
			{
				break;
			}
			nIdxPrev = iIdx;
		}
		SetCurSel (-1); 
		SetCaretIndex (nIdxPrev, TRUE);
	}

	CBCGPIntelliSenseLB::m_bComparenoCase = FALSE;
}
//*****************************************************************************************
void CBCGPIntelliSenseLB::InsertDataToEditCtrl ()
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();
	if (pEditCtrl != NULL)
	{
		int nIdx = GetCurSel ();

		int nWordStart = 0;
		int nWordFinish = 0;

		pEditCtrl->FindWordStartFinish (m_nInitOffset, pEditCtrl->m_strBuffer, nWordStart, 
										nWordFinish);

		nWordStart = min (m_nInitOffset, nWordStart);

		pEditCtrl->DeleteText (nWordStart, pEditCtrl->GetCurOffset ());

		CBCGPIntelliSenseData* pData = 
			(CBCGPIntelliSenseData*) GetItemDataPtr (nIdx);
 
		ASSERT_VALID (pData);
		pEditCtrl->RemoveSelection (FALSE, TRUE, FALSE);
		pEditCtrl->InsertText (pData->m_strItemName, -1, TRUE, FALSE, TRUE, FALSE, TRUE);
		pEditCtrl->m_nSavedOffset = pEditCtrl->GetCurOffset ();
	}
}
//*****************************************************************************************
void CBCGPIntelliSenseLB::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();
	ASSERT_VALID (pEditCtrl);


	switch (nChar)
	{
	case VK_LEFT:
	case VK_RIGHT:
	case VK_BACK:
		{
			pEditCtrl->SendMessage (WM_KEYDOWN, nChar, MAKELPARAM (nRepCnt, nFlags));

			int nCurrOffset = pEditCtrl->GetCurOffset (); 

			CPoint pt;
			CPoint ptRowColumn;
			pEditCtrl->OffsetToPoint (nCurrOffset, pt, &ptRowColumn);

			int nWordStart = 0;
			int nWordFinish = 0;

			pEditCtrl->FindWordStartFinish (m_nInitOffset, pEditCtrl->m_strBuffer,
				                            nWordStart, nWordFinish);

			if (nCurrOffset <= m_nInitOffset - 1 || 
				nCurrOffset > nWordFinish ||
				ptRowColumn.y != m_nInitRow)
			{
				GetParent ()->PostMessage (WM_CLOSE);
			}
			
			return;
		}

	case VK_DELETE:
		pEditCtrl->SendMessage (WM_KEYDOWN, nChar, MAKELPARAM (nRepCnt, nFlags));
		GetParent ()->PostMessage (WM_CLOSE);
		return;

	case VK_ESCAPE:
		GetParent ()->PostMessage (WM_CLOSE);
		return;

	case VK_RETURN: 
	case VK_TAB:
	case VK_SPACE:		
		{
			int nIdx = GetCurSel ();
			if (nIdx != -1)
			{
				InsertDataToEditCtrl ();
				if (!::IsWindow(m_hWnd))
				{
					return;
				}
				GetParent ()->PostMessage (WM_CLOSE);
			}
			else
			{
				if (nChar == VK_TAB)
				{
					// tab selects first item
					SetCurSel (0);
					InsertDataToEditCtrl ();
					if (!::IsWindow(m_hWnd))
					{
						return;
					}
				}
				else
				{
					pEditCtrl->SendMessage (WM_KEYDOWN, nChar, MAKELPARAM (nRepCnt, nFlags));
				}
				GetParent ()->PostMessage (WM_CLOSE);
				return;
			}
		}
		break;
	}

	CBCGPBaseIntelliSenseLB::OnKeyDown(nChar, nRepCnt, nFlags);
}

/////////////////////////////////////////////////////////////////////////////
// CBCGPSymImagesLB

BEGIN_MESSAGE_MAP(CBCGPSymImagesLB, CBCGPBaseIntelliSenseLB)
	//{{AFX_MSG_MAP(CBCGPSymImagesLB)
	ON_WM_CHAR()
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//*****************************************************************************************
void CBCGPSymImagesLB::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	int nIdx = GetCurSel ();
	
	for (int i = nIdx + 1; i != nIdx; i++)
	{
		if (i == GetCount ())
		{
			if (nIdx == -1)
			{
				break;
			}
			i = -1;
			continue;
		}

		CBCGPIntelliSenseData* pData = 
			(CBCGPIntelliSenseData*) GetItemDataPtr (i);

		if (pData == NULL)
		{
			continue;
		}

		if (pData->m_strItemName.GetAt (0) == (TCHAR) nChar)
		{
			SetCurSel (i);
			break;
		}
	}
}
//*****************************************************************************************
void CBCGPSymImagesLB::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();
	ASSERT_VALID (pEditCtrl);

	switch (nChar)
	{
	case VK_ESCAPE:
		GetParent ()->PostMessage (WM_CLOSE);
		return;

	case VK_RETURN: 
	case VK_TAB:
	case VK_SPACE:		
		{
			int nIdx = GetCurSel ();
			if (nIdx != -1)
			{
				InsertDataToEditCtrl ();
				if (!::IsWindow(m_hWnd))
				{
					return;
				}

				GetParent ()->PostMessage (WM_CLOSE);
			}
			else
			{
				if (nChar == VK_TAB)
				{
					// tab selects first item
					SetCurSel (0);
					InsertDataToEditCtrl ();
					if (!::IsWindow(m_hWnd))
					{
						return;
					}

				}
				else
				{
					pEditCtrl->SendMessage (WM_KEYDOWN, nChar, MAKELPARAM (nRepCnt, nFlags));
				}
				GetParent ()->PostMessage (WM_CLOSE);
				return;
			}
		}
		break;
	}

	CBCGPBaseIntelliSenseLB::OnKeyDown(nChar, nRepCnt, nFlags);
}
//*****************************************************************************************
void CBCGPSymImagesLB::InsertDataToEditCtrl ()
{
	CBCGPEditCtrl* pEditCtrl = GetParentEditCtrl ();
	ASSERT_VALID (pEditCtrl);

	if (pEditCtrl != NULL)
	{
		int nIdx = GetCurSel ();

		CBCGPIntelliSenseData* pData = 
			(CBCGPIntelliSenseData*) GetItemDataPtr (nIdx);
 
		ASSERT_VALID (pData);
		pEditCtrl->RemoveSelection (FALSE, TRUE, FALSE);
		ASSERT (pData->m_dwData != 0);
		pEditCtrl->InsertText (CString ((TCHAR)pData->m_dwData), -1, TRUE, FALSE, TRUE, FALSE, TRUE);
	}
}

⌨️ 快捷键说明

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