• <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://m.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久久99这里只有免费费精品| 久久艹国产| 色综合久久夜色精品国产| 亚洲国产一成人久久精品| 高清免费久久午夜精品| 久久久久一本毛久久久| 日本欧美久久久久免费播放网| 72种姿势欧美久久久久大黄蕉 | 久久香综合精品久久伊人| 色综合久久天天综合| 伊人久久大香线蕉成人| 亚洲天堂久久精品| 久久综合国产乱子伦精品免费 | 精品久久久久久无码不卡| www性久久久com| 亚洲午夜久久久久久久久久| 久久久99精品成人片中文字幕 | 久久精品国产国产精品四凭| 久久精品中文闷骚内射| 日日狠狠久久偷偷色综合免费| 国产成人精品免费久久久久| 久久精品一本到99热免费| 狠狠人妻久久久久久综合| 国产亚洲精品美女久久久| 中文字幕久久精品 | 97精品国产91久久久久久| 久久久精品久久久久影院| 久久综合伊人77777麻豆| 欧美伊香蕉久久综合类网站| 日韩人妻无码精品久久久不卡| 久久91精品国产91| 久久AV无码精品人妻糸列| 久久久久久精品免费免费自慰| 久久久久综合中文字幕| 精品久久人人做人人爽综合| 一本一道久久精品综合| 国产女人aaa级久久久级| 久久精品不卡| 久久99热这里只频精品6| 午夜人妻久久久久久久久|