リストボックスに文字をいれる – プログラミング – Home

リストボックスに文字をいれる
 
通知
すべてクリア

[解決済] リストボックスに文字をいれる


yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

現在、通信プログラミングに挑んでいるものです。
そこで、通信してもらってきた文字列、ほとんどはホスト名なのですが、そのホスト名
をリストボックスに表示することができません。

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

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


引用未解決
トピックタグ
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

まずは、問題の切り分けです。

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

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


返信引用
KING・王
 KING・王
(@KING・王)
ゲスト
結合: 20年前
投稿: 122
 

> そこで、通信してもらってきた文字列、ほとんどはホスト名なのですが、そのホスト名
> をリストボックスに表示することができません。

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

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

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

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

全てはそれからです。


返信引用
yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

LB_ADDSTRINGやLB_INSERTSTRINGをSendMessageしてリストに追加します。
http://wisdom.sakura.ne.jp/system/winapi/win32/win68.html


返信引用
yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

ありがとうごさいます。サイトを参考にしてみます。


返信引用
yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

szBuff ←取得している文字列とします

lpszComp = strtok(szBuff, );
lstrcpy(szComp, lpszComp);

SetDlgItemText(hWndmain,IDC_COMP,szComp);

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

GetDlgItemでリストボックスのウィンドウハンドルを取得して、
> LB_ADDSTRINGやLB_INSERTSTRINGをSendMessageしてリストに追加します。

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

参照先サイトより。
> SendMessage(list , LB_ADDSTRING , 0 , (LPARAM)strText[i]);


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

# 更新したら Blue さんのレスがすでについてた…orz


返信引用
yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

リストボックスには、文字を入れることができました。どうもありがとうございまし
た。しかし、今度は、その読み込んだ文字列を変換することができません。どうしたら
いいでしょうか?
ソースは、
リストボックスに入っている文字列の取得

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
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

そのエラーの意味のまんまなんですが。

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

基、

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


返信引用
yuu
 yuu
(@yuu)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

無事、解決しました。
どうもありがとうございました。
実際、SendMessage(…,LB_ADDSTRING,…)で入りました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました