http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200709/07090039.txt
先日の続きなのですが、
1列目を点滅させることはできますが。
他の列を点滅させること方法が分からないことに
気づきました。
どなたか教えてくださいませんか?
MFC Visual C++2005
なぜ?
私のサンプルでは好きな列を指定することが出来ていますよ?
>pList->SetItemData(this->m_row, 0);
SetItemDateの第一引数で決めている。
OnNMCustomdrawList1はpNMLVCD->nmcd.lItemlParamが1か2のときだけ動く。
列は見ていない。
>SetItemDateの第一引数で決めている。
のは行ですよね?
ここを1,や2に変えると
2,3行目がかわるのはわかりました。
でも列でいうところの0列目の2,3行目が点滅するんです。
列の1列や2列を点滅させるにはどうしたらよろしいんですか?
なんか間違ってますかね?
pNMLVCD->iSubItemの値をみても0しかきてないみたいです。
なぜかボクの書いたコードでは0列しか点滅してません。
Blueさんの説明だと行全体が点滅すると書いてあるのに?
ん?なぜなんだ?
あー列だったのですね。
一番簡単なのは設定している1、2、0という値に列の情報ももたせるとか。
私なら、4バイトの上位2バイトは列情報、下位2バイトに色情報となるようにするかなぁ。
>一番簡単なのは設定している1、2、0という値に列の情報ももたせるとか。
どういうことですか?
もう少し、詳しく教えていただけると!
いっそのこと、itemdataを使わないで、
メンバ変数に行、列、色の情報をもったほうがわかりやすいかな。
暇があればまたサンプル書きますけど。
お願いします!
できたら早くお願いします!
馬鹿チンでごめんなさい。
m(__)mm(_"_)mm(_@_)m,
>できたら早くお願いします!
こういう回答者の都合を考えないようはことは言わないほうがいいです。
現に回答する気が萎えました。
とりあえず、どの列かをメンバ変数で覚えておけば一応はできます。
int m_col;
◎OnNMCustomdrawList1
switch (pNMLVCD->nmcd.lItemlParam)
{
case 1:
if (pNMLVCD->iSubItem == this->m_col)
{
pNMLVCD->clrText = RGB(0x00, 0x00, 0x00);
pNMLVCD->clrTextBk = RGB(0xff0, 0x00, 0x00);
*pResult = CDRF_NEWFONT;
}
else if (pNMLVCD->iSubItem > this->m_col)
{
pNMLVCD->clrTextBk = ::GetSysColor(COLOR_WINDOW);
pNMLVCD->clrText = ::GetSysColor(COLOR_WINDOWTEXT);
*pResult = CDRF_NEWFONT;
}
break;
case 2:
if (pNMLVCD->iSubItem == this->m_col)
{
pNMLVCD->clrText = RGB(0xff, 0x00, 0x00);
pNMLVCD->clrTextBk = RGB(0x00, 0x00, 0x00);
*pResult = CDRF_NEWFONT;
}
else if (pNMLVCD->iSubItem > this->m_col)
{
pNMLVCD->clrTextBk = ::GetSysColor(COLOR_WINDOW);
pNMLVCD->clrText = ::GetSysColor(COLOR_WINDOWTEXT);
*pResult = CDRF_NEWFONT;
}
break;
}
break;
void CXXXDlg::OnBnClickedButton1()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
this->m_row = 2;
this->m_col = 1; // ☆
this->m_count = 0;
this->SetTimer(1, 200, NULL);
}
>こういう回答者の都合を考えないようはことは言わないほうがいいです。
>現に回答する気が萎えました。
すいません、恐縮なこといってしまいましてm(__)mm
Blueさんの方法ぽいのも私も考えたんですが、
ちょっと私のプログラムがおかしいのかもしれませんが、
↑でもちょっと書いたんですが、
pNMLVCD->iSubItem の値が0しか来ないです。
よって1を指定しても無反応です。
Blueさんの説明では行全体が点滅するように
かいていますが私のプログラムでは0列しか点滅していません。
私のプログラムのせいかもしれないのですが。
いちど試して頂けませんか?
また何が原因か考えられたら教えてもらえるとありがたいです。
もしかして、文字列が入っていない右側のことを言っていますか?
私の例は行全体といってもカラムが2列あればそこまでしか点滅しません。
そこまでやるとなるとカスタムドローではできないかも。
すいません、返信遅れました。文字列は入っています。
Blueさんも分からないということはやはり。こちらのミスでしょうか?
なにか分かったら教えてください!
Blueさん。
結果だけ申しますと、Blueさんのコードにはなんら問題ないことが
分かりました。
問題なのは自分の書いてるコードでした。
列が4列あるリストビューで1列目と3列目を
他の色に設定してます。一列目桃色,3列目水色。
それで3列目を点滅させたい場合、後に3列目水色にするコードが
点滅した動作をしたあとに再描画していて一見外からは何も変化してないように画面上から見えていたというのが原因でした。
一応原因が分かりましたので解決は押させていただきます。
ありがとうございました!しかし、回避法についてはまだ分かりかねちゃうので
お暇でしたらお教えして頂ければとありがたいです。
お手数かけて申し訳ございませんでした!!!!!
本当に申し訳ありません!
失礼します!
何とか自力で描画も解決することができました!
Blueさん。
総合的に解決とさせて頂きます!
if(お騒がせしました!&&ありがとうございました!)
{
AfxMessageBox("♥♥♥♥♥♥♥");
}
AfxMessageBoxの中はハートが七個ならんでると想像してください。
ハートの出し方わかんねーやw
ツイート | ![]() |