窗口启动 透明等处理

  窗口的动画效果其实我们只要会用一个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标志时,该标志被忽略;

如果函数调用成功,则返回非零值,否则返回值为零。
 
在单文档中
/
// CMainFrame message handlers
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO: Add your specialized creation code here
	AnimateWindow(GetSafeHwnd(),1000,AW_SLIDE|AW_HOR_POSITIVE);
	return 0;
}

void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER);	
	CFrameWnd::OnClose();
}

 
在对话框中 需要去掉 句柄即可
 
BOOL WINAPI DrawAnimatedRects(HWND hwnd, int idAni, CONST RECT * lprcFrom, CONST RECT * lprcTo);
Eg:
   
Bool m_bShow = false;  //区分弹出还是弹入    
BOOL WinAnimation()    
{    
     CWnd * pWnd=FindWindow("Shell_TrayWnd",NULL);  //windows底部信息提示窗口    
     if(!pWnd)return FALSE;    
     CRect rectSur,rectDst;    
     GetWindowRect(&rectSur);  //本窗口大小,用户自己处理    
      EnumChildWindows(pWnd->GetSafeHwnd(),My_Find,(LPARAM)&rectDst);  //寻找托盘    
     if(m_bShow)DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectSur,&rectDst);  //弹入    
     else DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectDst,&rectSur); //弹出    
     return TRUE;    
}    
BOOL CALLBACK My_Find(HWND hwnd, LPARAM lParam)    
//寻找托盘位置    
{    
    TCHAR szClassName[256];    
     GetClassName(hwnd, szClassName, 255);    
    // 比较窗口类名    
if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0)    
     {    
         CRect *pRect = (CRect*) lParam;         
         ::GetWindowRect(hwnd, pRect);    
        return TRUE;    
     }    
// 当找到时钟窗口时表示可以结束了    
    if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0)    
     {    
         CRect *pRect = (CRect*) lParam;    
         CRect rectClock;    
         ::GetWindowRect(hwnd, rectClock);    
         pRect->right = rectClock.left;    
        return FALSE;    
     }    
    return TRUE;    
} 
 


 
设置透明
   SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
   GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
   HINSTANCE hInst = LoadLibrary(L"User32.DLL"); 
  if(hInst) 
  { 
	  typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); 
	  MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针 
     fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
     if(fun)
         fun(this->GetSafeHwnd(),0,200,2);
      FreeLibrary(hInst); 
  } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值