当前位置: 首页 > news >正文

虚拟主机可以做视频视频网站吗ps做特效哪个网站好

虚拟主机可以做视频视频网站吗,ps做特效哪个网站好,网页制作框架代码,徐州cms模板建站前言 最近更新网易云发现任务栏按钮中除了播放相关的按钮#xff0c;多了一个喜欢的按钮#xff1a; 之前我一直以为网易云任务栏的按钮只是 Windows 为音乐软件专门提供的#xff0c;于是我又看了一眼系统自带的播放器#xff0c;发现并没有爱心按钮#xff1a; 这时我就…前言 最近更新网易云发现任务栏按钮中除了播放相关的按钮多了一个喜欢的按钮 之前我一直以为网易云任务栏的按钮只是 Windows 为音乐软件专门提供的于是我又看了一眼系统自带的播放器发现并没有爱心按钮 这时我就想会不会是 Windows 提供了相关接口可以让用户自定义一搜发现还真有ITaskbarList3接口提供了自定义任务栏按钮的方法于是就有了下面这个 demo 的实现 在实现的过程中也遇到了很多问题 由于自定义缩略图导致悬浮在缩略图上无法查看原有的预览窗口内容。使用 WIN TAB 切换窗口时显示的预览图是缩略图无法查看原有的预览窗口内容。 不过经过搜索发现网易云的开发者已经分享过相关的思路文末的参考文献就是没有相应的编码实现之后我就按照自己的理解实现了相关的功能相关效果见下图本文涉及到的完整代码已上传到GitHub。 使用 WIN TAB 正常显示原窗口信息 鼠标悬浮缩略图上正常显示原窗口信息 自定义按钮 首先是自定义按钮的实现我们先添加四个按钮使用ITaskbarList3接口即可 #include shobjidl.h#define BTN_COUNT 4// 任务栏按钮 THUMBBUTTON btns[BTN_COUNT];// 任务栏对象 ITaskbarList3* pTaskbar;// 初始化 COM CoInitialize(NULL); CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(pTaskbar));WCHAR tips[BTN_COUNT][4] { L上一首, L暂停, L下一首, L喜欢 }; int icons[BTN_COUNT] { IDI_PREVIOUS, IDI_PAUSE, IDI_NEXT, IDI_UNLIKE };for (int i 0; i BTN_COUNT; i) {btns[i].dwMask THB_BITMAP | THB_ICON | THB_FLAGS | THB_TOOLTIP;btns[i].iId 1000 i;btns[i].iBitmap i;btns[i].hIcon LoadIcon(hInstance, MAKEINTRESOURCE(icons[i]));btns[i].dwFlags THBF_ENABLED;wcscpy_s(btns[i].szTip, tips[i]); }pTaskbar-ThumbBarAddButtons(hWnd, BTN_COUNT, btns);// 释放资源 pTaskbar-Release(); CoUninitialize();然后针对对应的按钮设置相应的点击事件这里的DwmSetIconicThumbnail用于设置缩略图留到下面再具体说明1000 ~ 1003对应上文中设置的按钮的iId #define BG_COUNT 3// 当前下标 int bgIndex 0;// 背景图 WCHAR bgImgs[3][8] { Lbg1.bmp, Lbg2.bmp, Lbg3.bmp };// 控制暂停/播放切换 bool play true;// 控制喜欢/取消喜欢切换 bool unlike true;case WM_COMMAND:{int wmId LOWORD(wParam);// 分析菜单选择:switch (wmId){case 1000:bgIndex (bgIndex BG_COUNT - 1) % BG_COUNT;DwmSetIconicThumbnail(hWnd, LoadImageAndConvertToHBITMAP(bgImgs[bgIndex]), 0);break;case 1001:if (play) {btns[1].hIcon LoadIcon(hInst, MAKEINTRESOURCE(IDI_PAUSE));wcscpy_s(btns[1].szTip, L播放);}else {btns[1].hIcon LoadIcon(hInst, MAKEINTRESOURCE(IDI_PLAY));wcscpy_s(btns[1].szTip, L暂停);}play !play;// 更新按钮显示pTaskbar-ThumbBarUpdateButtons(hWnd, BTN_COUNT, btns);break;case 1002:bgIndex (bgIndex 1) % BG_COUNT;DwmSetIconicThumbnail(hWnd, LoadImageAndConvertToHBITMAP(bgImgs[bgIndex]), 0);break;case 1003:if (unlike) {btns[3].hIcon LoadIcon(hInst, MAKEINTRESOURCE(IDI_LIKE));wcscpy_s(btns[3].szTip, L取消喜欢);}else {btns[3].hIcon LoadIcon(hInst, MAKEINTRESOURCE(IDI_UNLIKE));wcscpy_s(btns[3].szTip, L喜欢);}unlike !unlike;// 更新按钮显示pTaskbar-ThumbBarUpdateButtons(hWnd, BTN_COUNT, btns);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;以上两步实现了以下效果 自定义缩略图 自定义缩略图需要使用到DwmSetIconicThumbnail接口同时还需要注意缩略图的格式必须为bmp这里使用GDI进行加载 #include gdiplus.h #pragma comment(lib, gdiplus.lib)// 开启自定义背景 BOOL enableBg TRUE;// 初始化 GDI ULONG_PTR gdiplusToken;// 是否初始化 GDI bool initGDI false;void InitializeGDIPlus() {Gdiplus::GdiplusStartupInput gdiplusStartupInput;Gdiplus::GdiplusStartup(gdiplusToken, gdiplusStartupInput, nullptr); }void ShutdownGDIPlus() {Gdiplus::GdiplusShutdown(gdiplusToken); }// 加载图像文件并返回 HBITMAP HBITMAP LoadImageAndConvertToHBITMAP(const WCHAR* filePath) {if (!initGDI) {InitializeGDIPlus();initGDI true;}Gdiplus::Bitmap bitmap(filePath);if (bitmap.GetLastStatus() ! Gdiplus::Ok) {return nullptr;}HBITMAP hBitmap nullptr;Gdiplus::Color color;bitmap.GetHBITMAP(color, hBitmap);return hBitmap; }case WM_CREATE:// 开启自定义缩略图DwmSetWindowAttribute(hWnd, DWMWA_HAS_ICONIC_BITMAP, enableBg, sizeof(BOOL));DwmSetWindowAttribute(hWnd, DWMWA_FORCE_ICONIC_REPRESENTATION, enableBg, sizeof(BOOL));DwmInvalidateIconicBitmaps(hWnd);break;case WM_DWMSENDICONICTHUMBNAIL:// 设置缩略图DwmSetIconicThumbnail(hWnd, LoadImageAndConvertToHBITMAP(bgImgs[bgIndex]), 0);break; GdiplusStartup不能在 main 中调用原因参考官方文档。 以上步骤就实现了我们的基本功能 细节优化 通过上述操作我们已经完成了自定义按钮和缩略图的功能但是通过 WIN TAB 会发现显示的窗口也变成光秃秃的缩略图 同时悬浮在缩略图上显示的窗口也不正常 强迫症表示受不了 于是就有了下面的优化思路参考参考文献的文章 创建一个临时窗口用于正常显示以上两个界面并把该窗口设置为隐藏。通过ITaskbarList3接口的RegisterTab和SetTabOrder方法将隐藏窗口和原窗口设置成组。 具体实现如下 // 临时窗口 HWND tmp;tmp CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,0, 0, 0, 0, nullptr, nullptr, hInstance, nullptr);// SW_HIDE 隐藏窗口 ShowWindow(tmp, SW_HIDE);// 注册成组 pTaskbar-RegisterTab(tmp, hWnd); pTaskbar-SetTabOrder(tmp, hWnd);UpdateWindow(tmp);// 发送 WM_DWMSENDICONICTHUMBNAIL 信息避免第一次缩略图显示异常 SendMessage(tmp, WM_DWMSENDICONICTHUMBNAIL, (WPARAM)tmp, 0);case WM_CREATE:// 开启自定义缩略图DwmSetWindowAttribute(hWnd, DWMWA_HAS_ICONIC_BITMAP, enableBg, sizeof(BOOL));break;case WM_DWMSENDICONICTHUMBNAIL:// 需要重新设置按钮, 否则无法正常显示pTaskbar-ThumbBarAddButtons(hWnd, BTN_COUNT, btns);pTaskbar-ThumbBarUpdateButtons(hWnd, BTN_COUNT, btns);DwmSetWindowAttribute(hWnd, DWMWA_FORCE_ICONIC_REPRESENTATION, enableBg, sizeof(BOOL));DwmInvalidateIconicBitmaps(hWnd);DwmSetIconicThumbnail(hWnd, LoadImageAndConvertToHBITMAP(bgImgs[bgIndex]), 0);break;以上步骤就可以解决 WINTAB 的显示问题了如下图所示 但是仍然无法处理悬浮在缩略图上显示异常的问题这是由于原窗口自定义了缩略图后未定义实时预览图导致原窗口无法正常显示也就导致了临时窗口的预览图无法显示解决方法如下 // 设置实时预览图 void SetWindowLivePreview(HWND hwnd, HBITMAP hBitmap) {// 不显示原窗口的预览图, 这里设置负坐标POINT ptOffset;ptOffset.x -1000;ptOffset.y -2000;DwmSetIconicLivePreviewBitmap(hwnd, hBitmap, ptOffset, 0); }case WM_DWMSENDICONICLIVEPREVIEWBITMAP:SetWindowLivePreview(hWnd, LoadImageAndConvertToHBITMAP(bgImgs[bgIndex]));break;通过以上设置就可以发现实时预览图也显示正常了 总结 本文简单讲解了如何在 Windows 下实现任务栏自定义按钮和缩略图由于个人水平有限示例代码可能存在一些问题欢迎一起交流讨论。 参考文献 一个体验好的Windows 任务栏缩略图开发心得
http://www.zqtcl.cn/news/888390/

相关文章:

  • 保定网站建设公司哪家好app开发公司好吗
  • 网站域名备案证书网页素材大宝库
  • 沈阳网站制作的公司哪家好wordpress您访问的网页出错
  • 南京做公司网站有什么网站用名字做图片大全
  • 网站正在建设中页面wordpress 折叠文章
  • 广西建设科技协会网站手工做环保衣的网站
  • 怎么免费做网站教程开发专业网站
  • 鹿邑网站设计公司什么网站可以免费做找客户
  • wordpress模板站如何安装wordpress 查询语句
  • 给窗帘做网站淄博周村学校网站建设公司
  • 关于志愿者网站开发的论文做什么网站开发好
  • 做电影网站如何规避版权做新年公告图片的网站
  • 网站修改后怎么上传济南网络员
  • 家居seo整站优化方案怎样开平台软件
  • 深圳网站关键词网站做视频转流量
  • 做网站如何配置自己的电脑精准防恶意点击软件
  • 单页网站 挣钱深圳高水平网站制作
  • 网站建设哪几家好一些打开浏览器历史记录
  • 公司里面有人员增减要去哪个网站做登记网页开发报价单
  • 网站设计的公司运营接单百度搜索引擎首页
  • 最专业的做网站公司有哪些成都龙泉建设有限公司网站
  • 云南省玉溪市建设局官方网站wordpress 迁移 空白
  • 网站空间和数据库多个织梦dedecms网站怎么做站群
  • 网站模块插件是怎么做的个人建设网站流程图
  • 作品展示的网站建设网站方案
  • 整站优化哪家专业网站漏洞解决办法
  • 怎么给自己的网站做扫描码南宁seo排名外包
  • 网站的服务器在哪里怎么建设网站啊
  • 山东做网站三五网站备案怎样提交到管局
  • 自己如何做网站教程中山企业网站推广公司