• <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>

            羅朝輝(飄飄白云)

            關注嵌入式操作系統,移動平臺,圖形開發。-->加微博 ^_^

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

             

            定制任務欄托盤的 dll

            羅朝輝(飄飄白云)  2009.06.08

            http://www.shnenglu.com/kesalin

            (轉載時請注明作者和出處。未經許可,請勿用于商業用途)

            源文件下載: 點擊這里

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

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

            效果如圖:

            顯示任務欄托盤:



            顯示右鍵菜單:


            響應右鍵菜單事件:


            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: 創建任務欄托盤。
                    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: 響應回調消息并創建回調函數。
                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

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

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

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

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

            国产精品久久久天天影视香蕉| 亚洲人成电影网站久久| 国产成人久久精品激情 | 99精品久久久久久久婷婷| 18岁日韩内射颜射午夜久久成人| 久久成人国产精品| 欧美日韩中文字幕久久久不卡| 久久天天躁狠狠躁夜夜avapp | 久久综合九色综合欧美就去吻| 亚洲国产成人精品女人久久久| 久久久免费精品re6| 久久精品无码一区二区日韩AV | 99久久精品免费观看国产| 2021国产精品久久精品| 久久综合丝袜日本网| 亚洲AV无码一区东京热久久| 久久国产视频99电影| 2021精品国产综合久久| 久久无码高潮喷水| 久久久久久国产精品美女| 丁香五月网久久综合| 日韩精品久久久肉伦网站| 人人狠狠综合88综合久久| 91精品国产91久久久久久蜜臀 | 久久国产精品久久久| 久久精品国产AV一区二区三区 | 无码乱码观看精品久久| 99久久精品国产综合一区| 久久精品国产一区| 久久婷婷五月综合97色一本一本 | 午夜精品久久久久久久无码| 久久综合中文字幕| 久久久精品免费国产四虎| 亚洲国产精品无码久久| 欧美噜噜久久久XXX| 久久久久无码精品国产| 久久久久久无码Av成人影院| 精品国产VA久久久久久久冰 | 久久国产精品99精品国产987| AV无码久久久久不卡网站下载| 999久久久免费精品国产|