zoukankan      html  css  js  c++  java
  • 让顶层窗体不无激活但能正常使用

    http://blog.csdn.net/thirdapple/article/details/2755684

    附件 http://files.cnblogs.com/xe2011/CSharpWinForm_WM_NCACTIVATE.rar

    image

    这个效果就像 你单击Combobox 下拉按钮或者菜单 主窗体不会失去焦点一样

    Form1

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f = new Form2();
                f.TopMost = true;
                f.Show();
            }
        }
    }

    Form2

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
    
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            private extern static IntPtr SetActiveWindow(IntPtr handle);
            private const int WM_ACTIVATE = 0x006;
            private const int WM_ACTIVATEAPP = 0x01C;
            private const int WM_NCACTIVATE = 0x086;
            private const int WA_INACTIVE = 0;
            private const int WM_MOUSEACTIVATE = 0x21;
            private const int MA_NOACTIVATE = 3;
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_MOUSEACTIVATE)
                {
                    m.Result = new IntPtr(MA_NOACTIVATE);
                    return;
                }
                else if (m.Msg == WM_NCACTIVATE)
                {
                    
                    if (((int)m.WParam & 0xFFFF) != WA_INACTIVE)
                    {
                        if (m.LParam != IntPtr.Zero)
                            SetActiveWindow(m.LParam);
                        else
                            SetActiveWindow(IntPtr.Zero);
                        return;
                    }
                   
                }
                base.WndProc(ref m);
            }
    
        }
    }
  • 相关阅读:
    hero
    今年暑假不AC
    Who's in the Middle
    A Simple Problem with Integers
    I hate it
    敌兵布阵
    Ordering Tasks
    Points on Cycle
    食物链
    c++ 14.0下载地址
  • 原文地址:https://www.cnblogs.com/xe2011/p/3445411.html
Copyright © 2011-2022 走看看