いつもお世話になっております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 です。
上記のエラーが起きる原因は、
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