はじめまして
アイコンの張り付きができません。
例えば以下のようにモードレスダイアログを表示させるとして
そのダイアログにストップアイコンをつけようとしています。
いろいろ教えていただいているのですができません。
BOOL CDialogDlg::OnInitDialog()
{
CDialog::OnInitDialog();
・・・
ここにストップアイコンを貼り付ける処理をするのですか?
m_MessDlg = new CMESSDLG(this);
m_MessDlg->Create(IDD_MESS, this);
m_MessDlg->ShowWindow(SW_SHOW);
m_MessDlg->UpdateWindow();
・・・・・・・・・・
手元にあったコードそのまま貼り付けてみる。
((CStatic*)GetDlgItem(IDC_ICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_EXCLAMATION)));
ダイアログエディタのほうでIDC_ICONっていうピクチャーをはってある。
// 環境は一応ちゃんと書いときましょうね。
CMESSDLGがメッセージのダイアログですよね?
CMESSDLG::OnInitDialog()でアイコン設定するのが自然なのではないでしょうか?
PAIさんsugar さんありがとうございます。
確認なんですが
((CStatic*)GetDlgItem(IDC_ICON))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_EXCLAMATION)));
上記のソースで
IDC_ICONはピクチャーコントロールのID
IDI_EXCLAMATIONは貼り付けたいアイコンIDですか?
あとたくさん貼り付けたいダイアログボックスがあれば上記の
ソースを書いていけばいいんですね!CMESSDLG::OnInitDialog()のところで。。。
遅れましたが環境はWINDOWS2000.VC++.NETです。
たびたびすみません。あと作成したダイアログにピクチャーコントロール
を作成してそのプロパティのTypeでアイコンと指定してあげればいいんですか?
> 上記のソースで
> IDC_ICONはピクチャーコントロールのID
> IDI_EXCLAMATIONは貼り付けたいアイコンIDですか?
> あとたくさん貼り付けたいダイアログボックスがあれば上記の
> ソースを書いていけばいいんですね!CMESSDLG::OnInitDialog()のところで。
そうです。::LoadIcon() を調べてみてください。
多分、IDI_HAND か IDI_WARNING がお望みのアイコンでしょう。
で、たくさん貼るなら私の書いたソースはちょっとワンライナーでみづらいので
整形したあげた方がいいと思います。
> たびたびすみません。あと作成したダイアログにピクチャーコントロール
> を作成してそのプロパティのTypeでアイコンと指定してあげればいいんですか?
です。アイコンになってないと、何もいわずに失敗するみたいです。
// にしても.Netのリソースエディタは使いづらい・・・
アイコンが固定であるなら、
リソースエディタ上でピクチャーのプロパティを開いて、
タイプ:アイコン
イメージ:32513
などとしたほうが簡単かと思います。
ちなみに、
#define IDI_HAND 32513
うーん、張り付かないです。
((CStatic*)GetDlgItem(IDC_STATIC))-> SetIcon( LoadIcon(NULL,MAKEINTRESOURCE
(IDI_WARNING)));
デバックは通るのですが・・・・。
他に必要なことがあるのでしょうか?
プロパティとかで。。。。、聞いてばかりすみません。
自分でもいろいろ調べてみますが。
// にしても.Netのリソースエディタは使いづらい・・・
同感です!!!!
IDC_STATICはコード側からアクセスできねぇッス。
なんかユニークなものに変えてあげてください。
// って、ここら辺の説明ヘルプに見当たらないのだが・・・
それでもできなかったら、dairygoodsさんのおっしゃってる方法で。
dairygoodsさん、プロパティに直接IDかけるんですね。
次の機会にはそうすることにします。
ありがとうございました。
下記の件の疑問点としてアイコンのIDがWINDOWSで定められているのなら
わざわざ#define IDI_HAND 32513する必要があるのですか?
>アイコンが固定であるなら、
>リソースエディタ上でピクチャーのプロパティを開いて、
> タイプ:アイコン
> イメージ:32513
>などとしたほうが簡単かと思います。
>ちなみに、
>#define IDI_HAND 32513
以下のようにアイコン表示を行うとエラーが出てしまいます。
またヘッダーで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)));//応答待ち
まず、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 );
こんな感じですか?
>CStatic *pWnd;
>VERIFY( pWnd = GetDlgItem(IDC_SQICON) ); pWnd->SetIcon( hQuestion );
だめじゃん。GetDlgItem() は戻り値 CWnd* だからキャストは
いずれにしろしてやんなきゃ。
なかなかきれいには書きづらいな。
そうでしたね。ちゃんとできました。ありがとうございました。
また何かあればお願いいたします。お世話になりました。
>dairygoodsさんは『こうなってるよ』っていう意味で
>>#define IDI_HAND 32513
>とかかれたんだと思います。
フォローどうもですm(_ _)m
私なら同じ処理が2つくらい出てきたら関数にしちゃいます。
inline void CxDlg::SetDlgStaticIcon(UINT id, HICON icon)
{
((CStatic*)GetDlgItem(id))->SetIcon(icon);
}
とか。