CListBox::CharToItem
呼叫框架,在清單方塊的父視窗接收從清單方塊中的 WM_CHARTOITEM 訊息。
virtual int CharToItem(
UINT nKey,
UINT nIndex
);
參數
nKey
使用者輸入 ANSI 字元的程式碼。nIndex
清單方塊插入號目前的位置。
傳回值
傳回 1 –或– 2 沒有進一步的動作或非負數值的一或多個清單方塊項目索引的執行按鍵的預設動作。預設實作會傳回– 1。
備註
WM_CHARTOITEM 資訊由清單方塊傳送,在收到訊息時, WM_CHAR ,不過,只有在清單方塊中符合這些準則:
為主控描繪清單方塊。
沒有 LBS_HASSTRINGS 樣式設定。
至少有一個項目。
您不應該呼叫這個函式。覆寫這個函式會提供您自訂處理鍵盤訊息。
在您的覆寫,您必須傳回值告知架構所採取的動作。您所執行的。傳回值 1 –或– 2 表示您是否已選取項目的所有層面並不是清單方塊需要進一步的動作。在傳回 1 –或– 2 之前,您可以設定選取範圍或移動插入號或兩者。將選取範圍、使用 SetCurSel 或 SetSel。若要移動插入號,請使用 SetCaretIndex。
傳回值等於或大於 0 的 清單方塊中指定項目的索引和清單方塊應執行的預設按鍵動作在指定項目的。
範例
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
// On a numeric key, move the caret up one item.
if (isdigit(nChar) && (nIndex > 0))
{
SetCaretIndex(nIndex-1);
}
// On an alphabetic key, move the caret down one item.
else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex+1);
}
// Do not perform any default processing.
return -1;
}
需求
Header: afxwin.h