リストの色分け – プログラミング – Home

通知
すべてクリア

リストの色分け


しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

いつも、お世話になります。

早速質問させていただきたいのですが、
リストコントロールを用いてアラートを表示するプログラムを作成しています。

そこで、パラムごとに情報を書きこんでいく際に、
書き込む情報として”正常””注意””警告”と言う文字列を用意しています。

そこで、なにか、イベントが起こると、どれかひとつ表示させるのですが、
表示するさいに、たとえば”正常”だったら、青色表示で、という風に、文字の色を変えたいの
ですが、、、

BOOL CAlertView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
 LPNMLVCUSTOMDRAW plvcd = (LPNMLVCUSTOMDRAW)lParam;
 if (plvcd->nmcd.hdr.idFrom == IDC_LIST1)
 {
  switch (plvcd->nmcd.hdr.code)
  {
  case NM_CUSTOMDRAW:
   {
    switch (plvcd->nmcd.dwDrawStage)
    {
case CDDS_PREPAINT:
      *pResult = CDRF_NOTIFYITEMDRAW;
      return TRUE;
case CDDS_ITEMPREPAINT:
      if (plvcd->iSubItem)
 {
  plvcd->clrText = RGB(255, 0, 0);//色は適当
  plvcd->clrTextBk = RGB(0, 0, 0);
  *pResult = CDRF_SKIPDEFAULT;
      }
    }
  }
 }
}
return CFormView::OnNotify(wParam, lParam, pResult);
}

このように、色を変えるというプログラムは、かけたのですが、
判別をするという、アルゴリズムが思い浮かびません。。。

ちなみに、書くという部分は以下のように書いてあります。

int nValue = 0;
LV_ITEM lvi;

lvi.mask = LVIF_TEXT;
lvi.iItem = 0;

//アイテム1(重要度)
CString aa;
if(hantei==1||hantei==2)//判定
{
aa=正常;
}
else if(hantei==3)
{
aa=警告;
}
else
{
aa=注意;
}
char symbol[10];
strcpy(symbol,aa);
lvi.iSubItem = 0;
lvi.pszText = symbol;
nValue = mAlertCtrl.InsertItem( &lvi );

何か、いい方法はないのでしょうか??

ご教授ください。お願いします。

環境Win2000、MFC、MDI


引用解決済
トピックタグ
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

 文字列に何が入ってるか判断する。
 または、アプリケーション定義の32ビット値を使用する。
 とかかな?


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

ありがとうございます。

そうなんですよねぇ、文字列の判定をしたいのですが、、、

case CDDS_ITEMPREPAINT:
 if (plvcd->iSubItem)
 {
  plvcd->clrText = RGB(255, 0, 0);//色は適当
  plvcd->clrTextBk = RGB(0, 0, 0);
  *pResult = CDRF_SKIPDEFAULT;
 }

ここの部分で判定を入れればよいのだと思うのですが、

>アプリケーション定義の32ビット値を使用する

コレは具体的にどうやるのでしょうか??

初心者な質問ですいませんが、おしえてください


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

やり方はいくつかあると思うけど、たとえば・・

>文字列に何が入ってるか判断する
CListCtrl& theList = GetListCtrl();
if ( theList.GetItemText( plvcd->nmcd.dwItemSpec, 0) == _T(正常))
{
・・・・
}

>アプリケーション定義の32ビット値を使用する
CListCtrl& theList = GetListCtrl();
theList.SetItemData( nItem, 1); // 正常

CListCtrl& theList = GetListCtrl();
if ( theList.GetItemData( plvcd->nmcd.dwItemSpec) == 1)
{
// 正常;
}


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 22年前
投稿: 48
Topic starter  

返事が遅くなってすいません。

レスありがとうございます。

早速試してみたところ、

CListCtrl& theList = GetListCtrl();のところで、
error C2065: 'GetListCtrl' : 定義されていない識別子です。

と、コンパイルエラーが起きてしまいます。

すいません、ヘルプを見ていたのですが、わからず、初心者な質問ですが、ご助言願います。


返信引用
こん!
 こん!
(@こん!)
ゲスト
結合: 23年前
投稿: 49
 

> CListCtrl& theList = GetListCtrl();のところで、
> error C2065: 'GetListCtrl' : 定義されていない識別子です。
> と、コンパイルエラーが起きてしまいます。

通りすがっちゃいますが以下を見るとGetListCtrlはCListViewのメンバー函数の様ですが?

http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/wcemfc/htm/clistvw_3.asp

こん!<=^・^=>


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

 サンプルはあくまでもサンプルだから、、、
 なにをやってるのかプログラムを読んで自分の目的に合わせないと駄目でしょう。
 今回の場合はGetDlgItem(IDC_LIST1)等でポインタを取得するしかないのかな?
 ポインタだとまだ使えないけどね。(^_^;


返信引用
Shimura
 Shimura
(@Shimura)
ゲスト
結合: 22年前
投稿: 36
 

>と、コンパイルエラーが起きてしまいます。
おっと、ごめんなさい。CAlertView を CListView の
派生と勘違いしてました。

>サンプルはあくまでもサンプルだから、、、
フォローありがとです。^^;>NEG(ねぐ)さん。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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