MDIの最小化 – プログラミング – Home

通知
すべてクリア

[解決済] MDIの最小化


しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

度々お世話になります。

MDIで、プログラムを作成しているのですが、
親ウインドウを開いたときに子ウインドウを3個開くようにしています。
    _________
   |    |    |
   | A  |    |
   |____| C  |
   |    |    |
   | B  |    |
   |    |    |
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑こんな感じです。

このときに、二点質問があります。

1.A,Bに関しては、最大・最小、消去のボタンすらなしにしたい。
(これは、最初の作成時にできると思うのですが、Cにその機能をつけたくなかったので。最大
化は消してあります。)
どうすれば、バーに、何も表示せずにすむのか??

2.Cを最小化すると、Bの後ろに隠れる形になってしまいます。そうではなくて、Bの右隣に
最小化したときのウインドウをおきたいのです。どうすればいいのでしょうか??

二点、ご教授ください。
よろしくお願いします。


引用未解決
トピックタグ
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 25年前
投稿: 149
 

AとBをダイアログバーにするのが手っ取り早いのでは?

>発言される前に「使用上の注意」を必ずお読み下さい
は忘れずに


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

すいません。

書き忘れていました。
開発環境は Win2000、VC++6.0、MFC,MDIです。

で、この件のに関してですが、
>1.A,Bに関しては、最大・最小、消去のボタンすらなしにしたい。
につては、

CMDIChildWndの派生クラスCMyMDIを作成し、

BOOL CMyMDI::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style ^= WS_SYSMENU;
cs.style ^= WS_MINIMIZEBOX;
cs.style ^= WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}

と、関数をつくり、
BOOL CMainApp::InitInstance()
{
//省略
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MAINTYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CMyMDI), // カスタム MDI 子フレーム
RUNTIME_CLASS(CMainView));
AddDocTemplate(pDocTemplate);

として、解決しました。

しかし、2については、皆目検討がつきません。

なにか、いい方法はありませんか??
ご助言お願いします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

SetWindowPlacementで最小化したときのウィンドウの位置を
指定できますが、これで何とかなりますでしょうか。


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

ありがとうございます。

早速試してみました。
WINDOWPLACEMENT a;
a.ptMinPosition.x=500; //値は適当
a.ptMinPosition.y=500;
CWnd::SetWindowPlacement(&a);

ソース自体はこのように書いて、あってると思うのですが、
どこに書いていいのかわかりませんでした。

このプログラムを書いてあるOnCreateに書いてみたのですが、失敗。
この、ウインドウを作る時に、呼ぶCChildFrmのOncreateに、書き込むと、
ウインドウ自体表示されなくなってしまいました。。。(泣)

最小化するときに呼ばれるところはどこなのでしょうか??


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

OnCreate()でも可能でしたよ。

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;

WINDOWPLACEMENT wp;
GetWindowPlacement(&wp);
wp.flags = WPF_SETMINPOSITION;
wp.ptMinPosition.x = 10;
wp.ptMinPosition.y = 10;
SetWindowPlacement(&wp);

return 0;
}

最小化するたびに位置を直したいならば、
上記をOnSysCommand()で行えばよいでしょう。


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

あれ??
行きました。。。(^^ヾ

たくさんのご助言ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました