Dockfill在MSTSC ActiveX控件中不起作用

问题描述

我正在尝试在WPF中创建rdp。我使用AxmsTSCLib库在wpf应用程序中创建了rdp客户端。我计划创建一个托管rdp的用户控件,并通过以下代码实现了它。 但是我可以看到Windows主机的灰色区域。我需要为rdp客户端填充Windows主机的大小。

 public partial class RDPUserControl : UserControl
    {
        internal RDPActiveXControl _rdp;
        internal string Servername { get; set; }
        internal string Username { get; set; }
        internal string Password { get; set; }
        internal TabItem TabItem { get; set; }
        public RDPUserControl()
        {
            InitializeComponent();
        }
 
        private void InitData()
        {
            _rdp = new RDPActiveXControl();
            ((System.ComponentModel.ISupportinitialize)(_rdp)).BeginInit();
            _rdp.Name = "rdp";
            _rdp.Enabled = true;
            wfHost.Child = _rdp;
            ((System.ComponentModel.ISupportinitialize)(_rdp)).EndInit();
        }

        internal void Connect()
        {
            _rdp.Server = Servername;
            _rdp.UserName = Username;
            _rdp.AdvancedSettings7.ClearTextPassword = Password;
            _rdp.ColorDepth = 24;
            _rdp.AdvancedSettings7.SmartSizing = true;
            _rdp.AdvancedSettings7.AuthenticationLevel = 2;
            _rdp.AdvancedSettings7.EnableCredsspSupport = true;
            _rdp.Width = Convert.ToInt32(this.ActualWidth);
            _rdp.Height = Convert.ToInt32(this.ActualHeight);
            _rdp.DesktopWidth = Convert.ToInt32(this.ActualWidth);
            _rdp.DesktopHeight = Convert.ToInt32(this.ActualHeight);
            _rdp.Ondisconnected += _rdp_Ondisconnected;
            try
            {
                _rdp.Connect();
            }
            catch(Exception e)
            {
                MessageBox.Show("Connection Failed: "+e.Message);
            }
        }

        private void _rdp_Ondisconnected(object sender,AxmsTSCLib.imsTscAxEvents_OndisconnectedEvent e)
        {
            MainWindow window = Application.Current.MainWindow as MainWindow;
            Page page = window._mainFrame.Content as Page;
            ConnectionsPage connectionPage = page as ConnectionsPage;
            connectionPage.CloseTab(TabItem);
        }

        private void Button_Click(object sender,RoutedEventArgs e)
        {
            InitData();
            Connect();
        }
    public class RDPActiveXControl : AxmsTSCLib.AxmsRdpClient6NotSafeForScripting
    {
        public RDPActiveXControl() : base() { }

        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            // Fix for the missing focus issue on the rdp client component
            if (m.Msg == 0x0021) // WM_MOUSEACTIVATE
            {
                if (!this.ContainsFocus)
                {
                    this.Focus();
                }
            }

            base.WndProc(ref m);
        }

    }

如何使RDP ActiveXControl完全适合windowsFormHost

enter image description here

我尝试过

_rdp.Dock = System.Windows.Forms.DockStyle.Fill;

但是它会使应用程序消失。任何人都知道这是怎么回事?任何可行的示例都会有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)