国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序

這篇具有很好參考價(jià)值的文章主要介紹了WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在WPF中使用Winfom控件

首先要解決在WPF中如何使用Winfom控件的問(wèn)題,官方對(duì)此有支持的方式。

添加winform相關(guān)的程序集

在引用管理器中添加winfrom相關(guān)的程序集System.Windows.FormsWindowsFormsIntegration。

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序,WPF,wpf

在XAML頭中加入對(duì)這兩個(gè)程序集命名空間的引用

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

使用Winform控件

然后使用winform的控件,得在外面套一層WindowsFormsHost(好像添加了WindowsFormsIntegration,不使用wfi:也能使用)

<wfi:WindowsFormsHost Margin="0,0,400,73">
    <wf:TextBox />
</wfi:WindowsFormsHost>

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序,WPF,wpf

效果:

這樣就可以在WPF中使用Winform控件,但是不推薦,除非特殊情況。

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序,WPF,wpf

問(wèn)題

這種方式存在的問(wèn)題:

  • WindowsFormsHost依舊是顯示在最前,暫時(shí)沒(méi)找到解決方法,盡量從設(shè)計(jì)上避免

  • 后臺(tái)無(wú)法獲取到WindowsFormsHost內(nèi)部控件的名稱(chēng),只能通過(guò)WindowsFormsHost獲取內(nèi)部控件的句柄。

在Winfom控件中嵌入exe程序

準(zhǔn)備Winfrom控件

WindowsFormsHost中控件換成Panel

<wfi:WindowsFormsHost Name="WFHost" Margin="0,0,400,73">
    <wf:Panel  />
</wfi:WindowsFormsHost>

更換父窗體的句柄

將獲取主窗體句柄換成獲取Panel句柄,然后設(shè)置窗體大小跟WindowsFormsHost控件一樣

   //當(dāng)前窗體/容器(主程序)句柄
  IntPtr hwnd = WFHost.Child.Handle;
  //設(shè)置窗體位置和大小
  MoveWindow(appWin, 0, 0, (int)WFHost.ActualWidth, (int)WFHost.ActualHeight, true);

完整實(shí)現(xiàn)代碼:

上述功能完整實(shí)現(xiàn)的代碼如下
可以更新到上一篇的MainWindow的代碼中去。

           var exeName = "C:\\WINDOWS\\system32\\mspaint";
            //使用Process運(yùn)行程序
            Process p = new Process();
            p.StartInfo.FileName = exeName;
            p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
            p.Start();
            //獲取窗體句柄
            while (p.MainWindowHandle.ToInt32() == 0)
            {
                System.Threading.Thread.Sleep(100);
            }
            IntPtr appWin = p.MainWindowHandle;//子窗體(外部程序)句柄
            //當(dāng)前窗體/容器(主程序)句柄
            IntPtr hwnd = WFHost.Child.Handle;
           //設(shè)置父窗體(實(shí)現(xiàn)窗體嵌入)
            SetParent(appWin, hwnd);
            //設(shè)置窗體樣式
            var style = GetWindowLong(appWin, GWL_STYLE);
            SetWindowLong(appWin, GWL_STYLE, style & ~WS_CAPTION & ~WS_THICKFRAME);
            
            //設(shè)置窗體位置和大小
            MoveWindow(appWin, 0, 0, (int)WFHost.ActualWidth, (int)WFHost.ActualHeight, true);

實(shí)現(xiàn)效果:

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序,WPF,wpf

搞個(gè)Grid分多行和列,進(jìn)行拖動(dòng)操作,可以看到子窗體顯示區(qū)域限制在WindowsFormsHost 內(nèi)部了,拖動(dòng)變化子窗體不會(huì)超出顯示區(qū)域。

WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序,WPF,wpf

問(wèn)題和后續(xù)更新

子窗體實(shí)現(xiàn)大小還是固定的,沒(méi)有隨著控件變化實(shí)時(shí)調(diào)整,需要窗體或者控件調(diào)整大小重繪時(shí),使用MoveWindow刷新,以達(dá)到子窗體尺寸跟隨控件尺寸的大小,實(shí)現(xiàn)更好的嵌入。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-584073.html

到了這里,關(guān)于WPF嵌入外部exe應(yīng)用程序-使用Winfom控件承載外部程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【自動(dòng)化】在WPF應(yīng)用程序中使用MVVM框架實(shí)現(xiàn)Modbus協(xié)議通信

    Modbus是一種廣泛應(yīng)用于工業(yè)領(lǐng)域的通信協(xié)議,主要用于設(shè)備間的數(shù)據(jù)交換。在WPF應(yīng)用程序中,我們可以使用MVVM(Model-View-ViewModel)框架來(lái)實(shí)現(xiàn)Modbus協(xié)議的通信。本文將詳細(xì)介紹如何實(shí)現(xiàn)這一功能。 為了在WPF應(yīng)用程序中實(shí)現(xiàn)Modbus協(xié)議通信,我們需要安裝一些第三方庫(kù)??梢允褂?/p>

    2024年03月22日
    瀏覽(34)
  • C# WPF應(yīng)用使用visual studio的安裝程序類(lèi)的一些坑

    C# WPF應(yīng)用使用visual studio的安裝程序類(lèi)的一些坑

    否則會(huì)出現(xiàn)命名空間System.Configuration不存在Install的報(bào)錯(cuò) ? var s = Context.Parameters[\\\"assemblypath\\\"].ToString() 這個(gè)里面是當(dāng)前文件的路徑,所以需要?jiǎng)h除掉文件的名字才能獲取目錄路徑 var dir = s.Substring(0, s.LastIndexOf(\\\"\\\\\\\") + 1)

    2024年02月12日
    瀏覽(26)
  • pyinstaller打包exe應(yīng)用程序詳細(xì)教程

    pyinstaller打包exe應(yīng)用程序詳細(xì)教程

    1、PyInstaller簡(jiǎn)介 PyInstaller是一個(gè)跨平臺(tái)的Python應(yīng)用打包工具,支持 Windows/Linux/MacOS三大主流平臺(tái),能夠把 Python 腳本及其所在的 Python 解釋器打包成可執(zhí)行文件,從而允許最終用戶(hù)在無(wú)需安裝 Python 的情況下執(zhí)行應(yīng)用程序。 PyInstaller 制作出來(lái)的執(zhí)行文件并不是跨平臺(tái)的,如果需

    2024年02月11日
    瀏覽(29)
  • 如何簽署exe或Windows應(yīng)用程序?

    如何簽署exe或Windows應(yīng)用程序?

    本文您將了解為什么要簽署Windows應(yīng)用程序以及如何簽署EXE或Windows應(yīng)用程序的步驟指南。 代碼簽名是一種確保軟件來(lái)自經(jīng)過(guò)驗(yàn)證的正版軟件發(fā)行商的方法。使用代碼簽名證書(shū)唱WindowsEXE文件可確保可執(zhí)行文件或Windows應(yīng)用程序不會(huì)被惡意行為者更改或修改。 Windows應(yīng)用程序簽名過(guò)

    2024年02月09日
    瀏覽(28)
  • SpringBoot項(xiàng)目如何打包成exe應(yīng)用程序

    SpringBoot項(xiàng)目如何打包成exe應(yīng)用程序

    準(zhǔn)備工作: 一個(gè)jar包,沒(méi)有bug能正常啟動(dòng)的jar包 exe4j,一個(gè)將jar轉(zhuǎn)換成exe的工具 鏈接: https://pan.baidu.com/s/1m1qA31Z8MEcWWkp9qe8AiA 提取碼: f1wt inno setup,一個(gè)將依賴(lài)和exe一起打成一個(gè)安裝程序的工具 鏈接: https://pan.baidu.com/s/1m1qA31Z8MEcWWkp9qe8AiA 提取碼: f1wt 以我為例子,我將jar包放在了

    2024年02月04日
    瀏覽(21)
  • (二)WPF - 應(yīng)用程序

    (1) Application 對(duì)象被構(gòu)造出來(lái)。 (2)Run方法被調(diào)用。 (3)Application.Startup 事件被觸發(fā) (4)用戶(hù)代碼構(gòu)造一個(gè)或多個(gè) Window 對(duì)象。 (5)Application.Shutdow 方法被調(diào)用。 (6)Application.Exit 事件被觸發(fā)。 (7)Run 方法完成執(zhí)行。 初始化應(yīng)用程序有兩種方法 : 從 Application 對(duì)象的

    2024年02月10日
    瀏覽(21)
  • IDEA打包jar包,以及exe應(yīng)用程序。

    IDEA打包jar包,以及exe應(yīng)用程序。

    一、將IDEA中的java項(xiàng)目打包成jar包 ①點(diǎn)擊菜單欄中的文件→項(xiàng)目結(jié)構(gòu) ②在項(xiàng)目結(jié)構(gòu)窗口選擇工件。點(diǎn)擊添加,選擇jar,選擇來(lái)自有依賴(lài)項(xiàng)的模塊 ③在【從模塊創(chuàng)建JAR】對(duì)話(huà)框中,選擇主類(lèi),點(diǎn)擊確定 ④點(diǎn)擊確定。 ⑤點(diǎn)擊菜單欄中的構(gòu)建,選擇構(gòu)建項(xiàng)目 ⑥點(diǎn)擊菜單欄中的構(gòu)

    2024年02月08日
    瀏覽(24)
  • selenium-manager.exe應(yīng)用程序錯(cuò)誤解決辦法

    selenium-manager.exe應(yīng)用程序錯(cuò)誤解決辦法

    報(bào)錯(cuò)為: selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for firefox using Selenium Manager.; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location ? 個(gè)人解決辦法: 重新下載selenium-manager.exe并替換原文件即可 selenium-m

    2024年02月02日
    瀏覽(149)
  • WPF應(yīng)用程序生存期以及相關(guān)事件

    WPF應(yīng)用程序生存期以及相關(guān)事件

    ?WPF?應(yīng)用程序的生存期會(huì)通過(guò) Application 引發(fā)的幾個(gè)事件來(lái)加以標(biāo)記,相關(guān)事件對(duì)應(yīng)著應(yīng)用程序何時(shí)啟動(dòng)、激活、停用和關(guān)閉。 應(yīng)用程序生存期事件 ??獨(dú)立應(yīng)用程序(傳統(tǒng)風(fēng)格的 Windows 應(yīng)用程序,這些應(yīng)用程序作為要安裝到客戶(hù)端計(jì)算機(jī)并從客戶(hù)端計(jì)算機(jī)運(yùn)行的可執(zhí)行程序集

    2024年01月20日
    瀏覽(22)
  • exe程序,多屏模式下打開(kāi)應(yīng)用,應(yīng)用自動(dòng)在副屏開(kāi)啟,多用于大屏展示項(xiàng)目。

    exe程序,多屏模式下打開(kāi)應(yīng)用,應(yīng)用自動(dòng)在副屏開(kāi)啟,多用于大屏展示項(xiàng)目。

    在展廳大屏項(xiàng)目中我們經(jīng)常會(huì)用到一個(gè)電腦顯示器+大屏投影或者LED大屏顯示的情況,往往是電腦顯示器作為主屏控制軟件畫(huà)面開(kāi)啟,大屏作為拓展屏顯示軟件內(nèi)容,但是在開(kāi)啟軟件時(shí)會(huì)默認(rèn)顯示在主屏(電腦顯示器)上,通常的做法我們需要再將窗口畫(huà)面拖拽至副屏才可以顯

    2024年02月11日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包