0

デスクトップを記録するアプリケーションを構築する必要があります。デスクトップに線を描画して、デスクトップを記録していることをユーザーに通知します。記録が完了したら、線を消去したいと考えています。C#.net の Graphics を使用して線を描画します。以下のコードを確認してください。

IntPtr desktop = GetDC(IntPtr.Zero);
using (Graphics g1 = Graphics.FromHdc(desktop))
 {
   Pen blackPen = new Pen(Color.Orange, 10); 
   Point pleftTop = new Point(2, 1);
   Point pleftBottom = new Point(2, 765);
   g1.DrawLine(blackPen, pleftTop, pleftBottom); 
   Point pTopLeft = new Point(1, 3);
   Point pTopRight = new Point(1356, 3);
   g1.DrawLine(blackPen, pTopLeft, pTopRight); 
   Point pRight1 = new Point(1356, 1356);
   Point pRight2 = new Point(1358, 1);
   g1.DrawLine(blackPen, pRight1, pRight2); 
   Point pBottom1 = new Point(1, 765);
   Point pBottom2 = new Point(1356, 765);
   g1.DrawLine(blackPen, pBottom1, pBottom2);

   string text = string.Empty;
   int screenHeight = Screen.GetWorkingArea(this).Height;
   int screenWidth = Screen.GetWorkingArea(this).Width;
   text = "Recording your screen & audio";
   int centerWidth = ((screenWidth / 3));
   int opacity = 255; 
   g1.PixelOffsetMode = PixelOffsetMode.HighQuality;
   g1.DrawString(text, new Font("Arial", 15), new SolidBrush(Color.FromArgb(opacity,    Color.WhiteSmoke)), centerWidth, 0);
4

4 に答える 4

2

すべてのピクセルを格納する代わりに、デスクトップとそのすべての子ウィンドウ (つまりすべて) に再描画するよう通知するメッセージをブロードキャストすることもできます。デスクトップ全体に好きなようにペイントできるため、これはおそらく以前の提案よりもはるかに優れています。

const int RDW_INVALIDATE = 0x0001;
const int RDW_ALLCHILDREN = 0x0080;
const int RDW_UPDATENOW = 0x0100;
[DllImport("User32.dll")]
static extern bool RedrawWindow(IntPtr hwnd, IntPtr rcUpdate, IntPtr regionUpdate, int flags);
...
// Redraw the desktop and its children
RedrawWindow(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
于 2013-04-17T17:35:44.177 に答える
0

利用可能なもう 1 つのオプションは、 を使用することControlPaint.DrawReversibleFrameです。これは風変わりで、テキストを描画することはできませんが、この方法を実装するのは簡単です。デスクトップへのハンドルも必要ありません。

基本的に、XOR 操作で四角形を描画するため、同じ場所でもう一度呼び出すと、四角形が消去されます。四角形のピクセルのいずれかが最初の呼び出しと 2 番目の呼び出しの間に変更された場合、基になるウィンドウが再描画されるまで保持されるアーティファクトが得られることに注意してください。

于 2013-04-17T17:13:10.807 に答える