定制任务栏托盘的dll

定制任务栏托盘的 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,找到如下位置,修改成你自己的图标就可以了。

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


第二步,替换菜单。

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


// TODO: Insert your menu items here! int i = 0; popup.InsertMenu(i++, MF_BYPOSITION, LuoTaskTray::TTM_EXIT, _T("Exit"));


如何使用定制的 dll?


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

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


第二步,载入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; } }


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

if (g_pLuoTaskTray){ LuoTaskTray::UCreateParam param = {0, }; param.hwnd = *this; param.CallbackMessage = LuoTaskTray::WM_TASK_TRAY_CALLBACK; // callback message HRESULT hRslt = g_pLuoTaskTray->CreateTaskTray(&param); if (SUCCEEDED(hRslt)) { } }


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

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: // do something break; } return 0; }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值