hoodlum1980 ( 發發 ) 的技术博客

——ZJU: 百十载,求是魂,求是创新(领域:c/c++, c#, .NET, Compact Framework, WinCE,Matlab,PhotoShop,数字图像处理,电力系统自动化,继电保护)
posts - 46, comments - 42, trackbacks - 0, articles - 1
      BalloonTip通常出现在位于屏幕右下角的Tray(成为通知栏,或系统托盘)的Icon上,比如用户插拔USB设备时的气泡提示。该函数位于Shell32中,是通过调用下面这个API函数实现的, BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata ); 该函数用于控制对TrayIcon进行控制,可以弹出BalloonTip。然后却只能局限于Tray位置。而在QQ的聊天对话框中,我们发现如果不输入内容而试图发送消息时,就会在按钮上弹出这样的Tip。为此,我在C#中写了一个类似的窗口,可以在任意位置浮出,效果如下:
      

      这是测试程序的截图。在实现时,略微参考了codeproject上的仿MSN浮出窗口的代码。其涉及的主要麻烦是,为了提供足够灵活的接口,应该如何处理窗口上各个元素布局。为了简单期间,这里仅仅提供了“箭头”位于右下角的布局方式。(很显然该箭头一共可以有8个停靠位置)。
     (1)在弹出时,不夺走其他窗口焦点。为此使用了API的ShowWindow函数: ShowWindow(this.Handle, SW_SHOWNOACTIVATE);
     (2)窗体上一共包含4项主要内容:图标,标题,内容文本,关闭按钮。用户可以配置他们,例如选择图标(可以由外部设置或者使用内置图标),是否显示关闭按钮,是否自动关闭(如果把TimeoutMilliSeconds属性设为负数则不会自动关闭,只能通过CloseButton关闭),各种颜色,字体等。另提供一个BalloonClick事件,通知外部用户点击事件。
     (3)绘制CloseButton的位图时,由于图中具有透明色,因此需要在绘制时指定透明色,相当于蒙版的作用。否则透明色会被绘制到窗体上导致窗体透明那个。
     (4)弹出该窗口,主要使用ShowAt()函数。里面需要一些参数。如果需要进一步设置其他属性,可以单独进行设置。

       源代码的下载链接: 
       http://files.cnblogs.com/hoodlum1980/JDL.UILib_BalloonTip_VS7.rar
Tag标签: 控件

Feedback

#1楼    回复  引用    

2008-06-25 22:04 by fylsuper [未注册用户]
写得不错呀,学习,学习
我想问一上,C# 中的Tooltip是否可以自己更改气泡方向呢.
我要在特定位置显示,将气泡指向特定控件上
谢谢啦~!~!~!~!

#2楼 [楼主]   回复  引用  查看    

2008-07-07 15:15 by hoodlum1980      
@fylsuper

如果是像我这样自己绘制,当然是可以,不过我需要再检查一下Platform SDK中有没有这方面的API,以免做重复性工作。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-13 10:55 编辑过