超级解霸的菜单渐变效果如何实现?
用VC++打开它的EXE文件可以看到标准的菜单,没有渐变效果,显然渐变效果是使用程序做成的。请问如何实现?
请多指教?
问题点数:20、回复次数:9Top
1 楼781014(城北的风)回复于 2001-12-15 20:20:35 得分 0
这是研究BCB的地方你来错地方了哟。Top
2 楼781014(城北的风)回复于 2001-12-15 20:28:52 得分 0
这是研究BCB的地方你来错地方了哟。Top
3 楼xthmpro_cn([可人])回复于 2001-12-17 19:15:16 得分 0
不是说VC++可以实现的东西bcb都可以实现吗?Top
4 楼VSaber(☆浪人☆)回复于 2001-12-17 21:00:53 得分 20
自画菜单阿,这方面的资料太多了!
给你一段代码:
//////////////////////自画菜单函数/////////////////////////////////
/////////////////// by VSaber ////////////////////////////////
void __fastcall TForm1::MyDrawItem(TObject *Sender, TCanvas *ACanvas,
TRect &ARect, bool Selected)
{
HDC hDC;
AnsiString strCaption = ((TMenuItem*)Sender)->Caption;
int MyIndex = ((TMenuItem*)Sender)->MenuIndex;
if(((TMenuItem*)Sender)->Caption != "-")
{
if(Selected)
{
ACanvas->Pen->Color = clHighlightText; //画凹凸框线
ACanvas->MoveTo( 1, ARect.Bottom - 1);
ACanvas->LineTo( 1, ARect.Top + 1);
ACanvas->LineTo( 18, ARect.Top + 1);
ACanvas->MoveTo( 20, ARect.Bottom - 1);
ACanvas->LineTo( ARect.Right - 1, ARect.Bottom - 1);
ACanvas->LineTo( ARect.Right - 1, ARect.Top + 1);
ACanvas->Pen->Color = clBtnShadow;
ACanvas->MoveTo( 18, ARect.Top + 1);
ACanvas->LineTo( 18, ARect.Bottom - 1);
ACanvas->LineTo( 1, ARect.Bottom - 1);
ACanvas->MoveTo( ARect.Right - 1, ARect.Top + 1);
ACanvas->LineTo( 20, ARect.Top + 1);
ACanvas->LineTo( 20, ARect.Bottom - 1);
ImageList1->Draw( ACanvas, 2, ARect.Top + 2, MyIndex, true);
ACanvas->Brush->Style = bsClear; //画具有立体感觉的菜单caption
ACanvas->Font->Color = clCaptionText;
hDC = ACanvas->Handle;
DrawText(hDC,
strCaption.c_str(),
strCaption.Length(),
&TRect(ARect.Left + 27, ARect.Top + 4, ARect.Right, ARect.Bottom),
DT_LEFT);
ACanvas->Font->Color = clBlack;
hDC = ACanvas->Handle;
DrawText(hDC,
strCaption.c_str(),
strCaption.Length(),
&TRect(ARect.Left + 26, ARect.Top + 3, ARect.Right, ARect.Bottom),
DT_LEFT);
}
else
{
ACanvas->Brush->Color = clBtnFace;
ACanvas->FillRect( ARect);
hDC = ACanvas->Handle;
DrawText(hDC,
strCaption.c_str(),
strCaption.Length(),
&TRect(ARect.Left + 26, ARect.Top + 3, ARect.Right, ARect.Bottom),
DT_LEFT);
ImageList1->Draw( ACanvas, 2, ARect.Top + 2, MyIndex, false);
}
}
}Top
5 楼pengju(鹏举)回复于 2001-12-18 08:23:48 得分 0
void __fastcall TForm1::MyDrawItem(TObject *Sender, TCanvas *ACanvas,
TRect &ARect, bool Selected)
调用时参数怎么填。Top
6 楼VSaber(☆浪人☆)回复于 2001-12-19 21:24:37 得分 0
这是处理你没一个menuItem的drawitem的事件呀!Top
7 楼VSaber(☆浪人☆)回复于 2001-12-19 21:25:46 得分 0
每一个menuitem的事件指向这个函数就是了!Top
8 楼axlrose(枪炮与玖瑰)回复于 2001-12-20 15:34:56 得分 0
xthmpro_cn(小田惠美) 说得太好了,我们用BCB就不能实现吗?加油吧__for bcb Top
9 楼VSaber(☆浪人☆)回复于 2001-12-20 23:40:25 得分 0
好像除了写vxd不行以外,bcb其他的都行吧,至于写vxd是因为涉及到一个版权问题,bcb才不能编译的!Top




