リストボックスに文字をいれる

[戻る]
yuu 2006/05/11(木) 19:31:35
現在、通信プログラミングに挑んでいるものです。
そこで、通信してもらってきた文字列、ほとんどはホスト名なのですが、そのホスト名
をリストボックスに表示することができません。

何かいいアドバイスをお願いします。

VC++.net でWinAPIを使っています。OSはWindowsXPです。

REE 2006/05/11(木) 19:59:20
まずは、問題の切り分けです。

その文字列をリストボックス以外になら表示できますか?

また、任意の文字(例えばABC)をリストボックスに表示することは出来ますか?

KING・王 2006/05/11(木) 20:00:46
> そこで、通信してもらってきた文字列、ほとんどはホスト名なのですが、そのホスト名
> をリストボックスに表示することができません。

これだけでは、yuuさんのコードが間違っているであろうことしか分かりません。

> 何かいいアドバイスをお願いします。

正しいコードを書きましょう。


と、いうのは大人気ないですので、とりあえず、どのようなコードを書いたのかを
提示して下さい。

全てはそれからです。

yuu 2006/05/11(木) 20:01:20
>その文字列をリストボックス以外になら表示できますか?
EditBoxになら、表示できます。
>任意の文字(例えばABC)をリストボックスに表示することは出来ますか?
できません。

Blue 2006/05/11(木) 23:43:15
LB_ADDSTRINGやLB_INSERTSTRINGをSendMessageしてリストに追加します。
http://wisdom.sakura.ne.jp/system/winapi/win32/win68.html

yuu 2006/05/12(金) 09:34:51
ありがとうごさいます。サイトを参考にしてみます。

yuu 2006/05/14(日) 01:11:04
szBuff ←取得している文字列とします

lpszComp = strtok(szBuff, " "); 
lstrcpy(szComp, lpszComp);
            
SetDlgItemText(hWndmain,IDC_COMP,szComp);

として、ダイアログボックスのEditBoxに表示することができているのですが、この
EditBoxからListBoxに列挙したいのですが、どうしてもわかりません。
参考サイトをみても、よく理解できないです。よろしくお願いします。

Blue 2006/05/14(日) 02:19:27
GetDlgItemでリストボックスのウィンドウハンドルを取得して、
> LB_ADDSTRINGやLB_INSERTSTRINGをSendMessageしてリストに追加します。

http://www.kumei.ne.jp/c_lang/sdk/sdk_20.htm
ここでわからなければ、もう一度Windowsプログラムの基礎から勉強しなおしてくださ
い。
(きちんと文章を読めば、詳しい説明がかいてあります。)

Ban 2006/05/14(日) 02:23:08
参照先サイトより。
> SendMessage(list , LB_ADDSTRING , 0 , (LPARAM)strText[i]);

Ban 2006/05/14(日) 02:24:39
# 更新したら Blue さんのレスがすでについてた…orz

yuu 2006/05/15(月) 14:40:52
リストボックスには、文字を入れることができました。どうもありがとうございまし
た。しかし、今度は、その読み込んだ文字列を変換することができません。どうしたら
いいでしょうか?
ソースは、
リストボックスに入っている文字列の取得
↓
nSelected = (LONG)SendMessage(hList1, LB_GETCURSEL, 0, 0);
  if(nSelected == LB_ERR)                    
    {  return FALSE;
    }
nLength = (LONG)SendMessage(hList1, LB_GETTEXTLEN, (WPARAM)nSelected, 0);
  if((nLength <= 0) || (nLength > 256))
    {    return FALSE;
    }
nResult2 = (LONG)SendMessage(hList1, LB_GETTEXT,(WPARAM)nSelected, (LPARAM)sz);
  if(nResult2 == LB_ERR)
    {return FALSE;
    }

lpszComp = strtok(sz, " "); 
lstrcpy((LPSTR)szComp, lpszComp);            
szServer = szComp; ←ここでエラー・・・
  やりたいことは取得した文字列を他の文字列に変換したい
エラー内容は、
error C2440: '=' : 'char [20][256]' から 'char [1024]' に変換できません。
です。 よろしくお願いします

PATIO 2006/05/17(水) 12:00:05
そのエラーの意味のまんまなんですが。

多分、szCompはchar szComp[20][256];と宣言していて
szServer は、char szServer[1024];と宣言しているのではないですか?

一次元の配列と二次元の配列は別物ですから、szServer = szComp;見たいな事は出来ません。
ちなみにリストボックスに複数の文字列を一度で入れる事は出来ません。
文字列は一つ一つ追加していきます。
この辺はちゃんと関数の機能を理解して使わないとこの先も同じようにハマリますよ。
言われた通りにやったらできたでは駄目です。
MSDNやHELPをきちんと読みましょう。

PATIO 2006/05/17(水) 12:03:52
基、

この場合は、LB_ADDSTRINGの使い方ですね。

yuu 2006/05/18(木) 15:55:33
[[解決]]
無事、解決しました。
どうもありがとうございました。
実際、SendMessage(…,LB_ADDSTRING,…)で入りました。

古いスレッドには追加発言できません。