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;
窗体显示,按空格键,追到:
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;
相关文章推荐
- duilib鼠标键盘消息处理
- Windows键盘消息处理
- MFC鼠标键盘消息处理
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- Android应用程序键盘(Keyboard)消息处理机制分析(6)
- Android应用程序键盘(Keyboard)消息处理机制分析(22)
- Windows键盘消息处理
- 一个能够检查Windows传递给窗口消息处理程序的键盘内容和字符消息的程序
- [原]【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- DuiLib消息处理剖析
- 【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理
- VC处理键盘消息
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- Android应用程序键盘(Keyboard)消息处理机制分析(7)
- Android应用程序键盘(Keyboard)消息处理机制分析(23)
- .Net WinForm 控件键盘消息处理剖析
- Android应用程序键盘(Keyboard)消息处理机制分析
- 浅谈Android应用程序键盘消息处理机制
- TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)