CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

超级解霸的菜单渐变效果如何实现?

楼主xthmpro_cn([可人])2001-12-15 10:24:21 在 C++ Builder / 基础类 提问

用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

相关问题

  • 有谁做出过类似于超级解霸2000+的彩色渐变菜单?
  • 超级解霸
  • 东方影都的由下角托架菜单、windowsd的开始菜单、超级解霸的菜单的左边的长条怎末做?
  • 怎样做像超级解霸那样跟窗体共用背景图片的菜单
  • 超级解霸的问题
  • 关于超级解霸2001的问题!
  • 谁有菜单渐变的代码?谢了
  • 求:PopupMenu上的渐变色菜单制作
  • 谁有菜单背景渐变的代码?就是当鼠标移动到菜单前就会出现渐变的效果的。
  • 请问怎样实现菜单的渐变?就是鼠标移动到一个菜单的时候就出现一个渐变的选单背景。谢了。

关键词

  • vc++
  • 渐变
  • bcb
  • 效果
  • top
  • acanvas
  • arect
  • 菜单
  • lineto
  • 实现

得分解答快速导航

  • 帖主:xthmpro_cn
  • VSaber

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo