首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WinForm 技巧:讓兩個視窗同時保持啟用狀態 (WM_NCACTIVATE)

     編輯:關於.NET

需求

預設 WinForm 單一啟用視窗,次視窗顯示時主視窗會失去焦點外觀。需兩個視窗同時呈現「啟用」標題列樣式。

解法:發送 WM_NCACTIVATE 訊息

攔截 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);
    }
}

點擊按鈕開啟第二視窗,兩視窗標題列皆維持啟用顏色。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved