title: How should I create a custom graphical console/terminal on Windows?
body: <p>The Windows console interface (think <code>cmd</code> window) is to the user a pretty simple GUI. The level of efficiency with which it handles rendering, user input, and scrolling is however very high. The methods used to create this interface are undoubtedly quite different to those of a traditional desktop GUI.</p>
  
  <p>I am interested in creating my own custom console/terminal for Windows, preferably using C# and .NET-based technologies (e.g. managed GDI+ or WPF). As a starting point, I'd be quite keen simply to recreate the standard simple Windows shell. I could then expand things and add features from there.</p>
  
  <p>I'm looking for general guidance on how to go about creating such a console UI, but some specific points include:</p>
  
  <ul>
  <li><p>What sort of rendering model should I use? A render loop? Partial updates (like WPF)? The WinForms model (not sure how this works)?</p></li>
  <li><p>What sort of caching is used in the rendering model?</p></li>
  <li><p>How are fonts loaded and how are they rendered? Are they standard TrueType fonts, bitmap fonts, or something else?</p></li>
  <li><p>How is scrolled performed so efficiently?</p></li>
  <li><p>Anything else you think might be relevant!</p></li>
  </ul>
  
  <p>Any explanation of how the inbuilt Windows console UI (or even the superior Linux terminal UI) do these things - and how I could emulate them - would be ideal, in fact.</p>
  
  <p>Edit: To be clear, I really want to do this completely from scratch. Based on a graphical framework like GDI+ or WPF, but no more.</p>