CEF 添加ESC按键通知

 

场景 :

   CEF浏览器网页全屏时,点击ESC 按键,窗口没有获得ESC按键消息

 

解决:

   CEF添加ESC按键通知

  BrowserHandler 添加CefKeyboardHandler 按键处理基类

 

		//按键按下事件
		virtual bool OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
			const CefKeyEvent& event,
			CefEventHandle os_event,
			bool* is_keyboard_shortcut);

		virtual bool OnKeyEvent(CefRefPtr<CefBrowser> browser,
			const CefKeyEvent& event,
			CefEventHandle os_event);

 

bool BrowserHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
	const CefKeyEvent& event,
	CefEventHandle os_event,
	bool* is_keyboard_shortcut)
{
	if (event.type != KEYEVENT_CHAR)
	{
		if (event.windows_key_code == VK_F5)//F5刷新
		{
			browser->Reload();
			//browser->ReloadIgnoreCache();//重新加载当前页面,忽略任何缓存的数据
		}
		else if (event.windows_key_code == VK_F12)
		{
			ShowDevTool(browser);
		}

		else if (event.windows_key_code == VK_ESCAPE)
		{
			if (handle_delegate_)
				handle_delegate_->OnClickedEsc();
		}

	}


	return false;
}

bool BrowserHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser,
	const CefKeyEvent& event,
	CefEventHandle os_event)
{
	return false;
}

 

通过代理类HandlerDelegate  把CEF消息传给duilib窗口控件

class HandlerDelegate :

{

     virtual void OnClickedEsc() = 0; //浏览器中点击了ESC

}
      

class CefControlBase : public Control, public nim_cef::BrowserHandler::HandlerDelegate

{

   //给控件添加一个ESC按下后的回调

    void AttachClickedEscCallback(const OnClickedEscEvent& callback)
    {
        cb_ClickedEsc = callback;
    }

}

//实现基类纯虚函数

void CefControlBase::OnClickedEsc()
{
    if (cb_ClickedEsc)
        cb_ClickedEsc();
}

这样点击ESC后,会把此信息通知给控件绑定的回调函数处理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章