こんにちは
CListViewのオーナードローはレポート表示の時しか出来ないのですか?
void COwnerListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl& wndList = GetListCtrl( );
// イメージリスト
m_ImgList.Create( 32, 32, ILC_COLOR24, 0, 1 );
CBitmap bitmap; bitmap.LoadBitmap( IDB_BITMAP );
for( int j = 0; j < 5; j++ ) m_ImgList.Add( &bitmap, RGB( 0, 0, 0 ) );
wndList.SetImageList( &m_ImgList, LVSIL_NORMAL );
// アイテム追加
wndList.InsertColumn(0, テスト, 150 );
wndList.InsertItem(0, あーーーーーー);
wndList.InsertItem(0, いーーーーーー);
wndList.InsertItem(0, うーーーーーー);
wndList.InsertItem(0, えーーーーーー);
wndList.InsertItem(0, おーーーーーー);
}
void COwnerListView::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CListCtrl& wndList = GetListCtrl( ); //ここにブレークポイントを置いて
}
ヘッダーに
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
を追加してあります
PreCreateWindow内で
// スタイルの設定
cs.style |= ( LVS_ICON | LVS_OWNERDRAWFIXED ); ( A )
cs.style |= ( LVS_REPORT | LVS_OWNERDRAWFIXED ); ( B )
( A )の時はブレークポイントで停止しませんが、
( B )の時はブレークポイントで停止します
アイコン表示の時にオーナードローを行いたいのでどのようにすれば良いでしょう?
まだオーナードローの事がよくわかっていないので、
日本語のMFCのサンプル等の在処、知りませんか?
win2000 SP3
VC6.0 SP5
MFC使用
宜しくお願いします。
> CListViewのオーナードローはレポート表示の時しか出来ないのですか?
MSDNのCListCtrl::Createのところに、
「LVS_OWNERDRAWFIXED
レポート ビューのアイテムをオーナー ウィンドウが描画できるようにします。」
とあります。
カスタムドローならアイコン表示のときでも出来るようです。(Windows2000にて確認)
オーナードローに比べると自由度は低いですが、
目的によってはカスタムドローで十分です。
> オーナードローに比べると自由度は低いですが、
↑これは間違いかも。
kazuma さん回答ありがとうございます。
オーナードローはできないんですね。
カスタムドローはよくわからないのですが、
日本語&MFCで詳しいサンプルありますか?
できればkazuma さんが試したソースを見ることは出来ないですか?
よろしくお願いします
私が試したのは以下のようなコードです。
前に作ったアプリの一部です。アイテムごとにテキスト部分の背景色を変えています。
元のアプリはレポート形式のリストビューでしたが、アイコン形式でもうまくいきました。
NM_CUSTOMDRAW通知を処理している部分のコードです。
(ON_NOTIFYマクロを使ってハンドラを設定しています。)
BOOL C*Dlg::OnListNotifyCustomDraw(NMHDR * pNotifyStruct, LRESULT * pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNotifyStruct;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
lplvcd->clrTextBk = (lplvcd->nmcd.dwItemSpec % 2) ? RGB(255,255,255) :
RGB(200,255,200);
lplvcd->clrText = RGB(0,0,0);
*pResult = CDRF_NEWFONT;
break;
default:
*pResult = CDRF_DODEFAULT;
break;
}
return FALSE;
}
カスタムドローに関する日本語の詳しい解説というのはあまり無いようです。
有名な「猫でも~」( http://www.kumei.ne.jp/c_lang/index.html)の261章に
そこそこ詳しい解説がありますが。
きちんとした解説は英語版のMSDNを読むしかないと思います。
ありがとうございます
OnListNotifyCustomDrawなどカスタムドローの関数はClassWizardでは
書いてくれないみたいですね。
勉強します。わからないことがあったらマタきます。