|
本帖最后由 caicaptain2 于 2018-8-24 14:51 编辑
这是一个产品开发过程中的小案例: 简易的设备按键输入只有“上下左右”方向键和确认键。
在使用DROPDOWN控件的时候,一旦把焦点移动到它上面的时候,方向键和确认键就陷在里面,再也出不来了。。。WM_DisableWindow()对此控件无用,控件依然可以正常操作。
改善后的回调函数,可以使用确认键开启或者下拉选项,焦点在它上的时候,也可以通过方向键移出来。
- //自定义DROPDOWN控件回调函数,可响应enter。 2018-8-24
- void User_DROPDOWN_Callback(WM_MESSAGE *pMsg)
- {
- WM_MESSAGE pMsgtoParent;
- WM_HWIN hItem;
- hItem=pMsg->hWin;
- switch (pMsg->MsgId)
- {
- case WM_KEY:
- switch((((WM_KEY_INFO*)(pMsg->Data.p))->Key))
- {
- case GUI_KEY_ENTER:
- DROPDOWN_Expand(hItem); //这个函数很关键,进入后响应上下左右。确认后才退出
- break;
- default: //其他按键传递按键到父窗口。
- //DROPDOWN_Callback(pMsg); 不能执行这个,所有按键会停在里面出不来。
- pMsgtoParent.MsgId=WM_KEY;//以下三行是为了把按键信息发送给控件的父窗口,以便移动焦点,
- pMsgtoParent.Data.p=(pMsg->Data.p);
- WM_SendToParent(hItem,&pMsgtoParent);
- break;
- }
- break;
- default:
- DROPDOWN_Callback(pMsg);
- break;
- }
- }
复制代码
使用这个回调函数的时候,
- hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_AAA);
- DROPDOWN_SetListHeight(hItem,60);
- <div> DROPDOWN_AddString(hItem,"关");</div><div> DROPDOWN_AddString(hItem,"开");
- </div> WM_SetCallback(hItem, User_DROPDOWN_Callback); //设定自定义的EDIT回调函数
复制代码
|
评分
-
查看全部评分
|