プロが教える店舗&オフィスのセキュリティ対策術

MFCをVC6.0で作成しています。現在、ダイアログボックスを作成しているのですが、ダイアログボックスの中のリストボックスについて、教えてください。
void CFileReadeDlg::GetIndex()
{
UpdateData(TRUE);
m_nCount = m_xcList.GetCurSel();
if(m_nCount==LB_ERR)
{
AfxMessageBox("選択してください");
}
}
の関数で、リストボックス内に存在するカーソルの位置を割り出したいのですが、
この関数は、
void CFileReadeDlg::OnSelchangeDatatable()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
GetIndex();
}
のようにリストボックスの中のセルを変更した際に稼動する関数内で呼び出しています。

ですが、実際、このm_nCountには、0しか入りません。
これは、単にOnSelchangeDatatable()の関数を何処かの関数内にも呼び出していないからでしょうか。
そもそも、呼び出す必要はないかと思っていたのですが。

又、VCのヘルプに『単一選択リスト ボックスで、現在選択されている項目があれば、その項目の 0 から始まるインデックスを取得します』
とありましたが、0から始まるインデックスとは、どういうことを意味しているのでしょうか。


よろしくお願いします。

A 回答 (1件)

OnSelchangeDatatableはメッセージマップに登録されているのでしょうか?



BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
  //{{AFX_MSG_MAP(CXXXDlg)
  ON_WM_PAINT()
  ON_WM_QUERYDRAGICON()
  ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeDatatable)
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()
といった具合にメッセージマップが記述されていないとOnSelchangeDatatableへ制御が移りませんよ
IDC_LIST1、CXXXDlgは 実際のリソースIDやクラス名と読み替えてください

ClassWizardから追加するなら
オブジェクトIDでリストボックスのリソースIDを選択
メッセージでLBN_SELCHANGEを選択
関数の追加をクリック
メンバ関数の追加で必要なら関数名を修正
といった手順で追加しましょう

メッセージマップとヘッダーでの宣言、CPPファイルへの関数スケルトンを作成してくれます

0から始まるインデックスとは
リストボックスに5項目あるなら
1番目 ... 0
2番目 ... 1
3番目 ... 2
4番目 ... 3
5番目 ... 4
といった値になるということです
    • good
    • 0
この回答へのお礼

素早いご解答&適切なご解答ありがとうございます。
ご指摘の点を修正しましたところ、立派に機能し始めました。ありがとうございます。
また、0から始まる~のくだりに関しては、初歩的なことなのにも関わらず、ご丁寧にお答えくださり、ありがとうございます。

お礼日時:2008/09/09 12:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!