Troszkę odbiegnę od tematu doprecyzowując wypowiedź ROB'a jeśli chodzi o przyrządy. Mam nadzieję, że nic nie pokręciłem, bo piszę to jako 100% teoretyk, czyli odwrotnie niż ROB.

Podobnie jak z modelem 3D samolotu i jego modelem lotu, rzecz dzieli się na wizualizację i logikę działania.
Zakładając, że mamy już odpowiednie grafiki, wizualizacja może być wykonana za pomocą XML'a (najprostrze), animowanych modeli 3D (trudniejsze), badź C++ (overkill w przypadku zegarów analogowych, ale jedyne wyjście jeśli piszemy MFD). Logika działania może być w XML bądź C++, niezależnie od tego którą metodę wybraliśmy do prezentacji zegara.
XML jest dobry gdyż jak ROB zauważył, nie trzeba być programistą żeby go ogarnąć. Wszystko jest w nim w miarę proste, kod można przeczytać i od razu wiadomo o co chodzi.... prawie. FS symuluje działanie systemów samolotu w zakresie jaki jest widoczny we wbudowanych maszynach. Czyli bateria, iskrowniki, generatory, etc. Dostęp i operacje na tych systemach są bardzo proste w realizacji, prawie natychmiastowe. FS sam się martwi żeby wyłączyć radio gdy wyłączymy awionikę albo gdy wyłączymy baterię, albo gdy wyłączymy baterię i generatory w przypadku gdy silniki pracują. Schody zaczynają się, gdy chcemy zrobić coś czego nie ma w standardzie, na przykład system hydrauliczny którego FS gotowego nie dostarcza, bądź system elektryczny który działa inaczej niż ten w FS'ie. Cały mechanizm działania (pompy hydrauliczne, reakcję sterów w zależności od ciśnienia w instalacji, zmiany ciśnienia w instalacji w zależności od obciążenia, obwody hydrauliczne, wartości ciśnienia itp) trzeba gdzieś napisać. No i zonk. Wyrażenia logiczne w XML'u wyglądają na przykład tak:
Attitude Indicator%((A:ATTITUDE INDICATOR BANK DEGREES, degrees) s0 abs s1)%((A:ATTITUDE INDICATOR PITCH DEGREES, degrees) s2 abs s3)%(l1 l3 + 0.99 >)%{if} (%{end}%(l1 l0 0.99 >)%{if}Bank %!d!° Left%{else}%(l1 l0 -0.99 <)%{if}Bank %!d!° Right%{end}%{end}%(l3 0.99 >)%{if}%(l1 0.99 >)%{if}, %{end}%{end}%(l3 l2 0.99 >)%{if}Pitch %!d!° Down%{else}%(l3 l2 -0.99 <)%{if}Pitch %!d!° Up%{end}%{end}%(l1 l3 + 0.99 >)%{if} )%{end}
A jest to po prostu kod używany przez tooltip dla sztucznego horyzontu, wyświetlający na przykład "Bank 4° left, Pitch 5° up". Odwrotna notacja polska używana w wyrażeniach arytmetycznych i instrukcjach warunkowych (if ... then ... else) plus to XML że wymaga innego podejścia niż standardowe języki programowania sprawiają, że jest to ciężkie narzędzie do tworzenia skomplikowanych systemów.
C++ to mnóstwo makr, flag, i niezrozumiałych dla śmiertelników konstrukcji, które są bo są, przynajmniej taki wniosek wyciągnąłem po lekturze SDK. Ale jeśli przebrnie się przez to, to samo zrobienie instalacji paliwowej czy hydraulicznej Łosia to bułka z masłem, pod warunkiem że wie się, jak to kiedyś działało.
Najlepszym wyjściem jeśli tworzymy zaawansowane oprzyrządowanie samolotu, jest miks XML'a i C++. XML odpowiada za wizualizację płaskich zegarów 2D, bądź definicje animacji obiektów 3D (wskazówek zegarów i wihajstrów). Natomiast cała reszta jest zakodowana w C++ i podłączona jako dll do symulatora.
SimConnect nie jest wymagany przy tworzeniu zegarów w C++, aczkolwiek jego użycie jest możliwe, jeśli chcemy zapewnić sobie dostęp do pewnych nowych funkcji i większą interakcję samolotu z samym FS'em.