是否可以在WPF窗口內嵌入控制檯窗口?在WPF窗口內嵌入控制檯窗口
作爲一個小小的背景,起初我試圖在WPF中從頭開始實現一個控制檯窗口,除了一個巨大的問題 - 它的速度非常慢之外,它是成功的。看到這裏的問題是:
VT100 Terminal Emulation in Windows WPF or Silverlight
因爲這似乎不是一種選擇,我不是看在我的WPF應用程序,我已經學會了如何在此描述做託管的實際控制檯窗口:
No output to console from a WPF application?
這是偉大的,由最好我想有一個控制檯窗口看起來像它是WPF應用程序的其它部分的一部分。我知道使用WinForms應用程序是可能的,因爲我已經看到它完成了,包括使用SetParent Win32 API。你可以看到一個例子.NET項目與嵌入一個控制檯窗口進入殼體這個命令欄項目做的:
http://www.codeproject.com/KB/cs/commandbar.aspx
所以我希望它可以用WPF做的很好,但我沒有想法你會怎麼做。非常感謝幫助(另外,如果你有任何明智的解決方案來解決我在WPF中從零開始創建終端窗口的原始問題,因爲這也解決了我的需求)。
UPDATE:
的幫助裏德·科普塞的幫助下,我能得到嵌入在控制檯窗口。然而,當然它需要被設計和移動,否則它看起來像一個WPF窗口內的常規控制檯窗口。我需要標題欄和大型邊框。做研究我想出瞭如何使用Win32 API來做這樣的事情:
uint style = GetWindowLong(ConsoleManager.ConsoleWindowHandle, GWL_STYLE);
style &= ~(uint)WindowStyles.WS_CAPTION;
style &= ~(uint)WindowStyles.WS_THICKFRAME;
style &= ~(uint)WindowStyles.WS_DLGFRAME;
style &= ~(uint)WindowStyles.WS_POPUP;
SetWindowLong(ConsoleManager.ConsoleWindowHandle, GWL_STYLE, style);
MoveWindow(ConsoleManager.ConsoleWindowHandle, 0, 0, (int)WindowsFormsHost.ActualWidth, (int)WindowsFormsHost.ActualHeight, true);
但是有一個大問題。出於某種原因,控制檯窗口有一個渲染工件。就好像它不是在左下角和右上角重新繪畫一樣。工件的寬度與標題欄和厚邊框的寬度相似,事實上,如果我將工件大小的厚邊框留下,則會出現問題。但重新繪製它不會有幫助,因爲它重新出現。我可以,例如,移動窗口關閉屏幕並再次修復它,但它很快就重新出現在自己:
rendering artifact http://img837.imageshack.us/img837/6241/renderissue.png
更新2:即使我沒有影響情況將它父進入WindowsFormsHost控件。我需要做的就是啓動控制檯(使用AllocConsole()),然後使用SetWindowLong刪除它的標題欄。這是一臺win7機器。
UPDATE 3:它似乎'搞亂'與這樣的其他窗口不支持。控制檯窗口計算其textarea假設有一個標題,所以沒有辦法解決這個問題。我認爲我唯一的選擇在WPF中獲得類似控制檯的行爲將是編寫一個自定義的WinForms控件,然後將其嵌入到WPF中。
你做到這一點成功? – 2012-06-24 03:24:01
@ShawnMclean Nope ...更新代表整個故事:( – InfinitiesLoop 2012-06-24 04:22:58
)您可能會看到Console2(後來分爲ConsoleZ)程序,它們成功地在標籤控件中託管了一系列命令提示符,但沒有標題/標題 – 2016-06-14 08:16:35