日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

用VC++制作MSN、QQ 的消息提示窗口

發布時間:2025/3/15 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用VC++制作MSN、QQ 的消息提示窗口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用VC++制作MSN、QQ 的消息提示窗口
用過QQ和MSN聊天工具的人都知道,只要好友上線,就會在托盤的位置處顯示一個提示窗口,以是拉簾式的,或者是淡入淡出的形式出現;想想何不為自己的程式也加一個漂亮的提示窗口呢?

  一、MSN拉簾式窗口制作

  分三部分:1、窗口的顯示;2、窗口的停留;3、窗口的消失;
如果達到這樣郊果,系統中要有三個定時器,進行分別控制。定義的定時器如下:

#define ID_TIMER_POP_WINDOW 1
#define ID_TIMER_DISPALY_DELAY 2
#define ID_TIMER_CLOSE_WINDOW 3?

  從CWnd 繼承一個窗口,當然也可以從CFrameWnd進行派生,這不是主要問題,關鍵是看你是怎么處理WM_PAINT,WM_MOUSEMOVE,WM_TIMER的消息。一般情況,我從OnPaint()中進行顯示圖片,在WM_TIMER中處理定時器消息,下面是處里定時器時用到的代碼:

CMsgWnd::CMsgWnd()
{
 ...
 SetTimer(ID_TIEMR_POP_WINDOW,20,NULL);
 ...
}

void CMsgWnd::OnTimer(UINT nIDEvent)
{
 static int nHeight=0;
 int cy=GetSystemMetrics(SM_CYSCREEN);
 int cx=GetSystemMetrics(SM_CXSCREEN);
 RECT rect;
 SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
 int y=rect.bottom-rect.top;
 int x=rect.right-rect.left;
 x=x-WIN_WIDTH;

 switch(nIDEvent)
 {
  case ID_TIMER_POP_WINDOW:
   if(nHeight<=WIN_HEIGHT)
   {
    ++nHeight;
    MoveWindow(x,y-nHeight,WIN_WIDTH,WIN_HEIGHT);
    Invalidate(FALSE);
   }
   else
   {
    KillTimer(ID_TIMER_POP_WINDOW);
    SetTimer(ID_TIMER_DISPLAY_DELAY,5000,NULL);
   }
   break;
  case ID_TIMER_CLOSE_WINDOW:
   if(nHeight>=0)
   {
    nHeight--;
    MoveWindow(x,y-nHeight,WIN_WIDTH,nHeight);
   }
   else
   {
    KillTimer(ID_TIMER_CLOSE_WINDOW);
    SendMessage(WM_CLOSE);
   }
   break;
  case ID_TIMER_DISPLAY_DELAY:
   KillTimer(ID_TIMER_DISPLAY_DELAY);
   SetTimer(ID_TIMER_CLOSE_WINDOW,20,NULL);
   break;
 }
 CWnd::OnTimer(nIDEvent);
}?

  根據你設的定時器的長短來控制窗口的顯示過程;
二、QQ淡出淡出顯示實現

  其實用到一個API函數:AnimateWindow,下面是這個函數的一些說明:

BOOL AnimateWindow(
 HWND hwnd, // handle to the window to animate
 DWORD dwTime, // duration of animation
 DWORD dwFlags // animation type
);

  上面的函數前兩個參數一看就明白,不用說了,最后一個參數dwFlags設置動畫窗口的樣式:

  各種標志說明:

標志 說明
AW_SLIDE Uses slide animation. By default, roll animation is used.
This flag is ignored when used with the AW_CENTER flag.?
AW_ACTIVATE Activates the window. Do not use this flag with AW_HIDE.?
AW_BLEND Uses a fade effect. This flag can be used only if hwnd is a top-level window.?
AW_HIDE Hides the window. By default, the window is shown.?
AW_CENTER Makes the window appear to collapse inward if the AW_HIDE flag is used or expand outward
if the AW_HIDE flag is not used.?
AW_HOR_POSITIVE Animate the window from left to right. This flag can be used with roll or slide animation. It is ignored when used with the AW_CENTER flag.?
AW_HOR_NEGATIVE Animate the window from right to left. This flag can be used with roll or slide animation.
It is ignored when used with the AW_CENTER flag.?
AW_VER_POSITIVE Animate the window from top to bottom. This flag can be used with roll or slide animation.
It is ignored when used with the AW_CENTER flag.?
AW_VER_NEGATIVE Animate the window from bottom to top. This flag can be used with roll or slide animation.
It is ignored when used with the AW_CENTER flag.?

  以上內容是從MSDN中摘錄的,要淡入淡出的效果的話,用到AW_BELND。

  三、控制窗口顯示的代碼

CMainFrame::OnCreate(…)
{
 //...
 AnimateWindow(GetSafeHwnd(),1000,AW_CENTER|AW_BLEND);
 //…
}?

  四、關閉的代碼

CMainFrame::OnClose(..)
{
 AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER|AW_BLEND);
}

  其實AnimateWindow只是利用了windows本身的方法,如果您要更加有個性的窗口效果,那就得多做寫些代碼了,一分辛苦,一分收獲吧

  五、結束語

  其實就MSN的提示窗口來說,如果要從使用復雜一點的背景和效果,那么還有刷新屏幕的問題,應做到無閃刷新.由于時間蒼促,不足之處必然有之,同時以上代碼也參考了一部分以前 VCKBASE 技術文檔,在此表示感謝!

  如果有問題,歡迎交流!共同進步!

總結

以上是生活随笔為你收集整理的用VC++制作MSN、QQ 的消息提示窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。