0

これが私のコードです:

private void button1_Click(オブジェクト送信者, EventArgs e) { for (int i = 1; i < Application.OpenForms.Count; i++) { if (Application.OpenForms[i].WindowState == FormWindowState.Minimized) {

Application.OpenForms[i].WindowState = FormWindowState.Normal; using (var bmp = new Bitmap(Application.OpenForms[i].Width, Application.OpenForms[i].Height)) { Application.OpenForms[i].DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); bmp.Save(@"d:\Duong\" + Application.OpenForms[i].Text + ".png"); } Application.OpenForms[i].WindowState = FormWindowState.Minimized; } else { using (var bmp = new Bitmap(Application.OpenForms[i].Width, Application.OpenForms[i].Height)) { Application.OpenForms[i].DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); bmp.Save(@"d:\Duong\" + Application.OpenForms[i].Text + ".png"); } } } }

各 Application.OpenForms[i] には MdiParent があります。それらのいくつかが最小化され、いくつかがアクティブになっているときに、ボタンをクリックしてスナップショットを取得すると、各フォームのすべての画像が取得されました。ただし、最小化されたフォームは、最小化に戻る前に点滅していました。WindowState から問題が発生していることはわかっていますが、スナップショットが表示されない場合はどうすれば取得できますか?..助けてください.API GDI+ に関するトピックを見てきました..しかし、それらはウィンドウの最小化されたアプリケーションに関するものです。今すぐ必要なのは私のフォームであり、それは子供です。ありがとう

4

3 に答える 3

0

試してみてください:

  • 一時停止フォーム描画
  • スナップショットを撮ります
  • フォーム描画を再開する

SendMessageWM_SETREDRAWを使用して、描画を一時停止/再開できます。

For サイクルの前にコントロールの描画を中断し、コードの最後で描画を再開します。Try/Catch ブロックを使用し、Finally セクションに再開描画を含めることをお勧めします。

描画を中断するには:

SendMessage(ctrlControl.Handle, WM_SETREDRAW, 0, 0)

描画を再開するには:

SendMessage(ctrlControl.Handle, WM_SETREDRAW, 1, 0)
ctrlControl.Refresh()

ctrlControl は任意のコントロールにすることができます。あなたの場合、MDI コンテナーを使用することをお勧めします。

于 2013-06-20T09:03:51.267 に答える
0

これにより、最小化されたウィンドウが復元され、所有されている他のすべてのアプリケーション ウィンドウのスナップショットも作成されます。

private void button1_Click(object sender, EventArgs e)
{

System.Collections.IEnumerator myEnumerator = Application.OpenForms.GetEnumerator();
while (myEnumerator.MoveNext())
{
    Form current = (Form)myEnumerator.Current;
    if (current.WindowState == FormWindowState.Minimized)
    {
        current.WindowState = FormWindowState.Normal;
        current.Activate();
        Application.DoEvents();
        SaveToFile(current); 
        current.WindowState = FormWindowState.Minimized;
        Application.DoEvents();
    }
    else
    {
        current.Activate();           
        Application.DoEvents();                
        SaveToFile(current); 
    }
}

}

private void SaveToFile(Form form)
{
    using (var bmp = new Bitmap(form.Width, form.Height))
    {
        form.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
        bmp.Save(@"c:\temp\childwindows\" + form.Text + ".png");
    }
}

これが役立つことを願っています。よろしく。

于 2013-06-20T09:55:07.230 に答える