ページ 11

コンボボックス

Posted: 2006年2月01日(水) 21:52
by 雷電
コンボボックス内の内容を決めるには、どうやればいいですか?
それで、その内容を指定しておいて、エディットボックスに出力するには、どうすればいいですか?
こんなのできるのかな?
返信お願いします。

Posted: 2006年2月02日(木) 00:12
by 7
コンボボックスの内容を決める(追加ですが)には、CB_ADDSTRING。

1.CB_GETCURSELでどの内容が指定されているか知る。
2. 1.の戻り値を使って、CB_GETLBTEXTLENで文字列長を取得。
3. 2.の戻り値を使って、文字列変数にメモリをZeroString()関数やmalloc()関数で確保する。
4. 1.の戻り値を使って、CB_GETLBTEXTで3.の文字列変数に文字列を格納。
5.エディットボックスに3.の文字列変数を設定する。

ありがとうございます

Posted: 2006年2月02日(木) 20:18
by 雷電
7さん、返信ありがとうございます。
さて、またまたいろんなものが引っかかります。
といっても、一つ”lParam”が引っかかります。
何か、定義し忘れているんでしょうか?
このコードでおかしいことが合ったら、返信お願いします。

Posted: 2006年2月02日(木) 20:43
by 7
えーと、勘違いされているようです...。

CB_ADDSTRINGはウィンドウメッセージなので、SendMessage()関数を使って目的のウィンドウにメッセージを送る必要があります。

Posted: 2006年2月02日(木) 22:51
by ゲスト
> 文字列のほうには、認識(内容の文字)をかくんですか?
いっぱいあるんだけど、どうしたらいいかなー?
このまま、デバックしてみたら、ちゃんとコマンドボックスに入ってなかったし・・・

名前

Posted: 2006年2月02日(木) 22:52
by 雷電
忘れてました、名前を入れるのを。。

Posted: 2006年2月03日(金) 06:43
by 7
> 文字列のほうには、認識(内容の文字)をかくんですか?
そうです。文字列リテラルでも構いませんし、文字列変数でも構いません。

コード: 全て選択

SendMessage(hCombo,CB_ADDSTRING,NULL,"文字列リテラル")
SendMessage(hCombo,CB_ADDSTRING,NULL,pStr)'文字列変数
> いっぱいあるんだけど、どうしたらいいかなー?
どのぐらいの文字数なのか分かりませんが、あまりにも多い文字列はコンボボックスに表示すべきじゃないと思いますよ。
使用目的が分からないので強制はしませんが...。

> このまま、デバックしてみたら、ちゃんとコマンドボックスに入ってなかったし・・・
コンボボックスに文字列を追加するタイミングは正しいですか?
大抵はウィンドウが作られた時にコンボボックスに文字列を追加します。 また、コンボボックスの初期の選択位置は-1のようなので、プログラム起動時に0に設定してやると良いかもしれません。

ついで

Posted: 2006年2月10日(金) 22:45
by 雷電
ボタンのクリックと同時に、また別のウィンドウが出てくるようにするには、どうやればよいでしょうか?
コードごと書いてください

Posted: 2006年2月10日(金) 22:56
by イグトランス
ついでと言わないで,それなら新たにトピックを作ってしまいましょうよ。

それはともかく,ボタンがクリックされるとクリックイベントが発生します。
クリックイベントは(ウィンドウ名)_(ボタンのID)_Clickという関数(たとえばMainWnd_CommandButton1_Clickなどという具合)が対応しています。

そのクリックイベントの中で別のウィンドウを作ればよいのです。
普通はダイアログを作っておいて,DialogBox或いはCreateDialog関数を呼ぶことになるでしょう。