はじめまして。
VB6で疑問がありましたので質問させていただきます。
formのcaption(タイトルバーの文字列)を、formを表示した状態で変更し、
その後formを最小化した場合の動作についてです。
formにボタン(Command1)を配置し、Clickイベントに以下のコードを書きました。
Private Sub Command1_Click()
Me.Caption = "Captionを変更しました"
End Sub
このformを別formからモーダル(vbModal)でshowした場合、
Command1を押す前にformを最小化すると、formは最小化されてデスクトップ
左下に存在します。
ところがCommand1を押してタイトルバーの変更を行ってから、formを最小化
するとこのformが行方不明になってしまいます。
Alt+Tabで探すと出て来ますし、このformを呼んだformをクリックすると何故か
最小化されたフォームがタスクバーに出てくるのですが、モーダルで呼ぶ前に
呼び出し元formをhideで隠すと、Alt+Tabでしかformを出現させる方法がなくなって
しまいます。
formをモードレスでshowした場合はこのような現象は起きません。
このような現象は何故起こるのでしょうか。
根本的に、自分自身のcaptionを変更するのは問題があるのでしょうか。
何かご存じの方がいらっしゃいましたらご教授よろしくお願いします。
環境は
Windows2000
VB6.0 SP5
です。
こばっぴ さんの条件で動作を確認してみました。
今まで、そんな動作をするなんて気にもしてませんでしたが
確かに予想外の動作をしてますね。
どうやら原因は、FormのCaptionプロパティを変更すると、
Form(Window)の拡張スタイルに WS_EX_APPWINDOW が追加(OR)
されてしまう(仕様の)ようです。
WS_EX_APPWINDOW はタスクバーに表示する/しないを指定する
拡張スタイルですので上記のような動作をします。
ちなみにModelessでフォームを開くと、最初からWS_EX_APPWINDOW
が拡張スタイルに設定されています。
uchiさん、ありがとうございます。
確かに、モーダルで開いたFormでは、Caption変更前はタスクバーに入らず
デスクトップ上で最小化するのに対し、Caption変更後はタスクバーに入る
ようになりますね。
uchiさんのおっしゃる通り、Caption変更時にこちらが意図していない
「タスクバーへ入る/入らない」も変更されているようです。
タスクバーに入るようになってもいいのですが、変更後の最初の最小化で
行方不明になってしまうのが問題です。。。
回避策として、FormのShowInTaskbarプロパティをFalseにしてみました。
その結果、Caption後もタスクバーに入らなくなり、最小化の際に行方不明に
なることもなくなりました。
uchiさんのおかげで回避策が見つかり大変感謝しております。
ツイート | ![]() |