ファイルにある可能性はありますかcefclient_win.cpp
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
WM_MOUSEMOVE メッセージのみを取得するため、マウス メッセージは除外されますか?
WndProcがそれらを保持する前に、左クリックまたは右クリックが処理されるようです。特にマウスの右クリックを無効にするにはどうすればよいですか?
ファイルにある可能性はありますかcefclient_win.cpp
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
WM_MOUSEMOVE メッセージのみを取得するため、マウス メッセージは除外されますか?
WndProcがそれらを保持する前に、左クリックまたは右クリックが処理されるようです。特にマウスの右クリックを無効にするにはどうすればよいですか?
私がそれを解決した方法は、ブラウザー ウィンドウごとに CEF によって作成されたスレッドにマウス フックを追加することでした。
// Hook to disable right mouse clicks
LRESULT CALLBACK MyMouseHook(int nCode, WPARAM wp, LPARAM lp)
{
MOUSEHOOKSTRUCT *pmh = (MOUSEHOOKSTRUCT *) lp;
if (nCode >= 0) {
if( wp == WM_RBUTTONDOWN || wp == WM_RBUTTONUP ) {
return 1;
}
}
return CallNextHookEx(NULL, nCode, wp, lp);
}
void
CefBrowserApplication::OnCreate(
CefRefPtr<CefBrowserClientHandler> aBrowserClient)
{
// Hook the mouse
DWORD threadId = GetWindowThreadProcessId(aBrowserClient->GetBrowser()->GetWindowHandle(), NULL);
HHOOK hook = SetWindowsHookEx(WH_MOUSE, MyMouseHook, NULL, threadId);
}
低レベルのマウス フックを使用していないことに注意してください。これは、デスクトップ全体でグローバルであるためです。グローバルな低レベル フックでマウスの右クリックを無効にすると、実行中のすべてのアプリケーションで無効になります。
問題は、CEF が子ウィンドウを作成し、マウス イベントを親に渡さないことです。Low Level Mouse Hookを導入して克服しました
/////////////////
// Low-level mouse hook:
//
LRESULT CALLBACK MyMouseHookLL(int nCode, WPARAM wp, LPARAM lp)
{
MSLLHOOKSTRUCT *pmh = (MSLLHOOKSTRUCT *) lp;
if (nCode==HC_ACTION) {
if( wp == WM_RBUTTONDOWN || wp == WM_RBUTTONUP ) {
//gooble it
return 1;
}
}
return CallNextHookEx(g_hHookMouseLL, nCode, wp, lp);
}
g_hHookMouseLL = SetWindowsHookEx(WH_MOUSE_LL, MyMouseHookLL, hInst, 0);