谁有杨勇的三句话搞定qq菜单的代码?有就贴出来

byship 2003-08-22 03:03:49
谢谢大家,要贴出来,不要用发短信的方式
...全文
39 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wkoji 2003-08-24
  • 打赏
  • 举报
回复
好东西,顶
bluecyclone 2003-08-23
  • 打赏
  • 举报
回复
大哥,把代码贴出来吧!!!有人点名要你的东西!~哎!~
sncel 2003-08-23
  • 打赏
  • 举报
回复
一年多的代码还有人要,大家用我的组件吧。

http://snpack.fykj.com

当然要代码我也会给你的。
http://snpack.fykj.com/OtherCode/CB6Menu.rar
afterchen 2003-08-23
  • 打赏
  • 举报
回复
已下载,看了一下。果然三句话,好东东,不错。
梦回童年001 2003-08-23
  • 打赏
  • 举报
回复
UP
airspace 2003-08-23
  • 打赏
  • 举报
回复
up,记录一下
shally5 2003-08-22
  • 打赏
  • 举报
回复
三句:

能实现?
能实现吗?
真能实现吗?
FallenAngel 2003-08-22
  • 打赏
  • 举报
回复
不是,也是自绘菜单,我见过的。
但现在一时不知道放哪儿去拉
pcclever 2003-08-22
  • 打赏
  • 举报
回复
我想他是不是找到了开始菜单的API??
我用的是win2000,点击开始,然后大家再看看QQ2003,的界面,和开始的菜单就是种类型的,我估计应该是这样的。
ch_builder 2003-08-22
  • 打赏
  • 举报
回复
老妖写得没错,楼主要的是三句,我学过优化组合,但我却如何也想不明白三句就做到那么复杂的菜单:(
bluecyclone 2003-08-22
  • 打赏
  • 举报
回复
楼上的三句,大了去了!哎~我也想知道三句怎么解决!
ccrun.com 2003-08-22
  • 打赏
  • 举报
回复
这是我程序里用的一些代码,在杨勇的代码基础上改了改。增加了在左边图上写文字的功能。呵呵。

PPM是一个PopupMenu,PPM的第二个菜单项的Break设为mbBreak。第一个菜单项标题为空(留作绘图用)
其中第一个菜单项的OnAdvancedDrawItem事件为 None1AdvancedDrawItem,OnMeasureItem事件为None1MeasureItem
从第二个菜单项开始的OnAdvancedDrawItem事件为 N1AdvancedDrawItem,OnMeasureItem事件为N1MeasureItem

Image2是画在左侧的图。


代码开始:

int DrawLeft=0;

void __fastcall TMainForm::N1AdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{
int MenuHeight; //菜单项的高度;菜单中所画图标的边距
TMenuItem *TempMenuItem = new TMenuItem(PPM);
TRect TempRect; //临时的矩形区域,程序中多次使用
String ShowCaption; //菜单项的标题
TempMenuItem=((TMenuItem *)Sender); //当前菜单的菜单项
ShowCaption=TempMenuItem->Caption; //获取菜单标题
MenuHeight=22; //此数值与在 OnMeasureItem 事件中设置的Height属性值相同
ACanvas->Brush->Color=TColor(RGB(0xD4,0xE6,0xC5));//设置菜单的背景色
ACanvas->FillRect(ARect); //填充背景
if(TempMenuItem->Caption=="-")//画分隔线
{
ACanvas->Pen->Color=clBtnShadow;
ACanvas->MoveTo(MenuHeight,ARect.Top+((ARect.Bottom-ARect.Top) / 2)-1);
ACanvas->LineTo(ARect.Right,ARect.Top+((ARect.Bottom-ARect.Top) / 2)-1);
ACanvas->Pen->Color=clBtnHighlight;
ACanvas->MoveTo(MenuHeight,ARect.Top+((ARect.Bottom-ARect.Top) / 2));
ACanvas->LineTo(ARect.Right,ARect.Top+((ARect.Bottom-ARect.Top) / 2));
}
ARect.Top=ARect.Top+1;
ARect.Bottom=ARect.Bottom-2;
if ((State.Contains(odSelected)==true)&&(State.Contains(odDisabled)==false))
{
ACanvas->Brush->Color=TColor(RGB(0x9b,0xbf,0x7e));//RGB(175,183,207);
ACanvas->Pen->Color=clBlack;
ACanvas->RoundRect(ARect.Left,ARect.Top,ARect.Right,ARect.Bottom,3,3);//圆角矩形选择菜单条
ACanvas->Pen->Color=clBtnShadow;
}
TempRect=Rect(ARect.Left+6,ARect.Top-3,ARect.Right,ARect.Bottom);//设置菜单标题的矩形区域
ACanvas->Brush->Style=bsClear;//设置画刷的填充样式为透明,这样画出的菜单标题就为透明底色
if (State.Contains(odSelected))
{
ACanvas->Font->Color=clBlack;
TempRect.Top=TempRect.Top+(TempRect.Height()-ACanvas->Font->Size)/2-1;
}
else
{
ACanvas->Font->Color==clBlack; //黑色字体
TempRect.Top=TempRect.Top+(TempRect.Height()-ACanvas->Font->Size)/2-2;
}
if (TempMenuItem->Default)
{
ACanvas->Font->Style<<fsBold;
}
if(ShowCaption!="-")
DrawText(ACanvas->Handle,ShowCaption.c_str(),-1,&TempRect,DT_LEFT );//|| DT_SINGLELINE || DT_VCENTER
//画出菜单项的标题
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::N1MeasureItem(TObject *Sender, TCanvas *ACanvas,
int &Width, int &Height)
{
Height=22;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::None1MeasureItem(TObject *Sender,
TCanvas *ACanvas, int &Width, int &Height)
{
Width=5;
DrawLeft=Image2->Width;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::None1AdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{
ACanvas->CopyRect(TRect(0,0,21,292),Image2->Canvas,TRect(0,0,21,292));
LOGFONT fontRec;
memset(&fontRec,0,sizeof(LOGFONT));
fontRec.lfHeight = -14;
fontRec.lfWeight = FW_BOLD;
fontRec.lfEscapement =2700; // 旋转文字的关键
lstrcpy(fontRec.lfFaceName,"Verdana");
HFONT hFont=CreateFontIndirect(&fontRec);
String strTemp=Application->Title + " by ccrun :-)";
::SelectObject(ACanvas->Handle,hFont);
::SetTextColor(ACanvas->Handle,RGB(0x47,0x75,0x3E));
::SetBkMode(ACanvas->Handle,TRANSPARENT);
::TextOut(ACanvas->Handle,20,05,strTemp.c_str(),lstrlen(strTemp.c_str()));
::DeleteObject(hFont);
}
ccrun.com 2003-08-22
  • 打赏
  • 举报
回复
你等着,我给你贴上来。
byship 2003-08-22
  • 打赏
  • 举报
回复
to ccrun(老妖)
那怎么画呢?
我也见过杨勇的那个程序,但是忘记保存下来
Behard 2003-08-22
  • 打赏
  • 举报
回复
我怎么不知道有这么一回事?
ccrun.com 2003-08-22
  • 打赏
  • 举报
回复
那不是三句话就实现的吧。
是自画菜单。
byship 2003-08-22
  • 打赏
  • 举报
回复
就像windows的开始菜单一样的
最左边有一竖条上面写windows pro.........
GaoLun 2003-08-22
  • 打赏
  • 举报
回复
QQ菜单有什么不一样的?

这样最简单了!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PopupMenu1->Popup(Button1->Left+Form1->Left,Button1->Top+Form1->Top);
}



^_^见笑了……
byship 2003-08-22
  • 打赏
  • 举报
回复
up

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧