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

            久久国产高潮流白浆免费观看| 精品人妻久久久久久888| 国产精品久久久久久久久久免费| 精品久久久中文字幕人妻| 久久精品国产亚洲AV无码偷窥| avtt天堂网久久精品| 看全色黄大色大片免费久久久| 久久精品卫校国产小美女| 91精品久久久久久无码| 婷婷国产天堂久久综合五月| 久久精品中文闷骚内射| 久久婷婷五月综合成人D啪| 久久丫精品国产亚洲av| 久久影院久久香蕉国产线看观看| 久久人人爽人人爽人人片AV麻烦 | 免费无码国产欧美久久18| 久久久无码精品亚洲日韩蜜臀浪潮| 国产精品日韩深夜福利久久| 亚洲色欲久久久综合网| 看全色黄大色大片免费久久久 | 国产精品久久99| 香蕉久久永久视频| 99久久免费只有精品国产| 无码精品久久久天天影视| 一本综合久久国产二区| 久久久久国产精品嫩草影院 | 无码人妻久久一区二区三区免费 | 亚洲综合日韩久久成人AV| 理论片午午伦夜理片久久| 99久久精品免费国产大片| 999久久久无码国产精品| 色偷偷久久一区二区三区| 久久久久久精品成人免费图片| 欧美亚洲另类久久综合婷婷| 国产呻吟久久久久久久92| 青青草国产精品久久| 久久精品视频网| 青青草国产精品久久| 久久国产乱子伦精品免费午夜| 国产成人久久激情91| 久久电影网2021|