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

            羅朝輝(飄飄白云)

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

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

             

            定制任務(wù)欄托盤(pán)的 dll

            羅朝輝(飄飄白云)  2009.06.08

            http://www.shnenglu.com/kesalin

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

            源文件下載: 點(diǎn)擊這里

            google 項(xiàng)目地址: http://code.google.com/p/luotasktray/

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

            效果如圖:

            顯示任務(wù)欄托盤(pán):



            顯示右鍵菜單:


            響應(yīng)右鍵菜單事件:


            1,下面來(lái)說(shuō)說(shuō)如何簡(jiǎn)單地通過(guò)修改這個(gè) dll 來(lái)定制自己需要的任務(wù)欄托盤(pán),分兩步:替換圖標(biāo)和修改菜單項(xiàng)。

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

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

            step 2: 修改菜單項(xiàng)
            打開(kāi) LuoTaskTray 工程中的TaskTrayWindow.h,找到如下位置,修改成你自己的菜單項(xiàng)目就可以了。
                    // 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: 包含相關(guān)頭文件,并鏈接庫(kù)文件。
            // 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: 程序開(kāi)始的時(shí)候裝載 dll 并初始化,在程序退出時(shí)清理并卸載 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)建任務(wù)欄托盤(pán)。
                    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: 響應(yīng)回調(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 羅朝輝 閱讀(1931) 評(píng)論(4)  編輯 收藏 引用 所屬分類: Windows

            評(píng)論

            # re: 定制任務(wù)欄托盤(pán)的 dll 2009-06-08 22:58 xiao si le
            就這個(gè)2b東西還把原代碼藏起來(lái),真是笑掉大牙了。  回復(fù)  更多評(píng)論
              

            # re: 定制任務(wù)欄托盤(pán)的 dll 2009-06-08 23:51 羅朝輝
            @xiao si le

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

            # re: 定制任務(wù)欄托盤(pán)的 dll 2009-06-09 07:57 Pear
            請(qǐng)教個(gè),非阻塞模式是指用個(gè)代理窗口接收托盤(pán)消息然后PostMessage?  回復(fù)  更多評(píng)論
              

            # re: 定制任務(wù)欄托盤(pán)的 dll 2009-06-09 09:02 羅朝輝
            @Pear

            思路是這樣的,用單獨(dú)的線程處理代理過(guò)程。  回復(fù)  更多評(píng)論
              

            亚洲精品美女久久久久99小说| 精品久久久久久久国产潘金莲| 国产69精品久久久久9999APGF | 亚洲人成无码网站久久99热国产| 丁香五月综合久久激情| 亚洲精品高清久久| 久久久久噜噜噜亚洲熟女综合| 精品无码人妻久久久久久| 国产激情久久久久影院| 久久亚洲AV永久无码精品| 亚洲国产高清精品线久久| 亚洲欧美日韩精品久久亚洲区 | 久久婷婷色香五月综合激情| 久久99精品久久久久久齐齐| 无码精品久久一区二区三区| 久久成人小视频| 无码人妻久久一区二区三区免费丨| 一本久久a久久精品vr综合| av无码久久久久久不卡网站| 99久久婷婷国产一区二区| 久久综合视频网站| 人人妻久久人人澡人人爽人人精品| 久久亚洲精品国产亚洲老地址 | 国产91色综合久久免费分享| 国产亚洲精久久久久久无码AV| 四虎国产精品免费久久| 亚洲精品乱码久久久久久自慰| 久久精品蜜芽亚洲国产AV| 九九热久久免费视频| 精品久久久中文字幕人妻| 国产精品免费久久久久久久久 | 亚洲一区精品伊人久久伊人| 久久青青草原精品国产| 香蕉aa三级久久毛片| 99久久er这里只有精品18| 久久精品不卡| 亚洲国产精品婷婷久久| 一本久久知道综合久久| 亚洲国产天堂久久久久久| 99久久国产综合精品成人影院| 无码人妻精品一区二区三区久久久|