掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストビューのバックを点滅表示 (ID:66370)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
サンプル ダイアログ上に ・リストビュー ・ボタン がある場合、プロパティウィンドウからメッセージを追加 ダイアログ(メッセージ) ・WM_TIME→OnTime リストビュー(管理イベント) ・NM_CUSTOMDRAW→OnNMCustomdrawList1 ボタン(管理イベント) ・BN_CLICKED→OnBnClickedButton1 ダイアログのメンバ変数として int m_row; // 対象行 int m_count;// 点滅回数 を追加。 ボタンを押すと2行目全体が[赤黒]→[黒赤]→[赤黒]→[黒赤]→[白黒]と色が変わる。 SetItemData(カスタムドロー時のpNMLVCD->nmcd.lItemlParam)を使って色をどれにするかの状態を決めています。 ・0→[白黒](デフォルト) ・1→[赤黒] ・2→[黒赤] BOOL CXXXXDlg::OnInitDialog() { (省略) // TODO: 初期化をここに追加します。 CListCtrl* pList = static_cast<CListCtrl*>(this->GetDlgItem(IDC_LIST1)); pList->InsertColumn(1, _T("AAAA"), 0, 100); pList->InsertColumn(2, _T("BBBB"), 0, 100); int n; n = pList->InsertItem(0, _T("aaaa")); pList->SetItemText(n, 1, _T("bbbb")); n = pList->InsertItem(0, _T("cccc")); pList->SetItemText(n, 1, _T("dddd")); n = pList->InsertItem(0, _T("eeee")); pList->SetItemText(n, 1, _T("ffff")); n = pList->InsertItem(0, _T("gggg")); pList->SetItemText(n, 1, _T("hhhh")); return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 } void CListTestDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult) { //LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); // TODO: ここにコントロール通知ハンドラ コードを追加します。 LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); switch(pNMLVCD->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult = CDRF_NOTIFYSUBITEMDRAW; break; case CDDS_ITEMPREPAINT: *pResult = CDRF_NOTIFYSUBITEMDRAW; break; case CDDS_ITEMPREPAINT | CDDS_SUBITEM: *pResult = CDRF_DODEFAULT; switch (pNMLVCD->nmcd.lItemlParam) { case 1: pNMLVCD->clrText = RGB(0x00, 0x00, 0x00); pNMLVCD->clrTextBk = RGB(0xff0, 0x00, 0x00); *pResult = CDRF_NEWFONT; break; case 2: pNMLVCD->clrText = RGB(0xff, 0x00, 0x00); pNMLVCD->clrTextBk = RGB(0x00, 0x00, 0x00); *pResult = CDRF_NEWFONT; break; } break; default: *pResult = CDRF_DODEFAULT; break; } //*pResult = 0; } void CListTestDlg::OnBnClickedButton1() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 this->m_row = 2; this->m_count = 0; this->SetTimer(1, 200, NULL); } void CListTestDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 if (nIDEvent == 1) { CListCtrl* pList = static_cast<CListCtrl*>(this->GetDlgItem(IDC_LIST1)); if (this->m_count == 4) { pList->SetItemData(this->m_row, 0); this->KillTimer(nIDEvent); } else { pList->SetItemData(this->m_row, this->m_count++ % 2 ? 2 : 1); } } CDialog::OnTimer(nIDEvent); } なお、 >this->SetTimer(1, 200, NULL); や >・0→[白黒](デフォルト) >・1→[赤黒] >・2→[黒赤] は直接値(いわゆるマジックナンバー)をソースコードで使っているので、本来ならenumや#defineで定義した 値を使ったほうが良いでしょう。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.