2011-03-01 42 views
2

目標:對於個人項目,我想用全屏命令行,十六進制編輯器,文本編輯器等來模擬一個老式的計算機界面。所有文字,無圖形。 (對於假想的計算機的模擬器/仿真器)C#+ WPF:文本模式相當於舊DOS庫或詛咒

起點:我已經發現控制檯模式不能被全屏瀏覽,但是我可以輕鬆地在WPF中使用WindowState = Maximized進行全屏顯示, WindowStyle =無。所以我可以製作一個全屏的TextBox。

問題:是否有一個現有的控件,模式或庫,用於基本寫入文本屏幕和從鍵盤讀取數據(而不是填寫和提交表單上的字段,比如文本框面向)?

我假設我需要製作自己的自定義控件而不是文本框,並構建一大類低級方法來定位光標,輸出字符,對輸入做出反應等。但是如果有一個經過驗證的方法或標準方法,我寧願用燃燒時間來重新發明一個常用的車輪。在過去的DOS時代,我會使用基於直接BIOS視頻調用,PEEK和POKE到視頻RAM以及鍵盤和鼠標輪詢的庫。當然,這不再適用,但標準控制檯例程也不適用。那裏已經有東西可以填補這個空白嗎?

澄清。在DOS時代,我們有東西像庫:

Scroll(3); 
Write(24,1, "Your command has been queued for execution"); 
input = Prompt(25, 1, "Enter a command>"); 

,並在文檔編輯模式下,我們會做這樣的事情

key = WaitKey(); 
switch (key) { 
    case PGUP: Scroll(-24); 
    case PGDN: Scroll(24); 
    case LEFT: MoveCursor(-1,0); 
    case DOWN: MoveCursor(0,1); 
    // ... 
} 

等......這是諸如此類的事情,我正在尋找。有東西寫類,滾動提示等功能

+0

+1看到你的程序一旦完成就會很有趣! =)Winforms的確有一個脫口秀課程,也許有一個WPF版本。,或者WPF控件的構建方式(不知道),你可以改變光標的外觀。 :http://msdn.microsoft.com/en-us/library/system.windows.forms.visualstyles.visualstyleelement.textbox.caret.aspx – gideon 2011-03-01 05:31:05

回答

1

這聽起來像你正在開發的是更接近於一個遊戲比一個標準的Windows窗體應用程序 - 使用遊戲開發庫(如SDL或Microsoft XNA)可能使事情更加直截了當。

如果您已經熟悉了舊式控制檯運行的方式,那麼實現這一點應該非常簡單 - 您可以在屏幕上顯示您的屏幕後面的字符數組+應該顯示的遊標位置結構很容易在每個畫面上打印到屏幕上,再加上一個遊戲庫可以讓你截取和處理所有鍵盤事件。

如果您打算將另一個進程的輸出路由到這個「屏幕」上,那麼事情可能會變得更加棘手 - 如果情況如此,那麼這可能不是最好的主意。

+0

我曾考慮過尋找一個遊戲庫。但我並不打算花哨的3-D實時渲染,只是80年代基本的純文本模式操作。奇怪的是,我認爲現在我可能需要一個高水平的現代遊戲庫來做到這一點。但也許這將是最簡單的方法...... – Ray 2011-03-01 05:48:48

+0

@Ray:你不需要*高級別的遊戲庫,但它確實會讓事情變得更加容易。但是,當您將WPF應用程序變成XNA應用程序時,您將無法添加諸如JumpList等等。也許對於終端來說不是最重要的事情,但很高興知道您放棄了什麼。那並不是說XNA不好或什麼。它只是一個不同的庫被設計用於不同的事情。 – Kredns 2011-03-01 05:57:56

+0

@Ray它取決於遊戲庫(我是SDL的粉絲,它幾乎完全基於2D圖形),它只是讓遊戲庫爲您提供對圖形的完全控制 - 想要在WPF中實現同樣的功能有點不尋常,所以它可能有點棘手。 – Justin 2011-03-01 05:59:59

1

嘗試使用WPF文本框實現文本模式應用程序的外觀(和響應)將會產生令人失望的結果。看看皮特布朗在WPF和Silverlight中創建了Commodore 64 emulator後做了什麼。

我相信他的實現實際上使用了一個可寫的位圖來模擬視頻卡。所以你提到的窺視和噗聲實際上會發生在內存緩衝區而不是屏幕上,然後它會逐幀地變成一個屏幕圖像。