Тень от модального окна пропадает при щелчке мышью не на этом окне

Мне нужно показать всплывающее окно с тенью. Вроде бы сделал, как написано в статьях, но в одном случае точно работает не правильно: когда я вызываю всплывающее окно, которое рисует нужную мне тень в диалоговом режиме (всплывающая форма модальная), а затем я нажимаю на основную форму (за пределами модальной всплывающей формы), тогда тень скрывается за главным окном приложения (в этом случае обычное модальное окно мигает, показывая, что действия можно совершать только на этом модальном окне). Если я переключусь на другой процесс в Windows, а затем переключусь на мою работающую программу, то тень обновится и будет выглядеть так, как должна. Вопрос: как предотвратить скрытие тени под основной формой?

Привожу код ниже:

using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace TestShadow
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                PopupForm popupForm = new PopupForm();
                popupForm.ShowInTaskbar = false;
                popupForm.StartPosition = FormStartPosition.Manual;
                popupForm.FormBorderStyle = FormBorderStyle.None;
                StartPosition = FormStartPosition.Manual;
                var topLeft = button1.PointToScreen(new Point(0, 0));
                popupForm.Location = new Point(topLeft.X, topLeft.Y + button1.Height);
                popupForm.ShowDialog();
            }
        }
        public class PopupForm : Form
        {
            const int WS_EX_TOOLWINDOW = 0x00000080;
            protected override CreateParams CreateParams
            {
                get
                {
                    const int CS_NOCLOSE = 0x200;
                    const int CS_DROPSHADOW = 0x20000;
                    CreateParams cp = base.CreateParams;
                    cp.ClassStyle |= CS_NOCLOSE;
                    cp.ClassStyle |= CS_DROPSHADOW;
                    return cp;
                }
            }
        }
    }

Картинки:

Правильно выглядящая Popup форма Popup форма неверно отрисовывается, тень спрятана за основной формой


Ответы (1 шт):

Автор решения: Михаил

По совету одного программиста Jimi я добавил следующий код:

protected override void WndProc(ref Message m) 
{ 
  switch (m.Msg) 
  { 
    case WM_NCACTIVATE: 
      SetWindowPos(Handle, -1, 0, 0, 0, 0, 3); 
      break; 
    default: 
      break; 
  } 
  base.WndProc(ref m); 
}
→ Ссылка