Revit二次开发番外篇之窗体切换焦点

=========【更多高级应用请关注公众号】========


===================================

做好的非模态窗体,设置好参数输入后,点击按钮命令后,Rveit没有立刻进入到激活状态,怎么解决呢?,那么出现这种问题的原因是,我们做的非模态窗体在执行相应命令后,窗体并没有关闭或是隐藏,就一直处于激活状态,导致Rveit不能立刻激活或者拿到焦点,解决办法如下:我们可以使用WindowsAPI下的两个函数 GetActiveWindow(),SetActiveWindow(IntPtr hwnd),一个是获得当前系统获得焦点的窗体句柄,一个是设置当前系统某个窗体获得焦点,所以我们在窗体启动时获得这个当前的获得焦点的窗体句柄,这里假设此时Revit没有其他插件窗体占用焦点,那么我们获得的是Revit的句柄,如果想百分之百获得Rveit的窗体句柄的话,使用AdWIndows.dll资源下的方法就可以了,代码如下,只做示范:



using Autodesk.Revit.UI;
using Autodesk.Revit.DB;


namespace HelloWorld
{
    public partial class Form1 : System.Windows.Forms.Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("user32.dll")]
        public static extern IntPtr GetActiveWindow();
        [DllImport("user32.dll")]
        public static extern IntPtr SetActiveWindow(IntPtr hwnd);
        IntPtr active = IntPtr.Zero;
        private void Form1_Load(object sender, EventArgs e)
        {
           // active = GetActiveWindow();
            active = Autodesk.Windows.ComponentManager.ApplicationWindow;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            SetActiveWindow(active);
        }
  
    }
   
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值