👨💻 [CEF] CEF 에서 Ctrl + Mouse Wheal 이벤트를 받으려면 어떻게 해야 하나요?
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
CEF 에서 Ctrl + Mouse Wheal 이벤트를 받으려면 어떻게 해야 하는지 간략히 알아보았습니다.
질문 >
CEF 에서 Ctrl + Mouse Wheal 이벤트를 받으려면 어떻게 해야 하나요?
답변 >
CEF(Chromium Embedded Framework)에서 Ctrl + 마우스 휠 이벤트를 처리하려면 CefKeyboardHandler와 CefRenderHandler 또는 CefLifeSpanHandler를 활용해야 합니다.
1. Ctrl + Mouse Wheel 이벤트 감지 방법
Ctrl 키와 마우스 휠 이벤트를 조합하여 감지하려면 CefKeyboardHandler::OnPreKeyEvent와 CefRenderHandler::OnScrollOffsetChanged 또는 CefBrowserHost::SendMouseWheelEvent를 활용할 수 있습니다.
2. OnPreKeyEvent를 활용한 Ctrl 키 감지
CEF의 CefKeyboardHandler를 구현하여 Ctrl 키가 눌렸는지 상태를 추적합니다.
Ctrl 키 감지 코드
class MyKeyboardHandler : public CefKeyboardHandler {
public:
bool ctrlPressed = false;
bool OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
const CefKeyEvent& event,
CefEventHandle os_event,
bool* is_keyboard_shortcut) override {
if (event.type == KEYEVENT_RAWKEYDOWN || event.type == KEYEVENT_KEYDOWN) {
if (event.modifiers & EVENTFLAG_CONTROL_DOWN) {
ctrlPressed = true;
}
} else if (event.type == KEYEVENT_KEYUP) {
if (!(event.modifiers & EVENTFLAG_CONTROL_DOWN)) {
ctrlPressed = false;
}
}
return false; // 다른 핸들러가 이벤트를 계속 처리할 수 있도록 false 반환
}
IMPLEMENT_REFCOUNTING(MyKeyboardHandler);
};
✅ ctrlPressed 변수를 사용하여 Ctrl 키가 눌려 있는 상태를 감지합니다.
3. OnMouseWheelEvent를 활용한 마우스 휠 감지
마우스 휠 이벤트를 처리하기 위해 CefRenderHandler 또는 CefBrowserHost::SendMouseWheelEvent를 활용할 수 있습니다.
마우스 휠 이벤트 처리 코드
class MyRenderHandler : public CefRenderHandler {
public:
bool ctrlPressed = false;
void OnScrollOffsetChanged(CefRefPtr<CefBrowser> browser,
double x, double y) override {
if (ctrlPressed) {
if (y > 0) {
std::cout << "Zoom In (Ctrl + Scroll Up)" << std::endl;
browser->GetHost()->SetZoomLevel(browser->GetHost()->GetZoomLevel() + 0.1);
} else {
std::cout << "Zoom Out (Ctrl + Scroll Down)" << std::endl;
browser->GetHost()->SetZoomLevel(browser->GetHost()->GetZoomLevel() - 0.1);
}
}
}
IMPLEMENT_REFCOUNTING(MyRenderHandler);
};
✅ OnScrollOffsetChanged에서 마우스 휠이 움직였을 때 ctrlPressed 변수를 확인하여 줌 동작을 수행합니다.
4. CefClient에서 핸들러 설정
이제 CefClient에서 MyKeyboardHandler와 MyRenderHandler를 설정하여 적용해야 합니다.
핸들러 적용 코드
class MyClient : public CefClient {
public:
CefRefPtr<MyKeyboardHandler> keyboardHandler;
CefRefPtr<MyRenderHandler> renderHandler;
MyClient() {
keyboardHandler = new MyKeyboardHandler();
renderHandler = new MyRenderHandler();
}
CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() override {
return keyboardHandler;
}
CefRefPtr<CefRenderHandler> GetRenderHandler() override {
return renderHandler;
}
IMPLEMENT_REFCOUNTING(MyClient);
};
✅ CefClient에서 GetKeyboardHandler()와 GetRenderHandler()를 구현하여 핸들러를 설정합니다.
5. 실행 시 적용
CefRefPtr client = new MyClient();
CefBrowserHost::CreateBrowser(window_info, client, "<https://www.example.com>", browser_settings, nullptr);
6. 정리
✅ Ctrl 키 감지는 CefKeyboardHandler::OnPreKeyEvent에서 처리
✅ 마우스 휠 이벤트는 CefRenderHandler::OnScrollOffsetChanged에서 감지
✅ CefClient에서 핸들러를 등록하여 동작
이제 Ctrl + 마우스 휠 이벤트를 감지하여 줌 인/아웃 기능을 구현할 수 있습니다! 🚀
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com