預設 WinForm 單一啟用視窗,次視窗顯示時主視窗會失去焦點外觀。需兩個視窗同時呈現「啟用」標題列樣式。
攔截 Activated 事件,向兩個視窗發送 WM_NCACTIVATE (0x86) 配合 WA_ACTIVE (0x1) 強制繪製啟用狀態非客戶區。
public partial class Form1 : Form {
Form frm = null;
public Form1() {
InitializeComponent();
this.Activated += Form_Activated;
}
const int WM_NCACTIVATE = 0x86;
const int WA_ACTIVE = 0x1;
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e) {
frm = new Form { Text = "jinjazz" };
frm.Activated += Form_Activated;
frm.Show();
frm.Location = new Point(this.Left + this.Width, this.Top);
SendMessage(this.Handle, WM_NCACTIVATE, WA_ACTIVE, 0);
}
void Form_Activated(object sender, EventArgs e) {
SendMessage(this.Handle, WM_NCACTIVATE, WA_ACTIVE, 0);
if (frm != null) SendMessage(frm.Handle, WM_NCACTIVATE, WA_ACTIVE, 0);
}
}
點擊按鈕開啟第二視窗,兩視窗標題列皆維持啟用顏色。