誰かが vc から c# カスタム コントロールを作成する方法に光を当てることができますか? デフォルト コントロールのような C# プロジェクトで使用されるグラフィカル コントロールを作成する必要があります。これは、パフォーマンスが重要であり、パフォーマンスの低い Windows CE デバイス上にあるためです。c/cpp で行う必要があると思います。
3 に答える
シンプルで率直な答えは、できないということです。限目。Compact Framework はマネージ C++ (C++/CLI) をサポートしていません。ここで、UI コンポーネントを COM コントロールとして作成し、マネージ側のすべての COM インターフェイスを手作業で作成できると思いますが、それはビルド、デバッグ、特に展開するのに悪夢です。
安全でないコードにドロップし、C# コードで目的の Win32 API に対して P/Invokes を使用する方がよいでしょう。ほとんどの場合、目的を達成し、優れたパフォーマンスを得ることができます。速度のために絶対に C で実行する必要がある場合は、P/Invoke を介してバッファーに渡すライブラリを作成します。たとえば、Imaging ライブラリは、このタイプのメカニズムを使用してサムネイルなどを作成します。
Cで完全なコントロールを作成し、C#などから制御する必要があるものを公開する非常に薄いラッパーを提供することができます。フォームコントロールについて話している場合、必ずしもUserControlまたはControlのモデルに従う必要はありません。これは、正しく理解するのがやや複雑であり、これらのコントロールにすべてのコストがかかる場合です。その非常に厳しい。
また、管理側でより多くのことを実行しようとするWPFを調査して、より高速にすることもできます。それはそれ自身の合併症を持っています。それは通常それ自体でかなり巧妙に合成/「ビットブリット」しますが、しばしば船外に出ますが、最終的にはダブルバッファモードで同じ合成を行うダブルバッファフォームコントロールよりもはるかに高速です(または可能性があります)。ただし、フェイクウィンメッセージの処理が急増すると遅くなります。(大幅に単純化しすぎるため)
だから、単にノーと言うのではなく、それらがあなたの選択肢だと思います。繰り返しになりますが、腕の長さで制御し、適切に記述されたC側のレンダリングを実行して、ネイティブパフォーマンスに近づけることができます。
編集:
質問のWindowsCEの部分を見逃しました。私の悪い。私が言ったことが当てはまるかどうかはわかりません。
Silverlight ではなく、WinForms について話していると思います。
その必要はありません。
Windows CE 上の .NET は CIL の JIT を実行します (従来の Java のように解釈する Micro Framework とは異なります)。C# でコントロールを記述しても、実際にパフォーマンスが低下することはありません。最もコストのかかる操作はペイントです。C# または C++ を使用する場合は、GDI を使用してこれを行うことになります。高価な操作が存在するのは GDI の関数呼び出しの内部です。節約できる唯一のことは、Managed と先住民の領土ですが、それは実際にはほとんど意味がありません.
C++ を使用して Windows CE GUI を作成する必要がある唯一の状況は、ビデオまたはアニメーション フレームワーク (Flash など) を使用している場合であり、その場合は C++ を完全に使用し、.NET は使用しません。あなたのGUIのために。