小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

桌面搜索-系統(tǒng)托盤 - 林建華的專欄

 accesine 2005-08-27
桌面搜索-系統(tǒng)托盤

在程序最小化時,不在windows的任務(wù)欄中出現(xiàn),而是在右下角的系統(tǒng)托盤中顯示一個小圖標,當鼠標單擊時顯示功能菜單,雙擊時打開主界面。這就是系統(tǒng)托盤程序的一般功能,想qq和很多桌面搜索程序都是這么做了,給人的感覺比較清爽,不用的時候就縮在一個小角落里,用的時候也能很快的找到。

在技術(shù)實現(xiàn)上

首先是創(chuàng)建托盤:

void CDiskSearchDlg::InitTray()
{
 m_NotifyID.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
 m_NotifyID.hWnd=this->m_hWnd;
 m_NotifyID.uID=IDR_MAINFRAME;
 m_NotifyID.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
 m_NotifyID.uCallbackMessage=WM_NOTIFYICON;//自定義的消息名稱
 m_NotifyID.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
 strcpy(m_NotifyID.szTip,"桌面搜索");//信息提示
 Shell_NotifyIcon(NIM_ADD,&m_NotifyID);//在托盤區(qū)添加圖標
}

上面的代碼就是一個一般創(chuàng)建的方法,其中定義NOTIFYICONDATA m_NotifyID;

WM_NOTIFYICON是自定義的消息,我們可以用

#define WM_NOTIFYICON WM_USE+5

來定義

調(diào)用InitTray()后會在托盤上出現(xiàn)一個小圖標,當然我們也同時要把任務(wù)欄中的程序任務(wù)去掉,只要調(diào)用ShowWindow(SW_HIDE)就可以了

接下來是創(chuàng)建一個菜單資源,假設(shè)為IDR_MENU_TP

然后要做的是添加WM_NOTIFYICON消息:

在BEGIN_MESSAGE_MAP(CDiskSearchDlg, CDialog)內(nèi)要添加

ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)//手工添加托盤消息映射

并定義函數(shù)

LONG CDiskSearchDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
 //wParam中是響應(yīng)消息的圖標ID,lParam中則是Windows的消息
    switch ( lParam )
 {
 case WM_RBUTTONDOWN:
  {// 用戶在托盤圖標上單擊鼠標右鍵,彈出菜單
   CMenu pMenu;
   if (pMenu.LoadMenu(IDR_MENU_TP))
   {
    CMenu* pPopup = pMenu.GetSubMenu(0);
    ASSERT(pPopup != NULL);
    CPoint Point;
    GetCursorPos( &Point );
    SetForegroundWindow();
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
   }          
  }
  break;
 case WM_LBUTTONDBLCLK:
//  OnMenuitemShow();
  break;
 case WM_LBUTTONDOWN:
  {// 用戶在托盤圖標上單擊鼠標右鍵,彈出菜單
   CMenu pMenu;
   if (pMenu.LoadMenu(IDR_MENU_TP))
   {
    CMenu* pPopup = pMenu.GetSubMenu(0);
    ASSERT(pPopup != NULL);
    CPoint Point;
    GetCursorPos( &Point );
    SetForegroundWindow();
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
   }          
  }
  break;
 default:break;
 }
    return 0;
}

上面這段代碼中,添加了鼠標單擊的消息,雙擊和其他消息其實是一樣的。

最后,在退出的時候記得要調(diào)用

Shell_NotifyIcon(NIM_DELETE, &m_NotifyID);

來把托盤圖標刪除。

當然還有做動畫托盤,就是托盤上的圖標是變化的,這個可以在上面的dlg類中添加Timer函數(shù),定時更換圖標就可以了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多