托盘程序与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文件加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: step 文件在sw怎么编辑_如何使用S
- 下一篇: UEFI0067:A PCIe link