MFC中窗口美化函数

 
窗口的动画效果其实我们只要会用一个windows的api就可以了,下面我来介绍一下这个api
函数原型:
BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能:
能在窗口打开或者隐藏时产生动画效果。
参数含义:
hWnd:指定产生动画效果的窗口句柄。
dwTime:指明动画持续时间(以毫秒计算),动画的标准时间应该为200毫秒。
dwFlags:指定动画类型。这个参数可以是一个或者多个标志的组合。以下是该参数的取值:
                 AW_SLIDE:使用滑动类型。缺省则为滚动类型。当使用AW_CENTER标志时,这个标志被忽略。
                 AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不能使用这个标志。
                 AW_BLEND:实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
                 AW_HIDE:隐藏窗口,缺省则为显示窗口。
                 AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口;
                 AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;
                 AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;
                 AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志被忽略;

如果函数调用成功,则返回非零值,否则返回值为零。
注意:在窗口使用了窗口边界,窗口已经可见仍要显示窗口,窗口已经隐藏仍要隐藏窗口的条件下,函数会调用失败。
 
还有两个api函数可能对你的动感界面有帮助
BOOL DrawAnimatedRects(HWND hwnd, int idAni, CONST RECT *lprcFrom, CONST RECT *lprcTo);
就字面意思窗口从这个区域移动到另一个区域,这个和movewindow可是不同 这个是有动画效果的
第二个参数就是用来设置这个动画效果的。可是好像这个参数只有一个值IDANI_CAPTION有效果,而且移动的效果也仅限于标题栏的移动效果,最小化和最大化就是用的这个函数。还有一个参数为IDANI_OPEN 但是没发现有什么效果。
还有一个就是有关窗口的半透明的问题
BOOL SetLayeredWindowAttribut es(              
      HWND hwnd,
      COLORREF crKey,
      BYTE bAlpha,
      DWORD dwFlags
);

hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值:
               当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
               当取值为LWA_COLORKEY时,Alpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。
               LWA_ALPHA = 0x2
               LWA_COLORKEY=0x1
               也可以取两个值的组合:LWA_ALPHA Or LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。

要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性
(旧的sdk没有定义这个属性,所以可以直接指定为0x80000).
WS_EX_LAYERED = 0x80000           
下面是一段例子代码 在vs2005 WTL 8.0编译通过的
::SetWindowLong(dlgMain.m_hWnd,GWL_EXSTYLE,
      ::GetWindowLong(dlgMain.m_hWnd,GWL_EXSTYLE)^0x80000); //^WS_EX_TRANSPARENT WS_EX_TOPMOST
    SetLayeredWindowAttribut es(dlgMain.m_hWnd,0,128,2);
   看这个绿色注释部分 也是窗口的扩展属性。
WS_EX_TRANSPARENT 就是那种“看的见 却摸不着”的窗口样式。后面这个属性是一直置顶。
如果你使用了MFC,则不必这么麻烦,直接
ModifyStyleEx(0, WS_EX_LAYERED);
SetLayeredWindowAttribut es(dlgMain.m_hWnd,0,128,2);
两行代码即可解决
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值