// This function assigns icons to the button. // Any previous icon or bitmap will be removed. // // Parameters: // [IN] hIconIn // Handle fo the icon to show when the mouse is over the button. // Pass NULL to remove any icon from the button. // [IN] hIconOut // Handle to the icon to show when the mouse is outside the button. // Can be NULL. // // Return value: // BTNST_OK // Function executed successfully. // BTNST_INVALIDRESOURCE // Failed loading the specified resource. // DWORD CButtonST::SetIcon(HICON hIconIn, HICON hIconOut) { BOOL bRetValue; ICONINFO ii; // Free any loaded resource FreeResources(); if (hIconIn) { // Icon when mouse over button? m_csIcons[0].hIcon = hIconIn; // Get icon dimension ::ZeroMemory(&ii, sizeof(ICONINFO)); bRetValue = ::GetIconInfo(hIconIn, &ii); if (bRetValue == FALSE) { FreeResources(); return BTNST_INVALIDRESOURCE; } // if m_csIcons[0].dwWidth = (DWORD)(ii.xHotspot * 2); m_csIcons[0].dwHeight = (DWORD)(ii.yHotspot * 2); ::DeleteObject(ii.hbmMask); ::DeleteObject(ii.hbmColor); // Icon when mouse outside button? if (hIconOut) { if (hIconOut == BTNST_AUTO_GRAY) { hIconOut = CreateGrayscaleIcon(hIconIn); } // if m_csIcons[1].hIcon = hIconOut; // Get icon dimension ::ZeroMemory(&ii, sizeof(ICONINFO)); bRetValue = ::GetIconInfo(hIconOut, &ii); if (bRetValue == FALSE) { FreeResources(); return BTNST_INVALIDRESOURCE; } // if m_csIcons[1].dwWidth = (DWORD)(ii.xHotspot * 2); m_csIcons[1].dwHeight = (DWORD)(ii.yHotspot * 2); ::DeleteObject(ii.hbmMask); ::DeleteObject(ii.hbmColor); } // if } // if Invalidate(); return BTNST_OK; } // End of SetIcon
//============================================================================= // Sets icon from HICON CXButtonXP& CXButtonXP::SetIcon(HICON hIcon, ICON_ALIGNMENT ia /*= LEFT*/) //============================================================================= { if (m_hIcon) DestroyIcon(m_hIcon); m_hIcon = hIcon; TRACE(_T("m_hIcon=%X\n"), m_hIcon); // create grayscale icon for disabled button if (m_hGrayIcon) DestroyIcon(m_hGrayIcon); m_hGrayIcon = NULL; if (hIcon) m_hGrayIcon = CreateGrayscaleIcon(hIcon); m_eIconAlignment = ia; RedrawWindow(); return *this; }
SIZE CHyperLink::GetFirstIcon() { HICON hIco = NULL; ICONINFO icInfo = { 0 }; SIZE iconSz = { 0 }; if ((!m_bDisabled && ((m_uShowIcon & SI_ICONUP_LEFT && !m_bMouseIn) || (m_uShowIcon & SI_ICONHOVER_LEFT && m_bMouseIn && !m_bMouseDown) || (m_uShowIcon & SI_ICONDOWN_LEFT && m_bMouseDown && m_bMouseIn) || (m_uShowIcon & SI_ICONUP_RIGHT && !m_bMouseIn) || (m_uShowIcon & SI_ICONHOVER_RIGHT && m_bMouseIn && !m_bMouseDown) || (m_uShowIcon & SI_ICONDOWN_RIGHT && m_bMouseDown && m_bMouseIn)) ) || (m_uShowIcon & SI_ICONDISABLED_LEFT && m_bDisabled) || (m_uShowIcon & SI_ICONDISABLED_RIGHT && m_bDisabled)) { if (m_bDisabled) { if (m_hIconDisabled == NULL && m_bAutoGenerateDisabled) { HICON hico = m_hIconUp; if (hico == NULL) { hico = m_hIconHover; } if (hico == NULL) { hico = m_hIconDown; } if (hico != NULL) { m_hIconDisabled = CreateGrayscaleIcon(hico); m_bAutoGenerated = TRUE; } } hIco = m_hIconDisabled; } else if (!m_bDisabled && m_bMouseIn && !m_bMouseDown) { hIco = m_hIconHover; } else if (!m_bDisabled && m_bMouseIn && m_bMouseDown) { hIco = m_hIconDown; } else if (!m_bDisabled && !m_bMouseIn) { hIco = m_hIconUp; } if (hIco != NULL) { GetIconInfo(hIco, &icInfo); iconSz.cx = icInfo.xHotspot*2; iconSz.cy = icInfo.yHotspot*2; } } return iconSz; }