ダイアログのシステムメニューで、アイコンはつけないで×「閉じる」ボタンだけつけるには?

[戻る]
大三元 2006/06/29(木) 17:57:04
環境は
VC++6.0 Windows XPです。
過去ログに同じものがあったのですが、
解決してませんでした。
バツボタンだけが欲しいのですが・・・

Blue 2006/06/29(木) 18:06:48
過去ログ
ダイアログの左端のアイコンを非表示にするには?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200102/01020001.txt

大三元 2006/06/29(木) 18:32:03
この過去ログだとデフォルトのダイアログのシステムメニューの場合だと思います。
僕のはデフォルトではないので、
LoadIconなどのスケルトン記述はありません。

Blue 2006/06/29(木) 18:51:25
> 僕のはデフォルトではないので、
?
ダイアログをリソースに追加して、ClassWizardでダイアログクラスを作って、
それをDoModalで表示してみたけど、アイコンは表示されていませんよ。
(CAboutDlgも×ボタンだけだと思うけど)
# リソースエディタ上ではアイコンが表示されていますけど。
(WindowsXP Pro SP2/VC++6.0 Enter SP6/MFC Application ダイアログ)

デフォルトでないっていうのを明確にしてもらえますか?
(というか一番最初にMFCなのかどうかの情報も加えて明記してもらいたい)

REE 2006/06/29(木) 19:07:53
ダイアログじゃなくてSDIとかだったりして

大三元 2006/06/30(金) 08:49:46
>ダイアログをリソースに追加して、ClassWizardでダイアログクラスを作って、
デフォルトではないとはこのことです。

>方法は二つある
>1.m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); を消せば表示しない。
>2.OnInitDialog()中で次の2行を消せばよいと思う。
>    SetIcon(m_hIcon, TRUE);        // 大きいアイコンを設定
>    SetIcon(m_hIcon, FALSE);        // 小さいアイコンを設定
ダイアログを追加した場合、上記1.2の記述はないと思うんですが・・・

>メニューに対しての設定を変更したい場合は、OnInitDialog()で以下のところを変更す
>ればよい。
>CMenu* pSysMenu = GetSystemMenu(FALSE);
>if (pSysMenu != NULL){
>  // メニュー追加、削除処理
>}
こっちのほうでできるんですか?

いろは 2006/06/30(金) 09:00:38
>2.OnInitDialog()中で次の2行を消せばよいと思う。
>    SetIcon(m_hIcon, TRUE);        // 大きいアイコンを設定
>    SetIcon(m_hIcon, FALSE);        // 小さいアイコンを設定

これはやってみましたか?
デフォルトじゃなくてもこれで解決するはずですが。

>1.m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

こっちはアイコンをロードしてるだけです。

大三元 2006/06/30(金) 09:05:01
>これはやってみましたか?
>デフォルトじゃなくてもこれで解決するはずですが。
デフォルトじゃない場合、
OnInitDialog()はクラスウィザードで自分で関数を生成するから、内部には、自分で書
かないと何も記述されてないですよ?

Blue 2006/06/30(金) 09:16:12
おかしいですね。
本当に 実行時 にアイコンが表示されますか?
    ~~~~~~
(ダイアログの編集画面ではないですよ?)

私の環境(WindowsXP Pro SP2/VC++6.0 Enter SP6/MFC Application ダイアログ)
ではアイコンはでません。
あなたの環境をもう少し具体的にしてください。

たいちう 2006/06/30(金) 09:18:04
> ダイアログをリソースに追加して、ClassWizardでダイアログクラスを作って、
> それをDoModalで表示してみたけど、アイコンは表示されていませんよ。

私も確認できました。
で、大三元さん、試しに新規プロジェクトでアイコンが表示されるか
やってみてはどうですか?

dairygoods 2006/06/30(金) 09:20:21
境界線を「細枠」や「サイズ変更枠」にすると、
アイコンが出ますけど、なってますか?

大三元 2006/06/30(金) 09:35:45
>本当に 実行時 にアイコンが表示されますか?
MFCと書いてあるデフォルトのアイコンではなくて、Windowsのプロンプトみたいなアイ
コンがでてます。

環境は XP Home SP2 VC6.0-SP6です。

大三元 2006/06/30(金) 09:43:20
消したいアイコンがあるダイアログはモードレスです。


>境界線を「細枠」や「サイズ変更枠」にすると、
>アイコンが出ますけど、なってますか?
なってます。
ちなみにデフォルトダイアログクラスの
OnInitDialog()のSetIcon2行を消したら、
アイコンは出なくなりました。

Blue 2006/06/30(金) 09:49:30
> なってます。
こういう情報は一番最初に言うべきです。
何にも書かなければデフォルトだと思うのが普通でしょう?

とりあえず、AppendMenuで必要なシステムメニューを追加して回避する方法。

境界線を「ダイアログ枠」に変更
OnInitDialogに

CMenu* pMenu = this->GetSystemMenu( FALSE );
if ( pMenu )
{
    pMenu->AppendMenu( MF_STRING, SC_SIZE, "サイズ変更(&S)" );
    this->ModifyStyle( 0, WS_THICKFRAME ); 
}

を追加。

Blue 2006/06/30(金) 09:51:24
ModifyStyleの位置がおかしいかも。

参考)
■ ボタンによって、ウインドウスタイルを変更するには?
http://homepage1.nifty.com/MADIA/vc/vc_bbs/200310_03100031.html

大三元 2006/06/30(金) 12:57:05
[[解決]]
>何にも書かなければデフォルトだと思うのが普通でしょう?
その通りです。
これが影響してるとは全く思わなかったので
記述しませんでした。

上記sauceでできました。
ありがとうございます。

asd 2006/06/30(金) 13:48:30
>これが影響してるとは全く思わなかったので
>記述しませんでした。

トラブルシューティング(問題解決)において思い込みは一番危険です。
その思い込みに大きな問題が隠されていたりしますから。

特にこういう場で回答を得たい場合には自分の考えはしっかり述べるべきですし、
省略している事項があるならそれも書くべきです。

そうしないと今回のようにお互い手間がかかってしまうだけですから。

# 解決してるスレにごみレスしてごめんなさい。

古いスレッドには追加発言できません。