CustomDrawn ActiveX control on CPropertyPage fails to draw itself
I have ATL activeX control (customdrawn syslistview32 control) on the
MFC PropertyPage dialog. This ActiveX control works in normal ATL/MFC
dialogs without problem, but on PropertyPage it doesn't draw itself.
I debugged this and noticed that my ActiveX control gets only the
CustomDraw notify with CDDS_PREPAINT draw stage.
What might be the problem here?
Here is the controls OnCustomDraw handler:
LRESULT CListViewEx::OnCustomDraw( int idCtrl, LPNMHDR pnmh, BOOL&
bHandled )
{
LPNMLVCUSTOMDRAW poLVCustomDraw = (LPNMLVCUSTOMDRAW)pnmh;
NMCUSTOMDRAW oCustomDraw = poLVCustomDraw->nmcd;
CListViewExRow* poRow;
CRect oRect;
if( idCtrl != IDC_SYSLISTVIEW_CONTROL )
{
return 0;
}
if( oCustomDraw.dwDrawStage == CDDS_PREPAINT )
{
return CDRF_NOTIFYITEMDRAW;
}
else if( oCustomDraw.dwDrawStage == CDDS_ITEMPREPAINT )
{
return CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYPOSTPAINT;
}
else if( oCustomDraw.dwDrawStage == (CDDS_ITEMPREPAINT|
CDDS_SUBITEM) )
{
poRow = GetRow( (long)oCustomDraw.dwItemSpec );
if( poRow )
{
poRow->DrawItem( oCustomDraw.hdc, poLVCustomDraw->iSubItem,
(long)oCustomDraw.dwItemSpec );
}
return CDRF_SKIPDEFAULT;
}
else if( oCustomDraw.dwDrawStage == CDDS_ITEMPOSTPAINT )
{
if( oCustomDraw.uItemState & CDIS_FOCUS )
{
moListView.GetItemRect( (long)oCustomDraw.dwItemSpec, &oRect,
LVIR_BOUNDS );
DrawFocusRect( oCustomDraw.hdc, &oRect );
}
return CDRF_SKIPDEFAULT;
}
return CDRF_DODEFAULT;
}