ダイアログのドロップダウン型リストボックスにアイテムを追加するには?

解決


ごま  2004-04-09 01:42:06  No: 53452

やはりまた来てしまいました。
3時間くらい唸りながら色々試してはみたんですが
できなかったのでどなたか教えてください  おねがいします

自作のリソーススクリプトで
エディットとコンボボックスを持つダイアログを作り
ダイアログプロシージャのWM_CLOSEで
そのコンボボックスにアイテムを挿入しようとしているのですが
×ボタンを押しても挿入されません

//リソーススクリプト

#define KYOUKA 50001
#define TEXTNAME 50002

TOUROKU DIALOGEX 30,30,200,50
FONT 12 ,"MS Shell Dlg"
CAPTION "参考書・問題集登録" 
{
CTEXT "教科",-1,10,5,20,10,
COMBOBOX KYOUKA,35,5,30,10,CBS_DROPDOWNLIST
EDITTEXT TEXTNAME,10,30,100,10,ES_AUTOHSCROLL
}

//ダイアログプロシージャの一部

case WM_CLOSE:

if(NULL==GetDlgItem(hwnd,KYOUKA)) EndDialog(hwnd,MB_OK);

SendMessage(GetDlgItem(hwnd,KYOUKA),CB_ADDSTRING,0,(LPARAM)TEXT("国語"))
return TRUE;

としています。

WM_CLOSEを使っているのは最初WM_CREATEでやろうとしていたのですが
どうもWM_CREATEがダイアログプロシージャに
送られてきていなかった気がしたからです。
(WM_CREATEの中でメッセージボックスを呼ばれるようにしたが一度も表示されなかったから)
あと  他に手っ取り早く調べる方法を思いつきませんでした

ちゃんとこのWM_CLOSEが呼ばれていることは確かです
(WM_CLOSEの一番初めの部分でメッセージボックスを呼び出すようにしたら
表示された)

あとは・・×ボタンを押しても消えることはないので
if(NULL==GetDlgItem(hwnd,KYOUKA)) EndDialog(hwnd,MB_OK);
コンボボックスのハンドルはきちんと
取得できているのだと・・思います。

そうなると  やり方そのものが間違っているんでしょうか
またまた基礎的な感じですいませんです
よろしくおねがいします


瀬戸っぷ  2004-04-09 02:20:05  No: 53453

WM_CLOSEで追加しているようですが、そのコンボボックスのあるダイアログを閉じる時…ではないのですか?
記述されたコードを見ると、コントロールを破棄しないと閉じられないような気もしますが……

> WM_CLOSEを使っているのは最初WM_CREATEでやろうとしていたのですが
> どうもWM_CREATEがダイアログプロシージャに
> 送られてきていなかった気がしたからです。

ダイアログの場合、WM_INITDIALOGで行うべきです。
なお、私の場合下記の方法で追加出来ていますが。(IDC_STYLEがドロップダウンリストスタイルなコンボボックス)

    SendDlgItemMessage(hdwnd, IDC_STYLE, CB_ADDSTRING, 0, (LPARAM)"タイトルバー無し");
    SendDlgItemMessage(hdwnd, IDC_STYLE, CB_ADDSTRING, 0, (LPARAM)"タイトルバー有り");


ごま  2004-04-09 03:58:26  No: 53454

ありがとうございます
WM_CLOSEでやったのはただ単純に
他に思いつかなかったからです(未熟なだけです  すいません;;)
だからダイアログを削除するときに
その動作を行わせようとしてたわけではないので
瀬戸っぷさんのWM_INITDIALOGでやらせていただきました
(IDC_STYLEの部分を自作のコンボボックスIDに変えて)
・・・が
やはりできませんでした
そこで
#define KYOUKA 50001
このIDの50001という数字が大きすぎるのだろうか  と思って
10にしてやってみましたが  やはり変わっていませんでしたTT


ごま  2004-04-09 04:32:16  No: 53455

わかりました!!!!
っていうかまたもや本当に馬鹿な事でした
コンボボックスのheightはエディット部分のことのみを
指しているのだと思っておりました
ドロップダウンリストの部分はアイテムの数で自動的に
決定されていくのだと・・思って
高さを10にして設定してたのが間違いでした

あるお勉強サイトのサンプルソースをコピーして
コンパイルし  実行してみたら
エディット部分の横のボタンを押すと
アイテムが入っていなくてもめいっぱい
メニューが開いたので気づきました
(僕のはほんのちょっとしか開かなかった)

またまた迷惑かけましたけど
瀬戸っぷさん  ありがとうございました!!!!


YuO  2004-04-09 04:41:17  No: 53456

> 瀬戸っぷさんのWM_INITDIALOGでやらせていただきました
> (IDC_STYLEの部分を自作のコンボボックスIDに変えて)
> ・・・が
> やはりできませんでした
> そこで
> #define KYOUKA 50001
> このIDの50001という数字が大きすぎるのだろうか  と思って
> 10にしてやってみましたが  やはり変わっていませんでしたTT

挿入できていないことの確認は,どのようにして行いましたか?
CB_GETCOUNTを送ったときに0が戻ってきていたのでしょうか?

ありがちなところでは,CB_ADDSTRINGしただけでは,
コンボボックスには選択されない,ということを忘れている,ということがあります。
#see) CB_SETCURSEL


シャノン  2004-04-12 18:37:46  No: 53457

>コンボボックスのheightはエディット部分のことのみを
>指しているのだと思っておりました

>ありがちなところでは,CB_ADDSTRINGしただけでは,
>コンボボックスには選択されない,ということを忘れている,ということがあります。

リソースエディタ上でリスト部の高さを変えていなかったため、広がらなかっただけかと思われます。


シャノン  2004-04-12 18:41:30  No: 53458

訂正。

>自作のリソーススクリプトで
リソースエディタ使ってませんね;;

ごまさんはもう原因が分かってらっしゃるようですが…
コンボボックスの height が小さすぎたため、項目は追加されているけど見えなかっただけだと思われます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加