如何自己处理combobox的按键事件
焦点在combobox并且下拉框没有展开的时候按上下键,会切换编辑框的值,我想不让它切换,该怎么处理? --------------------编程问答-------------------- 不响应焦点。。。问题是当你改变编辑框的值时,你怎么处理。 --------------------编程问答-------------------- 针对控件添加响应函数,将向上的按键屏蔽 --------------------编程问答--------------------
不响应焦点是不行的,
当边框的值改变的时候,父控件会响应ON_CBN_SELCHANGE的消息。
但是我不希望下拉框在没有展开的时候响应上下键改变了编辑框的值。
我从CComboBox派生一个自己的combobox,重载函数PreTranslateMessage(MSG* pMsg)
BOOL CMyComboBox::PreTranslateMessage(MSG* pMsg)
{
if(!GetDroppedState() )
{
if( pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN)
return true;
}
return CComboBox::PreTranslateMessage(pMsg);
}
但这样又有一个问题,return true后父控件就接受不到上下键的消息了。如何让自控件不处理某个按键交给父控件处理呢?
--------------------编程问答-------------------- 那不要在CMyComboBox里拦截,直接在它的父控件(对话框)里拦截 --------------------编程问答--------------------
在父控件里是拦截不了的,按键事件好像是先给获得焦点的子控件处理,子控件处理完才到父控件的,我已经跟踪过了 --------------------编程问答-------------------- 问题已经解决,在OnKeyDown里屏蔽掉对VK_UP和VK_DOWN不做任何处理就可以了
void CMyComboBox::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(!GetDroppedState())
{
if(nChar == VK_UP || nChar ==VK_DOWN)
return;
}
CComboBox::OnKeyDown(nChar, nRepCnt,nFlags);
} --------------------编程问答--------------------
消息路由决定了 任何消息都是父窗口传给子窗口的
在父窗口的PreTranslateMessage()肯定是能拦截到的,至于OnKeyDown()它也只是由情况决定被PreTranslateMessage调用
补充:移动开发 , Windows Phone