1. 程式人生 > >C# Winform 窗體美化(九、嵌入窗體)

C# Winform 窗體美化(九、嵌入窗體)

九、嵌入窗體

還是關於 Winform 窗體的一些操作問題,這次是研究了一個嵌入窗體,這次學習純屬偶然,專案中確實沒遇到過這種需求。就是把別人的程式嵌入到自己的程式中,就像這樣:

這裡我嵌入了測試顯示器的程式
嵌入程式效果圖

關於嵌入程式的資料,上面連結部落格的作者寫的非常詳細了,而且也整理了相關的程式碼,可以下載學習。

這裡我自己也整理學習了一下,有需要可以下載。原始碼下載

嵌入過程主要程式碼

private void EmbedProcess(Process app, Control control)
{
    //驗證程序和控制元件非空
    if (app == null || app.MainWindowHandle == IntPtr.Zero || control == null
) return; try { //核心程式碼:嵌入程式 SetParent(app.MainWindowHandle, control.Handle); } catch (Exception) { } try { //移除嵌入的視窗的視窗標題欄 SetWindowLong(new HandleRef(this, app.MainWindowHandle), GWL_STYLE, WS_VISIBLE); } catch (Exception) { } try { //將嵌入的視窗歐放置到合適位置,填滿寬高
MoveWindow(app.MainWindowHandle, 0, 0, control.Width, control.Height, true); } catch (Exception) { } }

效果圖

這裡可以看到嵌入程式的三個步驟:
1. 嵌入程式
2. 移除嵌入的視窗的視窗標題欄
3. 將嵌入的視窗歐放置到合適位置,填滿寬高

截圖感受一下:
1.嵌入程式
第一步

2.移除嵌入的視窗的視窗標題欄
第二步

3.將嵌入的視窗歐放置到合適位置,填滿寬高
第三步

疑問

最後還是有一些疑問沒有解決:
1. 焦點的問題;
2. 有些應用不能被嵌入;
3. 有些應用嵌入位置可能出現異常;