自绘TPopupMenu出现白色边框
我继承TPopupMenu ,使用OwnerDraw = TRUE; 自绘菜单项,但是外面的白色边框该怎样绘制?
上代码:
//头文件
class TPopMenu : public TPopupMenu
{
private:
// TBitmap *m_pPicNormal, *m_pPicHover, *m_pPicChecked;
TFont *m_pFntText;
COLORREF m_clrNormal, m_clrHover, m_clrBreak, m_clrFrame;
public:
__fastcall TPopMenu(TComponent* Owner);
__fastcall ~TPopMenu();
void CreateCustomMenuItem( String strCaption, TNotifyEvent aClickEvent=NULL,
int subIndex=-1, bool bEnbaled=true, bool bChecked=false, int iTag=-1 );
void ClearMenuItem();
void __fastcall OwnerDrawItem(TObject* Sender, TCanvas* ACanvas, const TRect &ARect, TOwnerDrawState State);
void __fastcall OwnerMeasureItem(TObject* Sender, TCanvas* ACanvas, int &Width, int &Height);
};
//添加项 在添加项中 OnAdvancedDrawItem 与OnMeasureItem 实现自己绘制
void TPopMenu::CreateCustomMenuItem( String strCaption, TNotifyEvent aClickEvent,
int subIndex, bool bEnabled, bool bChecked, int iTag )
{
TMenuItem * pItem = new TMenuItem( this );
pItem->Caption = strCaption;
pItem->OnAdvancedDrawItem = OwnerDrawItem;
pItem->OnMeasureItem = OwnerMeasureItem;
pItem->OnClick = aClickEvent;
pItem->Checked = bChecked;
pItem->Enabled = bEnabled;
pItem->Tag = iTag;
if( subIndex==-1 )
Items->Add( pItem );
else
Items->Items[subIndex]->Add( pItem );
}
void __fastcall TPopMenu::OwnerDrawItem(TObject* Sender, TCanvas* ACanvas, const TRect &ARect, TOwnerDrawState State)
{
//绘制背景
if( State.Contains(odSelected) && !State.Contains(odDisabled) ){
//高亮项
m_pFntText->Color = m_clrHover;
ACanvas->Brush->Color = RGB(78,89,87);
ACanvas->FillRect(ARect);
}
else{
if( State.Contains(odDisabled) ){
//禁用项
m_pFntText->Color = CLR_DISABLE;
}
else{
//常规项
m_pFntText->Color = m_clrNormal;
}
ACanvas->Brush->Color = RGB(123,45,90);
ACanvas->FillRect(ARect);
}
if( pItem->IsLine() ){
ACanvas->Pen->Color = m_clrFrame;
ACanvas->MoveTo( rectDraw.left+6, rectDraw.top+2 );
ACanvas->LineTo( rectDraw.right-6, rectDraw.top+2 );
}
else{
TFont *oldFont = ACanvas->Font;
ACanvas->Font = m_pFntText;
ACanvas->Brush->Style = bsClear;
ACanvas->TextRect( ARect, rectDraw.left+24, rectDraw.top+6, pItem->Caption ); //输出菜单文字
ACanvas->Font = oldFont;
}
}
void __fastcall TPopMenu::OwnerMeasureItem(TObject* Sender, TCanvas* ACanvas, int &Width, int &Height)
{
//这个函数空的。。。
}