|
|
关于LISTBOX列表框有疑问:
LISTBOX_SetOwnerDraw(hItem, _StringInputsListBoxOwnerDraw);
在使用LISTBOX_SetOwnerDraw设置回调函数之后,这个回调函数的触发条件是什么,是有按键消息
WM_KEY,还是说选中项改变WM_NOTIFICATION_SEL_CHANGED,因为在回调函数里设置了按键按下时修改当前项的颜色
但是只在向上按键和向下按键才刷新,想要弄清楚是怎么触发回调函数的?
case WM_KEY:
{
int Key;
int Val;
Key = ((WM_KEY_INFO*)(pMsg->Data.p))->Key;
WINDOW_GetUserData(pMsg->hWin,&hItem,sizeof(hItem));
WM_RestartTimer(hItem,g_DataInput.TimeOutMS/portTICK_PERIOD_MS);
if(((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)
{
if(KEY_CH == Key)
{
WM_DeleteWindow(pMsg->hWin);
g_CurPageId = g_PrePageId;
TurnToFocus();
}
else if(GUI_KEY_ENTER == Key)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
if(0 == (g_DataInput.UnSelMask & (1 << LISTBOX_GetSel(hItem))))
{
Val = LISTBOX_GetSel(hItem) + g_DataInput.Min;
if(NULL != g_DataInput.pData)
{
if(1 == g_DataInput.DataSize)
{
*((INT8U *)g_DataInput.pData) = Val;
}
else if(2 == g_DataInput.DataSize)
{
*((INT16U *)g_DataInput.pData) = Val;
}
else if(4 == g_DataInput.DataSize)
{
*((INT32U *)g_DataInput.pData) = Val;
}
}
if(NULL != g_DataInput.cb)
{
(*g_DataInput.cb)(Val);
}
WM_DeleteWindow(pMsg->hWin);
g_CurPageId = g_PrePageId;
TurnToFocus();
}
}
else if(KEY_UP == Key)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
LISTBOX_GetUserData(hItem,&ShowIndex,sizeof(ShowIndex));
if(0 != ShowIndex)
{
ShowIndex--;
}
LISTBOX_SetUserData(hItem,&ShowIndex,sizeof(ShowIndex));
}
else if(KEY_DOWN == Key)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
LISTBOX_GetUserData(hItem,&ShowIndex,sizeof(ShowIndex));
MaxLen = DATA_INPUT_MAX_ITEMS - 1;
if(MaxLen >= LISTBOX_GetNumItems(hItem))
{
MaxLen = LISTBOX_GetNumItems(hItem) - 1;
}
if(ShowIndex < MaxLen)
{
ShowIndex++;
LISTBOX_SetUserData(hItem,&ShowIndex,sizeof(ShowIndex));
}
}
}
}
break;
case WM_NOTIFY_PARENT:
{
INT32U Id,NCode;
INT32U Sel;
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id)
{
case ID_LISTBOX_0:
switch (NCode)
{
case WM_NOTIFICATION_CLICKED: break;
case WM_NOTIFICATION_RELEASED: break;
case WM_NOTIFICATION_SEL_CHANGED:
WINDOW_GetUserData(pMsg->hWin,&hItem,sizeof(hItem));
WM_RestartTimer(hItem,g_DataInput.TimeOutMS/portTICK_PERIOD_MS);
hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
Sel = LISTBOX_GetSel(hItem);
hItem = WM_GetDialogItem(pMsg->hWin,ID_SCROLL_BAR1);
ScrollBar_SetValue(hItem,Sel,ScrollBar_GetNumbers(hItem));
break;
}
break;
}
}
break;
|
|