いつも、お世話になります。
早速質問させていただきたいのですが、
リストコントロールを用いてアラートを表示するプログラムを作成しています。
そこで、パラムごとに情報を書きこんでいく際に、
書き込む情報として”正常””注意””警告”と言う文字列を用意しています。
そこで、なにか、イベントが起こると、どれかひとつ表示させるのですが、
表示するさいに、たとえば”正常”だったら、青色表示で、という風に、文字の色を変えたいの
ですが、、、
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
文字列に何が入ってるか判断する。
または、アプリケーション定義の32ビット値を使用する。
とかかな?
ありがとうございます。
そうなんですよねぇ、文字列の判定をしたいのですが、、、
case CDDS_ITEMPREPAINT:
if (plvcd->iSubItem)
{
plvcd->clrText = RGB(255, 0, 0);//色は適当
plvcd->clrTextBk = RGB(0, 0, 0);
*pResult = CDRF_SKIPDEFAULT;
}
ここの部分で判定を入れればよいのだと思うのですが、
>アプリケーション定義の32ビット値を使用する
コレは具体的にどうやるのでしょうか??
初心者な質問ですいませんが、おしえてください
やり方はいくつかあると思うけど、たとえば・・
>文字列に何が入ってるか判断する
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)
{
// 正常;
}
返事が遅くなってすいません。
レスありがとうございます。
早速試してみたところ、
CListCtrl& theList = GetListCtrl();のところで、
error C2065: 'GetListCtrl' : 定義されていない識別子です。
と、コンパイルエラーが起きてしまいます。
すいません、ヘルプを見ていたのですが、わからず、初心者な質問ですが、ご助言願います。
> CListCtrl& theList = GetListCtrl();のところで、
> error C2065: 'GetListCtrl' : 定義されていない識別子です。
> と、コンパイルエラーが起きてしまいます。
通りすがっちゃいますが以下を見るとGetListCtrlはCListViewのメンバー函数の様ですが?
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/wcemfc/htm/clistvw_3.asp
こん!<=^・^=>
サンプルはあくまでもサンプルだから、、、
なにをやってるのかプログラムを読んで自分の目的に合わせないと駄目でしょう。
今回の場合はGetDlgItem(IDC_LIST1)等でポインタを取得するしかないのかな?
ポインタだとまだ使えないけどね。(^_^;
>と、コンパイルエラーが起きてしまいます。
おっと、ごめんなさい。CAlertView を CListView の
派生と勘違いしてました。
>サンプルはあくまでもサンプルだから、、、
フォローありがとです。^^;>NEG(ねぐ)さん。