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

VC++6.0 SDKでLISTVIEWでNM_CLICKを受け取った時のINDEXを取得したいのですがどうしたらよいのでしょう?

以下現在のソースです、インデントが無効になってしまい、見にくくてすみません。
case WM_NOTIFY:
if((int)wp == IDLV_OPT_YAMAHA){
lvinfo = (LV_DISPINFO *)lp;
switch (lvinfo->hdr.code){

case NM_CLICK:
//click位置の名前とcheck
GetCursorPos(&pt);
//hittest.pt = pt;
iIndex = LBItemFromPt(GetDlgItem(ghWnd, IDLV_OPT_YAMAHA), pt, FALSE);
if(iIndex != -1){
ListView_GetItemText(GetDlgItem(ghWnd, IDLV_OPT_YAMAHA), iIndex, 0, szMcn, sizeof(szMcn));
fState = ListView_GetCheckState(GetDlgItem(ghWnd, IDLV_OPT_YAMAHA), iIndex);
if(fState){
WritePrivateProfileString("CONNECT", szMcn, "1", PATH_INI);
sprintf(gszDebug, "%s 1", szMcn);
MessageBox(NULL, gszDebug, "error", MB_OK);
}else {
WritePrivateProfileString("CONNECT", szMcn, "0", PATH_INI);
sprintf(gszDebug, "%s 0", szMcn);
MessageBox(NULL, gszDebug, "error", MB_OK);
}
}
break;

}

}
break;

A 回答 (4件)

>Spy++試してみます。


>なんかおもしろそうなソフトですけど、よく使われるものなんでしょうか?

ウィンドウの情報を得るんでしたら必須ですね。ぜひ使いこなしてください。

これを使えば表示、非表示にかかわらずすべての起動中のウィンドウに対して調査を行うことが出来ます。

よく使うところですとウィンドウメッセージの受信内容の取得やウィンドウクラス名の取得、ダイアログのコントロールIDの確認なんかですかね。

取得可能な情報はこれだけじゃなく、ウィンドウに関する情報はほぼ全部取れます。
    • good
    • 0

>LVN_COLUMNCLICKもLVN系全てメッセージを捕まえれません。


>DialogBox関数で指定したプロシージャでなく更にサブクラス化しなければいけないのでしょうか? 

そういう時は、Spy++で確認しましょう。

この回答への補足

Spy++試してみます。
なんかおもしろそうなソフトですけど、よく使われるものなんでしょうか?

補足日時:2005/03/17 16:03
    • good
    • 0

>

http://home.a03.itscom.net/tsuzu/programing/tips …
>を参考にして

参考にしたところが間違ってますね。
ドラッグリスト用のAPIです。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_215.htm

#"LB"なんですから。"LV"じゃないですよね?

>その時のソースから流用したためNM_CLICKになっているのだと思います。

ということでしたら、この際LVN_COLUMNCLICKにしちゃいましょう。何も問題なくカラム情報を取得できます。

この回答への補足

LVN_COLUMNCLICKもLVN系全てメッセージを捕まえれません。
DialogBox関数で指定したプロシージャでなく更にサブクラス化しなければいけないのでしょうか? 

ありがとうございます、試しに親プロシージャでWM_NOTIFYを引っ掛けてみます。

補足日時:2005/03/16 16:04
    • good
    • 0

LVN_COLUMNCLICKではなく、なぜNM_CLICKを使用するのでしょうか?


特別な理由があるのでしたらしょうがないですけど。

あと、LBItemFromPtってリストボックスのAPIじゃなくて?

この回答への補足

http://home.a03.itscom.net/tsuzu/programing/tips …
を参考にして
LBItemFromPt
ListView_HitTest
を試しましたがreturnは-1になってしまいます。

以前に一度自分で質問の内容と同じものを作ったことがあり、
その時のソースから流用したためNM_CLICKになっているのだと思います。
うろ覚えですがそのときにListViewからComboBoxの項目を選択状態にするという仕様と
ComboBoxからListViewを選択状態にしたうえでさらにクリックするというのを作りました。
他にもいろいろ仕様がありそうしました。
結局動作が鈍くその部分のソースは書き捨ててしまいました。

ただ今回はDialogBoxマクロのプロシージャ内でやってるのが関係しているのかできないです。

補足日時:2005/03/16 14:27
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A