Dave's Brain

Browse - Programming Tips - How can I tell when a user clicks outside my dialog?

Date: 2015aug25
Platform: win32

Language: C/C++

Q.   How can I tell when a user clicks outside my dialog?
(I want to close my dialog when this occurs)

A.  Here is some code that does that.

namespace Hook { HWND m_hDlg = NULL; HHOOK m_hHook = NULL; static LRESULT CALLBACK MyMouseProc(int nCode, WPARAM message, LPARAM lParam) { MOUSEHOOKSTRUCT *pInfo = (MOUSEHOOKSTRUCT *) lParam; if (nCode >= 0) { if (message == WM_NCLBUTTONDOWN && pInfo->hwnd == ghMainDlg) { PostMessage(m_hDlg, WM_COMMAND, IDOK, 0); return 1; } } return CallNextHookEx(m_hHook, nCode, message, lParam); } static void Begin() { m_hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC) MyMouseProc, NULL, GetCurrentThreadId()); } static void RegisterDialog(const HWND hDlg) { m_hDlg = hDlg; } static void End() { UnhookWindowsHookEx(m_hHook); m_hHook = NULL; } };
Use it by calling surrounding your dialog with Begin and End:
Hook::Begin(); DialogBox(ghInstance, MAKEINTRESOURCE(IDD_EDIT_MYDIALOG), hDlg, (DLGPROC) MyDlgProc); Hook::End();
In the dialog register:
case WM_INITDIALOG: ... Hook::RegisterDialog(hDlg); ..

Add a comment

Sign in to add a comment
Copyright © 2008-2017, dave - Code samples on Dave's Brain is licensed under the Creative Commons Attribution 2.5 License. However other material, including English text has all rights reserved.