private static IntPtr WndProc(IntPtr hWnd, int Msg, int wParam, int lParam) { Registration reg = null; if (!orig_winproc_dict.TryGetValue(hWnd, out reg)) { return(IntPtr.Zero); } if (Msg == toolbar_created_msg) { ThumbnailToolbar tb = new ThumbnailToolbar(hWnd); toolbars[hWnd] = tb; reg.CreationCallback(tb); } else if (Msg == WM_COMMAND && HiWord(wParam) == THBN_CLICKED) { int button_id = LoWord(wParam); ThumbnailToolbar tb; if (toolbars.TryGetValue(hWnd, out tb)) { ThumbnailToolbarButton button = tb.Buttons.SingleOrDefault(b => b.Id == button_id); if (button != null) { button.FireClicked(); } } } return(CallWindowProcW(reg.OrigWinProc, hWnd, Msg, wParam, lParam)); }