WEB开发网
开发学院软件开发VC 制作MSN、QQ的消息提示窗口 阅读

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

 2010-05-27 20:37:05 来源:WEB开发网   
核心提示:用过QQ和MSN聊天工具的人都知道,只要好友上线,制作MSN、QQ的消息提示窗口,就会在托盘的位置处显示一个提示窗口,可以是拉帘式的,一般情况,我从OnPaint()中进行显示图片,或者是淡入淡出的形式出现;想想何不为自己的程式也加一个漂亮的提示窗口呢:)说做就做,一、MSN拉帘式窗口制作分三部分:1、窗口的显示;2、

用过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);
}

根据你设的定时器的长短来控制窗口的显示过程;

1 2  下一页

Tags:制作 MSN QQ

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接