class ComboxKeyDownFilter:IMessageFilter { HWND m_EditHwnd; this(ComboBox cbox){ m_EditHwnd=FindWindowExA(cbox.handle,null,"Edit",null); } bool preFilterMessage(inout Message m) { if(m.msg ==WM_KEYDOWN && m_EditHwnd==m.hWnd) { writefln("KewDown!"); return false; } return false; } }
前几天用ComboBox,发现不能触发KeyDown事件,发到Dsource了,昨天看看还没有回音.自己干吧,今天早晨好好研究了下.发现得使用Application的IMessageFilter.
原因是ComboBox包含两个控件,Edit和List,Key事件发送给了Edit,所以在ComboBox的Key事件什么也没有做.