protected override void WndProc(ref Message m) { switch (m.Msg) { //WM_NOTIFY case 78: NMSHN nm = (NMSHN)Marshal.PtrToStructure(m.LParam, typeof(NMSHN)); NotificationWithSoftKeys n = m_notifications[nm.idFrom]; switch (nm.code) { case SHNN.DISMISS: n.OnBalloonChanged(new BalloonChangedEventArgs(false)); break; case SHNN.SHOW: n.OnBalloonChanged(new BalloonChangedEventArgs(true)); break; case SHNN.LINKSEL: string link = Marshal.PtrToStringUni((IntPtr)nm.union1); n.OnResponseSubmitted(new ResponseSubmittedEventArgs(link)); break; case SHNN.NAVNEXT: n.OnSpinnerClick(new SpinnerClickEventArgs(true)); break; case SHNN.NAVPREV: n.OnSpinnerClick(new SpinnerClickEventArgs(false)); break; } break; //WM_COMMAND case 0x0111: { uint value = ((uint)m.WParam & 0xFFFF); int id = (int)(value >> 8); byte index = (byte)(value & 0xFF); NotificationWithSoftKeys z = m_notifications[id]; if (index == 0) { z.OnLeftSoftKeyClick(EventArgs.Empty); } else { z.OnRightSoftKeyClick(EventArgs.Empty); } } break; } //do base wndproc base.WndProc(ref m); }