日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

托盘程序与jgp文件加载

發布時間:2024/3/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 托盘程序与jgp文件加载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、程序界面最小化時,想在托盤中顯示自己的圖標:

NOTIFYICONDATA nid;?
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); ? ?
nid.hWnd = this->m_hWnd; ? ?
nid.uID = IDR_MAINFRAME; ? ?
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ? ; ? ?
nid.uCallbackMessage = MY_NOTIFY_SHOW;//自定義的消息名稱?
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); ? ?
strcpy(nid.szTip, _T("圖標測試"));//信息提示條?
Shell_NotifyIcon(NIM_ADD,&nid);//在托盤區添加圖標

2、刪除

NOTIFYICONDATA nid;?
nid.hWnd=this->m_hWnd;?
nid.uID=IDR_MAINFRAME;?
Shell_NotifyIcon(NIM_DELETE, &nid);

3、加載自己的圖標文件

上面加載的是vs自帶的圖標,也可加載自定義圖標,但這些要加入到工程,

LoadImage可以加載bitmap位圖文件。

加載jpg要進行轉換

? ? ? ? 下面是一些轉換的函數

方法一、

HICON HICONFromCBitmap( CBitmap& bitmap)
{
BITMAP bmp;
bitmap.GetBitmap(&bmp);

HBITMAP hbmMask = ::CreateCompatibleBitmap(::GetDC(NULL),?
bmp.bmWidth, bmp.bmHeight);

ICONINFO ii = {0};
ii.fIcon = TRUE;
ii.hbmColor = bitmap;
ii.hbmMask = hbmMask;

HICON hIcon = ::CreateIconIndirect(&ii);//一旦不再需要,注意用DestroyIcon函數釋放占用的內存及資源
::DeleteObject(hbmMask);

return hIcon;
}

方法二、

#include <gdiplus.h>
#pragma comment(lib,"GdiPlus.lib")

HICON CreateIcon(HBITMAP hBitmap)
{
Gdiplus::Bitmap* pTmpBitmap=Gdiplus::Bitmap::FromHBITMAP(hBitmap,NULL);
HICON hIcon=NULL;
pTmpBitmap->GetHICON(&hIcon);
delete pTmpBitmap;
return hIcon;
}

HICON轉HBITMAP

利用GetIconInfo函數獲取ICONINFO信息, 再將其復制到位圖當中去, 代碼如下:

HBITMAP ConvertIconToBitmap(HICON hIcon)
{?
HBITMAP hBmp;?
BITMAP bmp;?
CDC bmpDC;?
CDC iconDC;?
ICONINFO csII;?
int bRetValue = ::GetIconInfo(hIcon, &csII);?
if (bRetValue == FALSE) return NULL;?
bmpDC.Attach(::GetDC(NULL));?
iconDC.CreateCompatibleDC(&bmpDC);?
if (::GetObject(csII.hbmColor, sizeof(BITMAP), &bmp))?
{?
DWORD dwWidth = csII.xHotspot*2;?
DWORD dwHeight = csII.yHotspot*2;?
hBmp= ::CreateBitmap(dwWidth, dwHeight, bmp.bmPlanes,?
bmp.bmBitsPixel, NULL);
iconDC.SelectObject(csII.hbmColor);?
bmpDC.SelectObject(hBmp);?
bmpDC.BitBlt(0,0,dwWidth,dwHeight,&iconDC,0,0,SRCCOPY);?
return hBmp;?
}
return NULL;
}

還有一種方法就是先創建一個兼容位圖, 然后通過API函數::DrawIcon()復制上去, CopyImage函數可以用來替換創建兼容DC以后的那些驟了

一個轉換的例子
CImage img;
HRESULT ret = img.Load("logo.jpg"); //要加載的文件名(包含路徑)
HBITMAP bitmap = img.Detach();
ICONINFO ii = {0};
ii.fIcon = TRUE;
ii.hbmColor = bitmap;
ii.hbmMask =bitmap;
HICON hIcon = ::CreateIconIndirect(&ii);??

總結

以上是生活随笔為你收集整理的托盘程序与jgp文件加载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。