这篇文章不太好整理,再加上最近忙其他的去了(不给公司赚钱,饭碗保不住哦^0^),发的有点慢。今日插件,这个问题刚开始也困扰我很久,我相信会C++的人会感觉容易多了。到处找,到处搜,终于找到个符合自己要求的,您慢慢往下看。
总体来说应该算是一个今日插件的安装包,将你的程序一起打包,设置好对应的配置,就能实现今日插件的功能。还是先放出文件下载包。
插件分为三个部分,分别为CabSample,MyToday,setupdll(我没改名字,支持原版,虽然不知道原创作者是谁)。由于C++我不太会,这里就主要解释下对今日菜单有关联的重要地方就行了,其他的请C++帮忙高手解读了。
CabSample文件中包含主程序,其中有个res文件夹,用来放置今日菜单中显示的ICON图片。
MyToday文件,主要绘制今日菜单的显示的样式。在MyToday.rc中,下列为今日菜单中ICON的获取路径。
IDI_ICON2 ICON "D:\\Works\\Projects\\Symbio.Vancl\\CabSample\\CabSample\\res\\icon_vancl.ico"
MyToday.cpp文件中,绘制今日菜单。主要代码如下:
- VOID PaintAll(HWND hWnd, HDC hdc)
- {
- TODAYDRAWWATERMARKINFO dwi;
- dwi.hwnd = hWnd;
- dwi.hdc = hdc;
- ::GetClientRect(hWnd, &(dwi.rc));
- ::SendMessage(g_hWndParent, TODAYM_DRAWWATERMARK, 0, (LPARAM)&dwi);
- if(g_bSelected)
- SetTextColor(hdc, SendMessage(g_hWndParent, TODAYM_GETCOLOR, TODAYCOLOR_HIGHLIGHTEDTEXT,0));
- else
- SetTextColor(hdc, SendMessage(g_hWndParent, TODAYM_GETCOLOR, TODAYCOLOR_TEXT,0));
-
- RECT rc(dwi.rc);
- rc.left += 3;
- rc.top += 3;
- SetBkMode(hdc,TRANSPARENT);
- // first draw icon
- DrawIcon(hdc, rc.left, rc.top, g_hIcon);
-
- // second draw text
- rc.top -= 4;
- rc.left -= 140;
- DrawText(hdc, _T("凡客诚品"), -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
- }
复制代码上面绘制了ICON和文字的坐标,同时全局定义了PLUG_HEIGHT的一个变量,设置今日菜单中该菜单的高度。
最后一个setupdll.cpp文件,设置了打包安装后所有DLL的安置路径和文件安装后的注册表写入,卸载功能。这个你可以自己查代码选择更改,需要注意的是在没有更改CabSample名的情况下,保留默认启动为CabSample.exe。
打包插件设置好后,将你自己的程序添加到项目中,如下图:
附件:
today-2.jpg 将三个项目设为输出项目:
附件:
today-3.jpg 同时将你自己的项目在打包程序中设置好,这里就不细介绍了。
完成打包程序后,如果步骤没有错误,安装*.cab完成后你就能看到你自定义的今日菜单显示出来了,还是展示下完成效果图吧。
附件:
today-1.jpg 附件:
today-4.jpg 这个插件使用起来比较方便,只需要打包的时候稍微修改下就能给下一个项目使用,但还是存在不少问题。横竖屏幕切换的时候位置不好重新计算,点击进入程序再退出后,今日菜单会有一点点的位移,这个需要你自己使用的时候才能发现。
文/
Bright-Liang