最大化ボタンを動的に使用可/使用不可にしたい – プログラミング – Home

最大化ボタンを動的に使用可/使用不可に...
 
通知
すべてクリア

[解決済] 最大化ボタンを動的に使用可/使用不可にしたい


Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Win2000,VC6,MFC,MDIの環境です。

タイトルの通り、MDI子ウィンドウの
最大化ボタンを動的に使用可/使用不可にしたいのですが
どんな方法があるでしょうか。

よろしくお願いします。 m(..)m ペコリ


引用未解決
トピックタグ
kng
 kng
(@kng)
ゲスト
結合: 23年前
投稿: 10
 

EnableMenuItem()はどうでしょう。


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

MDI子ウィンドウのWS_MAXIMIZEBOXスタイルを
つけたり外したりすれば可能です。

// 最大化無効化
CWnd* pwnd = GetParent(); // ビューの場合
pwnd->ModifyStyle(WS_MAXIMIZEBOX, 0);
pwnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE|RDW_FRAME);


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

kngさん 早速のお返事 ありがとうございます。

CMenu *pMenu = m_pFrame->GetMenu(); // m_pFrameはMDI子ウィンドウへのポインタ
とするとpMenuにはNULLポインタが返ってきます。
どうすればいいのでしょうか。

別の方法として
GetWindowLongを使ってやってみましたが、それもうまく動作しませんでした。

よろしくお願いします。 m(..)m


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

dairygoods さん お返事ありがとうございます。

うまくいったように見えたのですが、
最小化ボタンも一緒になくなってしまいます。
これは仕方ないのでしょうか?(涙)


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

CMenu* p = m_pFrame->GetSystemMenu( FALSE ); // システムメニュー参照
p->EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED); // 有効化
p->EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_GRAYED ); // 無効化
こんな感じです。


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。 おはようございます。

くたくたさん お返事ありがとうございます。
教わった方法で試してみたのですが、最大化ボタンに変化はありませんでした。

>最小化ボタンも一緒になくなってしまいます。
>これは仕方ないのでしょうか?(涙)

実はあらかじめ、MDI子ウィンドウの最小化ボタンをスタイルからはずしていました。
ためしにスタイルからはずさないで、dairygoodsさんに教わった方法で
ModifyStyleするとうまくいきました。

ただ、最大化、最小化ボタンを両方グレーにしようとすると、両方のボタンが
消えてしまうことがわかりました。

とりあえずこれでなんとかしてみます。
お返事をくださった皆様、ありがとうございました。 m(..)m ペコリ


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

>教わった方法で試してみたのですが、最大化ボタンに変化はありませんでした。
失礼致しました。先述した方法は閉じるボタンのみに対して有効でした。
最大、最小化ボタンに対しては dairygoodsさんの方法 です。
従って、3種のボタンへの操作は(見た目とは裏腹に)同じコードではできないようです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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