void CMuleToolbarCtrl::ChangeToolbarBitmap(const CString& path, bool bRefresh) { bool bResult = false; CImageList ImageList; CEnBitmap Bitmap; if (!path.IsEmpty() && Bitmap.LoadImage(path)) { BITMAP bm = {0}; Bitmap.GetObject(sizeof(bm), &bm); if (bm.bmWidth == NUM_BUTTON_BITMAPS*m_sizBtnBmp.cx && bm.bmHeight == m_sizBtnBmp.cy) { bool bAlpha = bm.bmBitsPixel > 24; if (ImageList.Create(m_sizBtnBmp.cx, bm.bmHeight, bAlpha ? ILC_COLOR32 : (theApp.m_iDfltImageListColorFlags | ILC_MASK), 0, 1)) { ImageList.Add(&Bitmap, bAlpha ? 0xFF000000 : RGB(255, 0, 255)); CImageList* pimlOld = SetImageList(&ImageList); ImageList.Detach(); if (pimlOld) pimlOld->DeleteImageList(); bResult = true; } } Bitmap.DeleteObject(); } // if image file loading or image list creation failed, create default image list. if (!bResult) { // load from icon ressources ImageList.Create(m_sizBtnBmp.cx, m_sizBtnBmp.cy, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1); ImageList.Add(CTempIconLoader(_T("CONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("DISCONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("STOPCONNECTING"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("KADEMLIA"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SERVER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("TRANSFER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SEARCH"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SharedFiles"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("MESSAGES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("IRC"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("STATISTICS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("PREFERENCES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("TOOLS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("HELP"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ASSERT( ImageList.GetImageCount() == NUM_BUTTON_BITMAPS ); CImageList* pimlOld = SetImageList(&ImageList); ImageList.Detach(); if (pimlOld) pimlOld->DeleteImageList(); } if (bRefresh) { UpdateBackground(); Invalidate(); Refresh(); } }
///////////////////////////////////////////////////////////////////////////// // CMyTreeCtrl message handlers void CMyTreeCtrl::OnDestroy() { CImageList *pimagelist; pimagelist = GetImageList(TVSIL_NORMAL); if( pimagelist ) pimagelist->DeleteImageList(); delete pimagelist; pimagelist = GetImageList(TVSIL_STATE); if( pimagelist ) pimagelist->DeleteImageList(); delete pimagelist; }
bool UpdateImageListFull(TSheet& rSheet) { // Get the tab control... CTabCtrl* pTab = rSheet.GetTabControl(); if (!IsWindow(pTab->GetSafeHwnd())) { // ASSERT: Tab control could not be retrieved or it is not a valid window. ASSERT( FALSE ); return false; } // Create the replacement image list via policy. std::auto_ptr<CImageList> apILNew( TListCreator::CreateImageList() ); bool bSuccess = (NULL != apILNew.get() ); // Reload the icons from the property pages. int nTotalPageCount = rSheet.GetPageCount(); for(int nCurrentPage = 0; nCurrentPage < nTotalPageCount && bSuccess; ++nCurrentPage ) { // Get the page. CPropertyPage* pPage = rSheet.GetPage( nCurrentPage ); ASSERT( pPage ); // Set the icon in the image list from the page properties. if( pPage && ( pPage->m_psp.dwFlags & PSP_USEHICON ) ) { /*bSuccess &=*/ ( -1 != apILNew->Add( pPage->m_psp.hIcon ) ); } if( pPage && ( pPage->m_psp.dwFlags & PSP_USEICONID ) ) { /*bSuccess &=*/ ( -1 != apILNew->Add( theApp.LoadIcon( pPage->m_psp.pszIcon, 16, 16 ) ) ); } } if( !bSuccess ) { // This ASSERT because either the image list could not be created or icon insertion failed. ASSERT( FALSE ); // Cleanup what we have in the new image list. if( apILNew.get() ) { apILNew->DeleteImageList(); } return false; } // Replace the image list from the tab control. CImageList* pilOld = pTab->SetImageList( CImageList::FromHandle( apILNew->Detach() ) ); // Clean the old image list if there was one. if( pilOld ) { pilOld->DeleteImageList(); } return true; };
void CDirectoryTreeCtrl::OnDestroy() { // If a treeview control is created with TVS_CHECKBOXES, the application has to // delete the image list which was implicitly created by the control. CImageList *piml = GetImageList(TVSIL_STATE); if (piml) piml->DeleteImageList(); CTreeCtrl::OnDestroy(); }
void CIrcWnd::SetAllIcons() { CImageList iml; iml.Create(16, 16, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1); iml.Add(CTempIconLoader(_T("Smiley_Smile"))); iml.Add(CTempIconLoader(_T("Bold"))); iml.Add(CTempIconLoader(_T("Underline"))); iml.Add(CTempIconLoader(_T("Colour"))); iml.Add(CTempIconLoader(_T("ResetFormat"))); CImageList* pImlOld = m_wndFormat.SetImageList(&iml); iml.Detach(); if (pImlOld) pImlOld->DeleteImageList(); }
// @pymethod |PyCImageList|DeleteImageList|Deletes an image list. PyObject *PyCImageList_DeleteImageList( PyObject *self, PyObject *args ) { // @comm This frees all resources associated with an image list. // No further operations on the object will be allowed. CImageList *pList; if (!(pList=PyCImageList::GetImageList(self))) return NULL; CHECK_NO_ARGS2(args, "DeleteImageList"); // Kill the C++ object. GUI_BGN_SAVE; Python_delete_assoc(pList); BOOL ok = pList->DeleteImageList(); delete pList; GUI_END_SAVE; if (!ok) RETURN_ERR("DeleteImageList failed"); RETURN_NONE; }
void CDropDownButton::SetIcon(LPCTSTR pszResourceID) { if (!m_bSingleDropDownBtn) return; CImageList iml; iml.Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1); iml.Add(CTempIconLoader(pszResourceID)); CImageList* pImlOld = SetImageList(&iml); iml.Detach(); if (pImlOld) pImlOld->DeleteImageList(); TBBUTTONINFO tbbi = {0}; tbbi.cbSize = sizeof tbbi; tbbi.dwMask = TBIF_IMAGE; tbbi.iImage = 0; SetButtonInfo(GetWindowLong(m_hWnd, GWL_ID), &tbbi); }
void CKademliaWnd::SetAllIcons() { // frames m_ctrlBootstrap.SetIcon(_T("KadBootstrap")); if (icon_kadsea) VERIFY( DestroyIcon(icon_kadsea) ); icon_kadsea = theApp.LoadIcon(_T("KadCurrentSearches"), 16, 16); ((CStatic*)GetDlgItem(IDC_KADICO2))->SetIcon(icon_kadsea); CImageList iml; iml.Create(16, 16, theApp.m_iDfltImageListColorFlags | ILC_MASK, 1, 1); iml.Add(CTempIconLoader(_T("KadContactList"))); iml.Add(CTempIconLoader(_T("FriendSlot"))); CImageList* pImlOld = m_pbtnWnd->SetImageList(&iml); iml.Detach(); if (pImlOld) pImlOld->DeleteImageList(); }
CImageList* CPlayerListCtrl::CreateDragImageEx(LPPOINT lpPoint) { if (GetSelectedCount() <= 0) { return nullptr; } CRect cSingleRect, cCompleteRect(0, 0, 0, 0); GetClientRect(cSingleRect); int nWidth = cSingleRect.Width(); // Start and Stop index in view area int nIndex = GetTopIndex() - 1; int nBottomIndex = GetBottomIndex(); // Determine the size of the drag image (limited for // rows visible and Client width) while ((nIndex = GetNextItem(nIndex, LVNI_SELECTED)) != -1 && nIndex <= nBottomIndex) { GetItemRect(nIndex, cSingleRect, LVIR_BOUNDS); /* CRect r; GetItemRect(nIndex, r, LVIR_LABEL); cSingleRect.left = r.left; */ if (cSingleRect.left < 0) { cSingleRect.left = 0; } if (cSingleRect.right > nWidth) { cSingleRect.right = nWidth; } cCompleteRect |= cSingleRect; } // // Create bitmap in memory DC // CClientDC cDc(this); CDC cMemDC; CBitmap cBitmap; if (!cMemDC.CreateCompatibleDC(&cDc)) { return nullptr; } if (!cBitmap.CreateCompatibleBitmap(&cDc, cCompleteRect.Width(), cCompleteRect.Height())) { return nullptr; } CBitmap* pOldMemDCBitmap = cMemDC.SelectObject(&cBitmap); // Here green is used as mask color cMemDC.FillSolidRect(0, 0, cCompleteRect.Width(), cCompleteRect.Height(), RGB(0, 255, 0)); // Paint each DragImage in the DC nIndex = GetTopIndex() - 1; while ((nIndex = GetNextItem(nIndex, LVNI_SELECTED)) != -1 && nIndex <= nBottomIndex) { CPoint pt; CImageList* pSingleImageList = CreateDragImage(nIndex, &pt); if (pSingleImageList) { GetItemRect(nIndex, cSingleRect, LVIR_BOUNDS); pSingleImageList->Draw(&cMemDC, 0, CPoint(cSingleRect.left - cCompleteRect.left, cSingleRect.top - cCompleteRect.top), ILD_MASK); pSingleImageList->DeleteImageList(); delete pSingleImageList; } } cMemDC.SelectObject(pOldMemDCBitmap); // // Create the image list with the merged drag images // CImageList* pCompleteImageList = DEBUG_NEW CImageList; pCompleteImageList->Create(cCompleteRect.Width(), cCompleteRect.Height(), ILC_COLOR | ILC_MASK, 0, 1); // Here green is used as mask color pCompleteImageList->Add(&cBitmap, RGB(0, 255, 0)); // // as an optional service: // Find the offset of the current mouse cursor to the image list // this we can use in BeginDrag() // if (lpPoint) { lpPoint->x = cCompleteRect.left; lpPoint->y = cCompleteRect.top; } return pCompleteImageList; }
LRESULT CToolbarWnd::OnInitDialog(WPARAM /*wParam*/, LPARAM /*lParam*/) { Default(); InitWindowStyles(this); //(void)m_sizeDefault; // not yet set CRect sizeDefault; GetWindowRect(&sizeDefault); CRect rcBorders(4, 4, 4, 4); SetBorders(&rcBorders); m_szFloat.cx = sizeDefault.Width() + rcBorders.left + rcBorders.right + GetSystemMetrics(SM_CXEDGE) * 2; m_szFloat.cy = sizeDefault.Height() + rcBorders.top + rcBorders.bottom + GetSystemMetrics(SM_CYEDGE) * 2; m_szMRU = m_szFloat; UpdateData(FALSE); // Initalize the toolbar CImageList iml; int nFlags= theApp.m_iDfltImageListColorFlags; // older Windows versions imageslists cannot create monochrome (disabled) icons which have alpha support // so we have to take care of this ourself bool bNeedMonoIcons = thePrefs.GetWindowsVersion() < _WINVER_VISTA_ && nFlags != ILC_COLOR4; nFlags |= ILC_MASK; iml.Create(16, 16, nFlags, 1, 1); iml.Add(CTempIconLoader(_T("FILEPRIORITY"))); iml.Add(CTempIconLoader(_T("PAUSE"))); iml.Add(CTempIconLoader(_T("STOP"))); iml.Add(CTempIconLoader(_T("RESUME"))); iml.Add(CTempIconLoader(_T("DELETE"))); iml.Add(CTempIconLoader(_T("OPENFILE"))); iml.Add(CTempIconLoader(_T("PREVIEW"))); iml.Add(CTempIconLoader(_T("FILEINFO"))); iml.Add(CTempIconLoader(_T("FILECOMMENTS"))); iml.Add(CTempIconLoader(_T("ED2KLINK"))); iml.Add(CTempIconLoader(_T("CATEGORY"))); iml.Add(CTempIconLoader(_T("CLEARCOMPLETE"))); iml.Add(CTempIconLoader(_T("KadFileSearch"))); iml.Add(CTempIconLoader(_T("Search"))); if (bNeedMonoIcons) { CImageList iml2; iml2.Create(16, 16, nFlags, 1, 1); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("FILEPRIORITY")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("PAUSE")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("STOP")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("RESUME")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("DELETE")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("OPENFILE")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("PREVIEW")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("FILEINFO")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("FILECOMMENTS")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("ED2KLINK")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("CATEGORY")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("CLEARCOMPLETE")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("KadFileSearch")))); VERIFY(AddIconGrayscaledToImageList(iml2, CTempIconLoader(_T("Search")))); CImageList* pImlOld = m_btnBar->SetDisabledImageList(&iml2); iml2.Detach(); if (pImlOld) pImlOld->DeleteImageList(); } CImageList* pImlOld = m_btnBar->SetImageList(&iml); iml.Detach(); if (pImlOld) pImlOld->DeleteImageList(); m_btnBar->ModifyStyle((theApp.m_ullComCtrlVer >= MAKEDLLVERULL(6, 16, 0, 0)) ? TBSTYLE_TRANSPARENT : 0, 0); m_btnBar->SetMaxTextRows(0); FillToolbar(); return TRUE; }
/////////////////////////////////////////////////////////////////////////////// // // CreateCheckboxImageList() // // Purpose: Create themed checkbox image list // // Parameters: pDC - pointer to device context for drawing // imagelist - image list to create // nSize - height and width of images // crBackground - fill color // // Returns: BOOL - TRUE if image list created OK // BOOL CreateCheckboxImageList(CDC *pDC, CImageList& imagelist, int nSize, COLORREF crBackground) { ASSERT(pDC); ASSERT(nSize > 0); BOOL rc = FALSE; /////////////////////////////////////////////////////////////////////////// // // CHECKBOX IMAGES // // From MSDN: "To indicate that the item has no state image, set the // index to zero. This convention means that image zero in // the state image list cannot be used as a state image." // // Note that comparable hot image = cold image index OR 8. // Disabled state = index OR 4. struct CHECKBOXDRAWDATA { TCHAR * pszDesc; // description for debugging int nStateId; // for DrawThemeBackground UINT nState; // for DrawFrameControl } cbdd[] = { // cold ----------------------------------------------------------------------------------- /*0000*/_T("unused"), 0, 0, /*0001*/_T("unchecked normal"), CBS_UNCHECKEDNORMAL, DFCS_BUTTONCHECK | DFCS_FLAT, /*0010*/_T("checked normal"), CBS_CHECKEDNORMAL, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT, /*0011*/_T("tri-state normal"), CBS_MIXEDNORMAL, DFCS_BUTTON3STATE | DFCS_CHECKED | DFCS_FLAT, /*0100*/_T("unused"), 0, 0, /*0101*/_T("unchecked disabled"), CBS_UNCHECKEDDISABLED, DFCS_BUTTONCHECK | DFCS_INACTIVE | DFCS_FLAT, /*0110*/_T("checked disabled"), CBS_CHECKEDDISABLED, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT, /*0111*/_T("tri-state disabled"), CBS_MIXEDDISABLED, DFCS_BUTTON3STATE | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT, // hot ------------------------------------------------------------------------------------ /*1000*/_T("unused"), 0, 0, /*1001*/_T("unchecked normal"), CBS_UNCHECKEDHOT, DFCS_BUTTONCHECK | DFCS_FLAT, /*1010*/_T("checked normal"), CBS_CHECKEDHOT, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT, /*1011*/_T("tri-state normal"), CBS_MIXEDHOT, DFCS_BUTTON3STATE | DFCS_CHECKED | DFCS_FLAT, /*1100*/_T("unused"), 0, 0, /*1101*/_T("unchecked disabled"), CBS_UNCHECKEDDISABLED, DFCS_BUTTONCHECK | DFCS_INACTIVE | DFCS_FLAT, /*1110*/_T("checked disabled"), CBS_CHECKEDDISABLED, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT, /*1111*/_T("tri-state disabled"), CBS_MIXEDDISABLED, DFCS_BUTTON3STATE | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT, NULL, 0, 0 // last entry }; if (pDC && (nSize > 0)) { const int nBmpWidth = nSize; const int nBmpHeight = nSize; const int nImages = sizeof(cbdd)/sizeof(cbdd[0]); ASSERT(nImages == 17); if (imagelist.GetSafeHandle()) imagelist.DeleteImageList(); CBitmap bmpCheckboxes; if (bmpCheckboxes.CreateCompatibleBitmap(pDC, nBmpWidth * nImages, nBmpHeight)) { if (imagelist.Create(nBmpWidth, nBmpHeight, ILC_COLOR32 | ILC_MASK, nImages, 1)) { CDC dcMem; if (dcMem.CreateCompatibleDC(pDC)) { HTHEME hTheme = NULL; hTheme = (g_xpStyle.IsThemeActive() && g_xpStyle.IsAppThemed()) ? g_xpStyle.OpenThemeData(NULL, L"BUTTON") : NULL; CBitmap* pOldBmp = dcMem.SelectObject(&bmpCheckboxes); dcMem.FillSolidRect(0, 0, nBmpWidth*nImages, nBmpHeight, crBackground); int nImageWidth = nBmpWidth - 2; // allow 2 for border int nImageHeight = nBmpHeight - 2; int nImageLeft = (nBmpWidth - nImageWidth) / 2; int nImageTop = (nBmpHeight - nImageHeight) / 2; CRect rectImage(nImageLeft, nImageTop, nImageLeft+nImageWidth, nImageTop+nImageHeight); for (int i = 0; cbdd[i].pszDesc != NULL; i++) { if (_tcscmp(cbdd[i].pszDesc, _T("unused")) == 0) { // unused image slot // note that we skip the first image - they are 1-based } else { if (hTheme) { g_xpStyle.DrawThemeBackground(hTheme, dcMem, BP_CHECKBOX, cbdd[i].nStateId, &rectImage, NULL); g_xpStyle.DrawThemeEdge(hTheme, dcMem, BP_CHECKBOX, cbdd[i].nStateId, &rectImage, 0, 0, NULL); } else { dcMem.DrawFrameControl(&rectImage, DFC_BUTTON, cbdd[i].nState); } } rectImage.left += nBmpWidth; rectImage.right += nBmpWidth; } if (hTheme) { g_xpStyle.CloseThemeData(hTheme); hTheme = NULL; } dcMem.SelectObject(pOldBmp); imagelist.Add(&bmpCheckboxes, RGB(255,0,255)); if (hTheme) g_xpStyle.CloseThemeData(hTheme); rc = TRUE; } else { TRACE(_T("ERROR - failed to create DC\n")); } } else { TRACE(_T("ERROR - failed to create image list\n")); } } else { TRACE(_T("ERROR - failed to create bitmap\n")); } } else { TRACE(_T("ERROR - bad parameters\n")); } return rc; }