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後,會把此信息通知給控件綁定的回調函數處理

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