モードレスダイアログにアイコンを貼り付けたい – プログラミング – Home

モードレスダイアログにアイコンを貼り付...
 
通知
すべてクリア

[解決済] モードレスダイアログにアイコンを貼り付けたい


ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

はじめまして
アイコンの張り付きができません。
例えば以下のようにモードレスダイアログを表示させるとして
そのダイアログにストップアイコンをつけようとしています。
いろいろ教えていただいているのですができません。

BOOL CDialogDlg::OnInitDialog()
{
CDialog::OnInitDialog();
・・・

ここにストップアイコンを貼り付ける処理をするのですか?

m_MessDlg = new CMESSDLG(this);
m_MessDlg->Create(IDD_MESS, this);
m_MessDlg->ShowWindow(SW_SHOW);
m_MessDlg->UpdateWindow();
・・・・・・・・・・


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

手元にあったコードそのまま貼り付けてみる。

((CStatic*)GetDlgItem(IDC_ICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_EXCLAMATION)));

ダイアログエディタのほうでIDC_ICONっていうピクチャーをはってある。

// 環境は一応ちゃんと書いときましょうね。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

CMESSDLGがメッセージのダイアログですよね?
CMESSDLG::OnInitDialog()でアイコン設定するのが自然なのではないでしょうか?


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

PAIさんsugar さんありがとうございます。
確認なんですが
((CStatic*)GetDlgItem(IDC_ICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_EXCLAMATION)));
上記のソースで
IDC_ICONはピクチャーコントロールのID
IDI_EXCLAMATIONは貼り付けたいアイコンIDですか?
あとたくさん貼り付けたいダイアログボックスがあれば上記の
ソースを書いていけばいいんですね!CMESSDLG::OnInitDialog()のところで。。。

遅れましたが環境はWINDOWS2000.VC++.NETです。


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

たびたびすみません。あと作成したダイアログにピクチャーコントロール
を作成してそのプロパティのTypeでアイコンと指定してあげればいいんですか?


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

> 上記のソースで
> IDC_ICONはピクチャーコントロールのID
> IDI_EXCLAMATIONは貼り付けたいアイコンIDですか?
> あとたくさん貼り付けたいダイアログボックスがあれば上記の
> ソースを書いていけばいいんですね!CMESSDLG::OnInitDialog()のところで。

そうです。::LoadIcon() を調べてみてください。
多分、IDI_HAND か IDI_WARNING がお望みのアイコンでしょう。

で、たくさん貼るなら私の書いたソースはちょっとワンライナーでみづらいので
整形したあげた方がいいと思います。

> たびたびすみません。あと作成したダイアログにピクチャーコントロール
> を作成してそのプロパティのTypeでアイコンと指定してあげればいいんですか?

です。アイコンになってないと、何もいわずに失敗するみたいです。

// にしても.Netのリソースエディタは使いづらい・・・


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

アイコンが固定であるなら、
リソースエディタ上でピクチャーのプロパティを開いて、
タイプ:アイコン
イメージ:32513
などとしたほうが簡単かと思います。

ちなみに、
#define IDI_HAND 32513


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

うーん、張り付かないです。
((CStatic*)GetDlgItem(IDC_STATIC))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_WARNING)));
デバックは通るのですが・・・・。
他に必要なことがあるのでしょうか?
プロパティとかで。。。。、聞いてばかりすみません。
自分でもいろいろ調べてみますが。

// にしても.Netのリソースエディタは使いづらい・・・
同感です!!!!


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

IDC_STATICはコード側からアクセスできねぇッス。
なんかユニークなものに変えてあげてください。

// って、ここら辺の説明ヘルプに見当たらないのだが・・・

それでもできなかったら、dairygoodsさんのおっしゃってる方法で。

dairygoodsさん、プロパティに直接IDかけるんですね。
次の機会にはそうすることにします。


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

ありがとうございました。
下記の件の疑問点としてアイコンのIDがWINDOWSで定められているのなら
わざわざ#define IDI_HAND 32513する必要があるのですか?

>アイコンが固定であるなら、
>リソースエディタ上でピクチャーのプロパティを開いて、
> タイプ:アイコン
> イメージ:32513
>などとしたほうが簡単かと思います。

>ちなみに、
>#define IDI_HAND 32513


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

以下のようにアイコン表示を行うとエラーが出てしまいます。
またヘッダーでIDI_QUESTION、IDI_HAND、IDI_INFORMATIONをデファイン定義をすると
再定義だと警告を受けます。
指導願います。
((CStatic*)GetDlgItem(IDC_ENDICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_QUESTION))); //終了確認
((CStatic*)GetDlgItem(IDC_SQICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_QUESTION))); //再送確認
((CStatic*)GetDlgItem(IDC_SIFICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_QUESTION))); //再送確認
((CStatic*)GetDlgItem(IDC_MESSICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_HAND))); //応答無終了
((CStatic*)GetDlgItem(IDC_NOCONTICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_INFORMATION)));//応答無
((CStatic*)GetDlgItem(IDC_NOSTOPICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_INFORMATION)));//応答待ち


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

まず、IDI_INFORMATIONとかは自分で定義せんでええです。
(再定義ってことは既にあるってことで・・・)
dairygoodsさんは『こうなってるよ』っていう意味で
>#define IDI_HAND 32513
とかかれたんだと思います。

で、エラーって具体的に何でしょう? 
ひとつだけでも出来ませんか?

これは余談ですけど、ちょっとソースが正直すぎです。
// 私のアレはひとつだけだったからで・・・ってよくない見本です。

HICON hQuestion = LoadIcon(NULL,MAKEINTRESOURCE(IDI_QUESTION));
HICON hHand = LoadIcon(NULL,MAKEINTRESOURCE(IDI_HAND));
HICON hInfo = LoadIcon(NULL,MAKEINTRESOURCE(IDI_INFORMATION));

CStatic *pWnd;
VERIFY( pWnd = GetDlgItem(IDC_SQICON) ); pWnd->SetIcon( hQuestion );
VERIFY( pWnd = GetDlgItem(IDC_SIFICON) ); pWnd->SetIcon( hQuestion );
VERIFY( pWnd = GetDlgItem(IDC_MESSICON) ); pWnd->SetIcon( hHand );
VERIFY( pWnd = GetDlgItem(IDC_NOCONTICON) ); pWnd->SetIcon( hInfo );
VERIFY( pWnd = GetDlgItem(IDC_NOSTOPICON) ); pWnd->SetIcon( hInfo );

こんな感じですか?


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

>CStatic *pWnd;
>VERIFY( pWnd = GetDlgItem(IDC_SQICON) ); pWnd->SetIcon( hQuestion );

だめじゃん。GetDlgItem() は戻り値 CWnd* だからキャストは
いずれにしろしてやんなきゃ。

なかなかきれいには書きづらいな。


返信引用
ちゅーちゅー
 ちゅーちゅー
(@ちゅーちゅー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

そうでしたね。ちゃんとできました。ありがとうございました。
また何かあればお願いいたします。お世話になりました。


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

>dairygoodsさんは『こうなってるよ』っていう意味で
>>#define IDI_HAND 32513
>とかかれたんだと思います。

フォローどうもですm(_ _)m

私なら同じ処理が2つくらい出てきたら関数にしちゃいます。

inline void CxDlg::SetDlgStaticIcon(UINT id, HICON icon)
{
((CStatic*)GetDlgItem(id))->SetIcon(icon);
}
とか。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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