全画面表示からの復帰

[戻る]
Kon 2008/04/01(火) 21:14:35
いつもお世話になっておりますKonです。よろしくお願いします。

PCはWinXP、Visual C++ 2005 Express Edition を使用しています。
Windowsフォームアプリケーション でプロジェクトを作成しています。

ボタンを押すと全画面表示になり、Escキーで復帰する
というプログラムを作っていますが、
復帰時の表示が、完全に元に戻らずに困ってます。


下記の2つの関数で、全画面表示と通常表示を切り替えています。
Form の上には Panel。Panel の上には pictureBox が乗っていて、
Panel の AutoScroll は true;です。

private: System::Void fullScreenk(System::Object^  sender, System::EventArgs^  
e)
{
 this->statusStrip->Visible = false;
 this->toolStrip->Visible = false;
 this->menuStrip->Visible = false;
 this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;
 this->WindowState = System::Windows::Forms::FormWindowState::Maximized;
}
private: System::Void Form1_KeyDown(System::Object^  sender, 
System::Windows::Forms::KeyEventArgs^  e)
{
 if ( e->KeyCode == Keys::Escape){
  this->statusStrip->Visible = true;
  this->toolStrip->Visible = true;
  this->menuStrip->Visible = true;
  this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Sizable;
  this->WindowState = System::Windows::Forms::FormWindowState::Normal;
 }
}

で、どう戻らないのかというと、ちょっと分かり難いと思うのですが・・・
全画面表示で、Panel より pictureBox が大きくなる状態のとき、
スクロールバーを下げたまま、Escで復帰すると、
スクロールバーが、一番上に無いのに、pictureBox の左上が表示され、
結果、pictureBox の上端と、Panel の上端がずれてしまうのです。

スクロールバーの位置を上端に戻さないままなのが原因かとも思うのですが、
どなたか良い方法をご存じでは無いでしょうか?

Kon 2008/04/02(水) 12:58:00
[[解決]]
Kon です。

上記のエラーが起きる原因は、
Form の Resize イベントで、

if (pictureBox_main->Width > panel_main->Width) w = 0;
if (pictureBox_main->Height > panel_main->Height) h = 0;
this->pictureBox_main->Location = System::Drawing::Point(w, h);

という処理が走るために起きていました。
これは、画像を常に中央に表示させたいために記述しているものです。
この部分を、

w = panel_main->AutoScrollPosition.X;
h = panel_main->AutoScrollPosition.Y;

として、スクロールバーの位置だけずらして表示することにしました。
お騒がせしました。m(_ _)m

古いスレッドには追加発言できません。