- 締切済み
フォームの最大化
MDIフォームを使ってchild formをいくつか表示しています。 設計段階でchild formのwindowstateを最大化に設定していますが最大化に設定したフォーム以外のフォームを表示したときに最初に最大化されて表示していたフォームが自動的に小さくなってしまいます。フォームの最大化を固定するにはどのようにすればよいのでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
どもども、再び田吾作7です。 ぼくの知っている限りでは、常に最大化というのはMDIFormの子である限り、出来ません。(Windowsの仕様だと思うし・・・・) 「MDIFormの子もどき」とするのであれば可能です。 もどきというのは実際は子ではないのです。 手順を簡単に記すと(APIばっかりですが・・・) 1.MDIFormを開く 2.FindWindowExでMDIClient領域のハンドルを得る(クラス名="MDIClient") 3.常に最大化したいフォームを開く([MDIChild = False]) 4.SetParentにてそのフォームをMDIClient領域が親になるようにする。 5.SetWindowLong(MDIFormWnd,GWL_WNDPROC,AddressOf オリジナル関数名)でウィンドウズのメッセージを監視する(プロセス監視) 6.サイズ変更終了時に最大化したいフォームの最大化時のサイズをセットする (API忘れた・・・) 7.最大化のメッセージを送るSendMessage ってな感じです。 もしこの方法を使用するのであれば、本来のMDIの子達の上に常に表示されてしまうので、子は使えません。よって、子を作成するには手順1から手順4を使用して、子を作成しなくてはいけません。さらに、MDIFormのメッセージをもっといろいろな種類を拾って、各子達を制御しなくてはならなく、また子達のメッセージも拾わなくてはいけなくなります。 これをやってたら大変ですよ。 ですので、プログラムの仕様の変更か、もしくはNo1の回答の手順を行うのがベストだと思います。 でわでわ
- TAGOSAKU7
- ベストアンサー率65% (276/422)
どもども田吾作7です 常に最大化というのは。。。 アクティブになった時に最大化してはだめですか? Private Sub Form_Activate() Me.WindowState = vbMaximized End Sub それがだめなら、 Private Sub Form_Activate() Me.Left = 0 Me.Top = 0 Me.Width = MDIForm1.ScaleWidth Me.Height = MDIForm1.ScaleHeight End Sub というように、MIDFormの表示領域いっぱいにサイズを指定して、 最大化に近いサイズで表示するとか? フォームを「BorderStyle=無し」にしてしまえば、ユーザからサイズの変更を されることもないし、、、 このとき注意すべきは、MDIFormのResize時にも、 このような最大化もどきを行うコードを実行しなければ ならないことです。 やっぱ反則? でわでわ
お礼
>ぼくの知っている限りでは、常に最大化というのはMDIFormの子である限り、出来ません。(Windowsの仕様だと思うし・・・・) やはり、仕様の問題でしょうか。 どんなことを試してもだめだったので質問してみたのですが、やはりそうなのでしょうね。 一度、教えていただいた手法でがんばってみます。