やはりまた来てしまいました。
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);
コンボボックスのハンドルはきちんと
取得できているのだと・・思います。
そうなると やり方そのものが間違っているんでしょうか
またまた基礎的な感じですいませんです
よろしくおねがいします
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)"タイトルバー有り");
ありがとうございます
WM_CLOSEでやったのはただ単純に
他に思いつかなかったからです(未熟なだけです すいません;;)
だからダイアログを削除するときに
その動作を行わせようとしてたわけではないので
瀬戸っぷさんのWM_INITDIALOGでやらせていただきました
(IDC_STYLEの部分を自作のコンボボックスIDに変えて)
・・・が
やはりできませんでした
そこで
#define KYOUKA 50001
このIDの50001という数字が大きすぎるのだろうか と思って
10にしてやってみましたが やはり変わっていませんでしたTT
わかりました!!!!
っていうかまたもや本当に馬鹿な事でした
コンボボックスのheightはエディット部分のことのみを
指しているのだと思っておりました
ドロップダウンリストの部分はアイテムの数で自動的に
決定されていくのだと・・思って
高さを10にして設定してたのが間違いでした
あるお勉強サイトのサンプルソースをコピーして
コンパイルし 実行してみたら
エディット部分の横のボタンを押すと
アイテムが入っていなくてもめいっぱい
メニューが開いたので気づきました
(僕のはほんのちょっとしか開かなかった)
またまた迷惑かけましたけど
瀬戸っぷさん ありがとうございました!!!!
> 瀬戸っぷさんのWM_INITDIALOGでやらせていただきました
> (IDC_STYLEの部分を自作のコンボボックスIDに変えて)
> ・・・が
> やはりできませんでした
> そこで
> #define KYOUKA 50001
> このIDの50001という数字が大きすぎるのだろうか と思って
> 10にしてやってみましたが やはり変わっていませんでしたTT
挿入できていないことの確認は,どのようにして行いましたか?
CB_GETCOUNTを送ったときに0が戻ってきていたのでしょうか?
ありがちなところでは,CB_ADDSTRINGしただけでは,
コンボボックスには選択されない,ということを忘れている,ということがあります。
#see) CB_SETCURSEL
>コンボボックスのheightはエディット部分のことのみを
>指しているのだと思っておりました
>ありがちなところでは,CB_ADDSTRINGしただけでは,
>コンボボックスには選択されない,ということを忘れている,ということがあります。
リソースエディタ上でリスト部の高さを変えていなかったため、広がらなかっただけかと思われます。
訂正。
>自作のリソーススクリプトで
リソースエディタ使ってませんね;;
ごまさんはもう原因が分かってらっしゃるようですが…
コンボボックスの height が小さすぎたため、項目は追加されているけど見えなかっただけだと思われます。
ツイート | ![]() |