AnimateWindow()

前段时间经常在论坛或者文档上面讨论AnimateWindow的使用,或者有说到98下面不能使用

的,或者有人说MSDN上面说98下一定能用的,我试了一下,2000下面我尚不能直接使用这

个函数,98下面更不能够了。察看了一下User32.dll,那个函数又确确实实的存在,究其

原因,就是用为这个函数的Winver定义在大于0x0500,这个问题已经有人在文章中提到了

,他使用的是修改函数定义,将Winver降级使用,这种方法因为涉及到修改头文件,麻烦

,而且心里面感觉怪怪的,因此就直接将AnimateWindow的使用方法修改成以下所列的:首

先定义常量:
#define AW_HOR_POSITIVE             0x00000001
#define AW_HOR_NEGATIVE             0x00000002
#define AW_VER_POSITIVE             0x00000004
#define AW_VER_NEGATIVE             0x00000008
#define AW_CENTER                   0x00000010
#define AW_HIDE                     0x00010000
#define AW_ACTIVATE                 0x00020000
#define AW_SLIDE                     0x00040000
#define AW_BLEND                     0x00080000
相应的含义我相信MSDN大家都可以查找到的
实现部分如下:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(   HWND hwnd, DWORD dwTime,   DWORD

dwFlags);//定义AnimateWindow的函数指针
HINSTANCE h;
LPFNDLLFUNC1 p;
::ShowWindow(hWnd,SW_HIDE);
h = LoadLibrary( "user32.dll" );
p = (LPFNDLLFUNC1) GetProcAddress( h, "AnimateWindow" );
p(hWnd, 500,AW_HOR_POSITIVE|AW_SLIDE);
::ShowWindow(hWnd,SW_SHOW);
FreeLibrary( h );]
这段代码实现了一种从左向右的效果。
另外:
其实有许多函数都可以通过这种方式实现的,而不需要修改头文件定义。

winuser.h里规定WINVER=0X500才能用
假如你不想修改Winuser.h,可以在工程里的StdAfx.h文件靠前位置加上如下定义    
   #undef   WINVER  
   #define   WINVER   0X500  
     
   
   测试代码:  
   2、在CMainFrame::OnCreate函数中增加黑体加粗部分语句。        
   int   CMainFrame::OnCreate(LPCREATESTRUCT   lpCreateStruct)  
   {  
   ……  
                   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
   EnableDocking(CBRS_ALIGN_ANY);  
   DockControlBar(&m_wndToolBar);  
   AnimateWindow(GetSafeHwnd(),1000,AW_CENTER);  
   return   0;  
   }  
   
     
   3、使用MFC   ClassWizard增加消息处理函数    
   
   使用ClassWizard在CMainFrame类中增加WM_CLOSE消息处理函数,并增加以下语句。  

     
   void   CMainFrame::OnClose()    
   {  
   //   TODO:   Add   your   message   handler   code   here   and/or   call  

default  
   AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER);  
   CFrameWnd::OnClose();  
   }  

4.使用方法:

在STDAFX.H中加入
   #undef   WINVER    
   #define   WINVER   0X5000
   否则可能会产生如下错误(由于Windows版本问题):
'AnimateWindow' : undeclared identifier
  'AW_HIDE' : undeclared identifier
  'AW_CENTER' : undeclared identifier

5.代码示例:

    void CAboutDlg::OnClose()
    {
           //实现淡出效果。

          AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_BLEND);                  

   CDialog::OnClose();

      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值