请问:如何做那种桌面精灵的软件?

JackLucifer 2002-03-25 12:32:41
像Office助手那样的精灵软件如何实现?
关键是:如何实现像Office (XP)中那样的透明窗体。
还有,如何让它和应用程序本身交换信息呢?通过多线程吗?
有没有类似的组件/控件?
据说,MS Agent可以,但是那些角色能自己制作吗?

2002-03-24
Jack Lucifer

...全文
323 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aawolf 2002-03-26
  • 打赏
  • 举报
回复
一般用AGENT就可以了,另外你也可以编辑你自己的角色,另外网上页有不少的角色文件。
如果你想自己做,那就自己做个不规则窗体,不要用DirectX,DirectX窗口并不是真正的窗口,它等于在你的桌面上开天窗,直接写显存去了,控制分辨率和调色板都很麻烦。这种低速刷新的要求下,一般的GDI就可以了。
woainihaha 2002-03-26
  • 打赏
  • 举报
回复
哈哈,不要使用DirectX,除非你能很好的控制他!就用窗体就可以了,一般来说这种动画幅面不大,而且更新频率不高,使用Canvas就足够了,而且还容易控制!可以在项目内新建一个无标题和边框的窗体,并设置成顶部就可以了,这样可以随你的程序出现和消失,响应也比较容易!但是这种精灵只能使用于本程序内部!如果要制作能运行于其他程序之间的的精灵,最好定制DLL文件,再调用,之间采用消息机制,我觉得Agent也是采用这种办法!但是这种办法的缺点是:能响应的动作得事先写好,在调用的时候不能出错,不能自己随时定制想要的东西!
举个例子,你在使用Agent的时候,没有办法使用你想要的动作,也无法添加更多的动作,就那么几种:高兴,查找,迷惑…… 不过大多数情况下,你可以不用理会这些事情,你可以自己定制一个动作,然后使用Agent的任意一个动作(比如高兴)来调用他!如果你没有特殊的要求的话,还是使用Agent吧!一般来说他的动作函数的数目是够用了!
呵呵,不过无论采用那种办法,都要捕获背景的改变(Agent例外),这是一个很烦的问题,当然还有定制精灵的重绘!
呵呵,我胡说八道几句
JackLucifer 2002-03-26
  • 打赏
  • 举报
回复
那么是用DirectX直接在桌面上作画吗?
关于这个我有一点不太确定:
我可以直接在桌面上用DirectX作画,但如果此时得桌面是被其他应用程序占据,
比如说:某个应用程序被最大化,又或者某个全屏得游戏在运行,
此时,DirectX还是能够将精灵图象画在最上面吗?
又该如何避免和全屏幕游戏抢桌面的问题呢?

还有,我想让这个精灵在程序结束后依然可以保持运行,
那么是否得要做两个exe文件,并且在它们之间建立通信呢?

2002-03-26
Jack Lucifer
zhangchao_7622 2002-03-26
  • 打赏
  • 举报
回复
我的透明窗体代码:
TCanvas *dtCanvas = new TCanvas;
dtCanvas->Handle=GetDC(0);
Graphics::TBitmap *bitmap=new Graphics::TBitmap;
bitmap->Width=Width;
bitmap->Height=Height;
int nColors=GetDeviceCaps(Canvas->Handle,SIZEPALETTE);
LOGPALETTE* logPal=(LOGPALETTE*)new Byte[sizeof(LOGPALETTE)+(nColors-1)*sizeof(PALETTEENTRY)];
logPal->palVersion=0x300;
logPal->palNumEntries=(Word)nColors;
GetSystemPaletteEntries(Canvas->Handle,0,nColors,logPal->palPalEntry);
bitmap->Palette=CreatePalette(logPal);
delete[] logPal;
TRect src=BoundsRect;
TRect dest=Rect(0,0,Width,Height);
bitmap->Canvas->CopyRect(dest,dtCanvas,src);
ImageScreen->Picture->Bitmap =bitmap;
delete bitmap;
delete dtCanvas;
woainihaha 2002-03-25
  • 打赏
  • 举报
回复
对了,忘了告诉你,之间的通信最好采用消息机制!这样系统占用资源较少,而且比较容易实现动态,不用采用时钟控件!建议你在制作之前把要执行的动作作好字典(因为动作相对较多),当然用Agent就不用考虑这些了!
woainihaha 2002-03-25
  • 打赏
  • 举报
回复
说句实话,用Agent很简单,但是制作的动画却很难!!也不支持ALPHA通道!不如自己做,但是工作量很大!我做过类似的程序,工作量很大,真正处理起来比想象中难!呵呵,选择什么看你自己的!至于图象处理和透明的效果都很容易,很多图象处理的书上都有,去看看吧!
JackLucifer 2002-03-25
  • 打赏
  • 举报
回复
可以利用Agent创建自己的精灵角色吗?
又该如何创建呢?

在3/25,也就是今天BCB组的帖子居然暴涨。
而且时间段比较集中。
难道大家都是在今天才有问题的吗?

笑话而已。:-)

2002-03-25
Jack Lucifer
dycdyc123 2002-03-25
  • 打赏
  • 举报
回复
MSAgent 是可以的!

做一个Agent 文件!
shymeng 2002-03-25
  • 打赏
  • 举报
回复
搜贴Agent

13,825

社区成员

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

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