アプリ版:「スタンプのみでお礼する」機能のリリースについて

MDIフォームを使ってchild formをいくつか表示しています。
設計段階でchild formのwindowstateを最大化に設定していますが最大化に設定したフォーム以外のフォームを表示したときに最初に最大化されて表示していたフォームが自動的に小さくなってしまいます。フォームの最大化を固定するにはどのようにすればよいのでしょうか。

A 回答 (2件)

どもども、再び田吾作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の回答の手順を行うのがベストだと思います。

でわでわ
    • good
    • 0
この回答へのお礼

>ぼくの知っている限りでは、常に最大化というのはMDIFormの子である限り、出来ません。(Windowsの仕様だと思うし・・・・)

やはり、仕様の問題でしょうか。 どんなことを試してもだめだったので質問してみたのですが、やはりそうなのでしょうね。
一度、教えていただいた手法でがんばってみます。

お礼日時:2001/07/11 17:30

どもども田吾作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時にも、
このような最大化もどきを行うコードを実行しなければ
ならないことです。

やっぱ反則?

でわでわ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!