📄 bcgpintellisenselb.cpp
字号:
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 + -