定制任务栏托盘的dll

来源:互联网 发布:edx 中文 python 编辑:程序博客网 时间:2024/05/17 04:33

http://blog.csdn.net/kesalin/article/details/4251760


 

定制任务栏托盘的dll

分类: Windows 302人阅读 评论(0) 收藏 举报

定制任务栏托盘的 dll

罗朝辉(飘飘白云)  2009.06.08

http://www.cppblog.com/kesalin

(转载时请注明作者和出处。未经许可,请勿用于商业用途)


源文件下载: 点击这里

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


通过对这个 dll 进行定制(修改图标和插入菜单,很简单的替换工作),你就很容易地在新工程中使用定制的任务栏托盘,这样就省去了每写一个桌面程序就要整些桌面托盘的代码。而且这个dll所创建的任务栏托盘与主窗口是非阻塞模式的。 


效果如图:

显示任务栏托盘:


LuoTaskTray sample


 

响应菜单事件:


LuoTaskTray sample


如何定制自己的 dll?

分两步,替换图标和替换菜单。


第一步,替换图标。

打开 LuoTaskTray 工程中的TaskTrayWindow.h,找到如下位置,修改成你自己的图标就可以了。

[cpp] view plaincopyprint?
  1. // Load icon  
  2. hIcon = ::LoadIcon(NULL, IDI_APPLICATION);  
  3. // TODO: Load your icon here!  
  4. //hIcon = ::LoadIcon((HINSTANCE) GetWindowLongPtr(GWLP_HINSTANCE), MAKEINTRESOURCE(IDI_ICON1));  


第二步,替换菜单。

打开 LuoTaskTray 工程中的TaskTrayWindow.h,找到如下位置,修改成你自己的菜单项目就可以了。


[cpp] view plaincopyprint?
  1. // TODO: Insert your menu items here!  
  2. int i = 0;  
  3. popup.InsertMenu(i++, MF_BYPOSITION, LuoTaskTray::TTM_EXIT, _T("Exit"));  


如何使用定制的 dll?


第一步,包含头文件,导入 lib 。

[c-sharp] view plaincopyprint?
  1. // Include header files for LuoTaskTray.  
  2. #include "include/LuoTaskTray.h"  
  3. #include "include/LuoTaskTrayImport.h"  
  4. // Import lib  
  5. #ifdef _DEBUG  
  6. #pragma comment(lib, "bin/LuoTaskTray_Debug.lib")  
  7. #else  
  8. #pragma comment(lib, "bin/LuoTaskTray.lib")  
  9. #endif  


第二步,载入dll 并初始化,然后在程序退出时,清理,并卸载 dll 。

[cpp] view plaincopyprint?
  1. LuoTaskTray::UActivator* g_pLuoTaskTray;  
  2. /** 
  3. * @brief      : Initialize LuoTaskTray 
  4. * @param      :  
  5. * @return     : bool 
  6. */  
  7. bool InitLuoTaskTray()  
  8. {  
  9.     HRESULT hRslt = LuoTaskTray::Activate_import(  
  10.         L"activator",  
  11.         (void**)&g_pLuoTaskTray);  
  12.     if (FAILED(hRslt)) {  
  13.         return false;  
  14.     }  
  15.     hRslt = g_pLuoTaskTray->Initialize();  
  16.     if (FAILED(hRslt)) {  
  17.         g_pLuoTaskTray->Uninitialize();  
  18.         g_pLuoTaskTray = NULL;  
  19.         return false;  
  20.     }  
  21.     return true;  
  22. }  
  23. /** 
  24. * @brief      : Uninitialize LuoTaskTray 
  25. * @param      :  
  26. * @return     :  
  27. */  
  28. void UninitLuoTaskTray()  
  29. {  
  30.     if (g_pLuoTaskTray != NULL) {  
  31.         g_pLuoTaskTray->Uninitialize();  
  32.         g_pLuoTaskTray = NULL;  
  33.     }  
  34. }  


第三步,创建任务栏托盘。

[c-sharp] view plaincopyprint?
  1. if (g_pLuoTaskTray){  
  2.     LuoTaskTray::UCreateParam param = {0, };  
  3.     param.hwnd = *this;  
  4.     param.CallbackMessage = LuoTaskTray::WM_TASK_TRAY_CALLBACK; // callback message  
  5.     HRESULT hRslt = g_pLuoTaskTray->CreateTaskTray(&param);  
  6.     if (SUCCEEDED(hRslt)) {  
  7.           
  8.     }  
  9. }  


第四步,相应回调消息(菜单消息)

[c-sharp] view plaincopyprint?
  1. MESSAGE_HANDLER(LuoTaskTray::WM_TASK_TRAY_CALLBACK, OnTaskTrayCallback)  
  2. LRESULT OnTaskTrayCallback(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)  
  3. {  
  4.     int cmd = (int)wParam;  
  5.     HWND hwnd = (HWND) lParam;  
  6.     switch (cmd) {  
  7.     case LuoTaskTray::TTM_EXIT:  
  8.         // do something  
  9.         break;  
  10.     }  
  11.     return 0;  
  12. }  



原创粉丝点击