• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            羅朝輝(飄飄白云)

            關注嵌入式操作系統(tǒng),移動平臺,圖形開發(fā)。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks

             

            定制任務欄托盤的 dll

            羅朝輝(飄飄白云)  2009.06.08

            http://www.shnenglu.com/kesalin

            (轉(zhuǎn)載時請注明作者和出處。未經(jīng)許可,請勿用于商業(yè)用途)

            源文件下載: 點擊這里

            google 項目地址: http://code.google.com/p/luotasktray/

            通過對這個 dll 進行定制(修改圖標和插入菜單,很簡單的替換工作),你就很容易地在新工程中使用定制的任務欄托盤,這樣就省去了每寫一個桌面程序就要整些桌面托盤的代碼。而且這個dll所創(chuàng)建的任務欄托盤與主窗口是非阻塞模式的。

            效果如圖:

            顯示任務欄托盤:



            顯示右鍵菜單:


            響應右鍵菜單事件:


            1,下面來說說如何簡單地通過修改這個 dll 來定制自己需要的任務欄托盤,分兩步:替換圖標和修改菜單項。

            step 1: 替換圖標
            打開 LuoTaskTray 工程中的TaskTrayWindow.h,找到如下位置,修改成你自己的圖標就可以了。
                    // Load icon
                    hIcon = ::LoadIcon(NULL, IDI_APPLICATION);

                    
            // TODO: Load your icon here!
                    
            //hIcon = ::LoadIcon((HINSTANCE) GetWindowLongPtr(GWLP_HINSTANCE), MAKEINTRESOURCE(IDI_ICON1));

            step 2: 修改菜單項
            打開 LuoTaskTray 工程中的TaskTrayWindow.h,找到如下位置,修改成你自己的菜單項目就可以了。
                    // create menu
                    WTL::CMenu popup;
                    popup.CreatePopupMenu();

                    
            // TODO: Insert your menu items here!
                    int i = 0;
                    popup.InsertMenu(i
            ++, MF_BYPOSITION, LuoTaskTray::TTM_EXIT, _T("Exit"));

            然后你將 LuoTaskTray 編譯生成就可以得到定制好的 dll 和 lib 文件了。

            2,如何在自己的工程中使用剛剛生成的 dll 和 lib 文件。
            step 1: 包含相關頭文件,并鏈接庫文件。
            // Include header files for LuoTaskTray.
            #include "include/LuoTaskTray.h"
            #include 
            "include/LuoTaskTrayImport.h"

            // Import lib
            #ifdef _DEBUG
            #pragma comment(lib, 
            "bin/LuoTaskTray_Debug.lib")
            #else
            #pragma comment(lib, 
            "bin/LuoTaskTray.lib")
            #endif

            step 2: 程序開始的時候裝載 dll 并初始化,在程序退出時清理并卸載 dll。
            LuoTaskTray::UActivator* g_pLuoTaskTray;

            /**
            * @brief      : Initialize LuoTaskTray
            * @param      : 
            * @return     : bool
            */
            bool InitLuoTaskTray()
            {
                HRESULT hRslt 
            = LuoTaskTray::Activate_import(
                    L
            "activator",
                    (
            void**)&g_pLuoTaskTray);

                
            if (FAILED(hRslt)) {
                    
            return false;
                }

                hRslt 
            = g_pLuoTaskTray->Initialize();
                
            if (FAILED(hRslt)) {
                    g_pLuoTaskTray
            ->Uninitialize();
                    g_pLuoTaskTray 
            = NULL;
                    
            return false;
                }

                
            return true;
            }

            /**
            * @brief      : Uninitialize LuoTaskTray
            * @param      : 
            * @return     : 
            */
            void UninitLuoTaskTray()
            {
                
            if (g_pLuoTaskTray != NULL) {
                    g_pLuoTaskTray
            ->Uninitialize();
                    g_pLuoTaskTray 
            = NULL;
                }
            }

            step 3: 創(chuàng)建任務欄托盤。
                    if (g_pLuoTaskTray){

                        LuoTaskTray::UCreateParam param 
            = {0, };
                        param.hwnd 
            = *this;
                        param.CallbackMessage 
            = LuoTaskTray::WM_TASK_TRAY_CALLBACK;

                        HRESULT hRslt 
            = g_pLuoTaskTray->CreateTaskTray(&param);
                        
            if (SUCCEEDED(hRslt)) {
                            ::EnableWindow(GetDlgItem(ID_TEST), FALSE);
                        }
                    }

            step 4: 響應回調(diào)消息并創(chuàng)建回調(diào)函數(shù)。
                MESSAGE_HANDLER(LuoTaskTray::WM_TASK_TRAY_CALLBACK, OnTaskTrayCallback)

                LRESULT OnTaskTrayCallback(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
            & bHandled)
                {
                    
            int cmd = (int)wParam;
                    HWND hwnd 
            = (HWND) lParam;
                    
            switch (cmd) {
                    
            case LuoTaskTray::TTM_EXIT:
                        ::MessageBox(
            *this, L"Menu Event \"Close\" from Tasktray", L"TrakTray", MB_OK);

                        CloseDialog(
            0);

                        
            break;
                    }

                    
            return 0;
                }

            大功告成!

            posted on 2009-06-08 20:47 羅朝輝 閱讀(1924) 評論(4)  編輯 收藏 引用 所屬分類: Windows

            評論

            # re: 定制任務欄托盤的 dll 2009-06-08 22:58 xiao si le
            就這個2b東西還把原代碼藏起來,真是笑掉大牙了。  回復  更多評論
              

            # re: 定制任務欄托盤的 dll 2009-06-08 23:51 羅朝輝
            @xiao si le

            阻塞模式的寫兩個函數(shù)就搞定,是沒什么好說的;非阻塞模式的你要是有好辦法不妨賜教。犯不著在這里滿地找牙了  回復  更多評論
              

            # re: 定制任務欄托盤的 dll 2009-06-09 07:57 Pear
            請教個,非阻塞模式是指用個代理窗口接收托盤消息然后PostMessage?  回復  更多評論
              

            # re: 定制任務欄托盤的 dll 2009-06-09 09:02 羅朝輝
            @Pear

            思路是這樣的,用單獨的線程處理代理過程。  回復  更多評論
              

            www久久久天天com| 久久WWW免费人成一看片| 久久99免费视频| 亚洲国产二区三区久久| 亚洲伊人久久成综合人影院| 欧美亚洲国产精品久久| 99国产欧美久久久精品蜜芽| 秋霞久久国产精品电影院| 久久影视国产亚洲| 国内精品伊人久久久久AV影院| 亚洲国产日韩欧美久久| 2021国产精品午夜久久| 一本久久知道综合久久| 久久久国产视频| 中文字幕无码久久久| 久久免费国产精品| 久久香蕉超碰97国产精品| 亚洲精品无码久久久久去q| 久久久久亚洲AV成人网人人软件| 色综合久久无码五十路人妻| 久久婷婷色香五月综合激情| 人人狠狠综合88综合久久| 欧美一级久久久久久久大片| 欧美激情精品久久久久久久| 色婷婷噜噜久久国产精品12p| 国产精品亚洲美女久久久| 亚洲一级Av无码毛片久久精品| 久久亚洲中文字幕精品一区| 精品久久久无码人妻中文字幕| 欧美va久久久噜噜噜久久| 久久电影网| 久久久久久a亚洲欧洲aⅴ| 思思久久99热只有频精品66| 久久精品亚洲日本波多野结衣| 国产成人久久AV免费| 久久精品国产一区二区| 人妻丰满AV无码久久不卡| 国内精品久久久久影院网站| 无码久久精品国产亚洲Av影片 | 久久99国产精品99久久| 亚洲AV无码一区东京热久久|