您的位置:首页 > 产品设计 > UI/UE

DuiLib 对键盘消息的处理——ESC、空格键

2013-03-28 11:59 309 查看
今天,改BUG

窗体显示,按空格键,追到:

bool CPaintManagerUI::PreMessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& /*lRes*/)

{

for( int i = 0; i < m_aPreMessageFilters.GetSize(); i++ ) // 消息过滤

{

bool bHandled = false; // 递归调用

LRESULT lResult = static_cast<IMessageFilterUI*>(m_aPreMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);

if( bHandled ) { // 注意: 这里的条件不是上面的返回值

return true;

}

}

switch( uMsg )

{

case WM_KEYDOWN:

..........................

}

}

bool CPaintManagerUI::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes)

{

// Cycle through listeners

for( int i = 0; i < m_aMessageFilters.GetSize(); i++ )

{

bool bHandled = false; // 消息过滤

LRESULT lResult = static_cast<IMessageFilterUI*>(m_aMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);

if( bHandled ) {

lRes = lResult;

return true;

}

}

// Custom handling of events

switch( uMsg ) {

case WM_APP + 1:

{

}

case WM_KEYDOWN:

{

if( m_pFocus == NULL ) break;

TEventUI event = { 0 };

event.Type = UIEVENT_KEYDOWN;

event.chKey = (TCHAR)wParam;

event.ptMouse = m_ptLastMousePos;

event.wKeyState = MapKeyState();

event.dwTimestamp = ::GetTickCount();

m_pFocus->Event(event); // 处理焦点消息

m_pEventKey = m_pFocus;

}

break;

......................................

}

DuiLib屏蔽键盘消息:

头文件:

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM /*lParam*/, bool& /*bHandled*/);

源文件:

LRESULT C***::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)

{

if (uMsg == WM_KEYDOWN)

{

switch (wParam)

{

case VK_RETURN: // 回车建

Login();

break;

case VK_ESCAPE: // ESC

bHandled = true;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// return 1; // 返回值,在这里不起作用, 真正起作用的是这个参数:bHandled

case VK_SPACE: // 空格键

bHandled = true;

// return 1;

default:

break;

}

}

return FALSE;

}

ESC键,单纯的:case VK_ESCAPE: // ESC 可能会屏蔽掉

但:case VK_SPACE: // 空格键 不行,跟踪发现它后面会进入点击消息 ::notify()中( // 处理焦点消息)。

真正的屏蔽掉消息:

对其进行赋值:bHandled = true;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: