⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buttonssl.cpp

📁 实现Huffman编码统计压缩算法
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CButtonSSL::SetSSLCheck (int nCheck, BOOL bRedraw/* = TRUE*/) {
	UINT nType = GetControlType ();
	if (BS_AUTORADIOBUTTON == (BS_AUTORADIOBUTTON & nType) ||
		BS_RADIOBUTTON == (BS_RADIOBUTTON & nType) ||
		BS_AUTOCHECKBOX == (BS_AUTOCHECKBOX & nType) ||
		BS_CHECKBOX == (BS_CHECKBOX & nType)) {
		if (0 == nCheck) {
			m_nCheck = 0;
		}
		else {
			m_nCheck = 1;
		}

		if (TRUE == bRedraw) {
			Invalidate ();
		}
	}
}

int CButtonSSL::GetSSLCheck () {
	return m_nCheck;
}

/////////////////////////////////////////////////////////////////////////////
// Menu Functions

BOOL CButtonSSL::SetSSLButtonMenu (UINT nMenuResourceID) {
	// Ensure the SSL_BS_MENU_BTN style is set
	m_nStyle |= SSL_BS_MENU_BTN;
	if (NULL != m_menu.m_hMenu) {
		m_menu.DestroyMenu ();
	}
	BOOL bReturn = m_menu.LoadMenu (nMenuResourceID);

	m_bMenuLoaded |= bReturn;

	// Resize the button if necessary
	if (SSL_BS_AUTOSIZE == (SSL_BS_AUTOSIZE & m_nStyle)) {
		SetSize ();
	}

	return bReturn;
}

BOOL CButtonSSL::SetSSLButtonMenu (LPCTSTR lpszResourceName) {
	// Ensure the SSL_BS_MENU_BTN style is set
	m_nStyle |= SSL_BS_MENU_BTN;
	if (NULL != m_menu.m_hMenu) {
		m_menu.DestroyMenu ();
	}
	BOOL bReturn = m_menu.LoadMenu (lpszResourceName);

	m_bMenuLoaded |= bReturn;


	// Resize the button if necessary
	if (SSL_BS_AUTOSIZE == (SSL_BS_AUTOSIZE & m_nStyle)) {
		SetSize ();
	}

	return bReturn;
}

UINT CButtonSSL::CheckSSLMenuItem (UINT nIDCheckItem, UINT nCheck/* = MF_CHECKED*/) {
	if (FALSE == m_bMenuLoaded) {
		return MF_DOES_NOT_EXIST;
	}

    return m_menu.CheckMenuItem (nIDCheckItem, nCheck);
}

BOOL CButtonSSL::CheckSSLMenuRadioItem (UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.CheckMenuRadioItem (nIDFirst, nIDLast, nIDItem, nFlags);
}

UINT CButtonSSL::EnableSSLMenuItem (UINT nIDEnableItem, UINT nEnable) {
    if (FALSE == m_bMenuLoaded) {
        return MF_DOES_NOT_EXIST;
    }

    return m_menu.EnableMenuItem (nIDEnableItem, nEnable);
}

UINT CButtonSSL::GetSSLMenuItemCount () const {
    if (FALSE == m_bMenuLoaded) {
        return MF_DOES_NOT_EXIST;
    }

    return m_menu.GetMenuItemCount ();
}

UINT CButtonSSL::GetSSLMenuItemID (int nPos) const {
    if (FALSE == m_bMenuLoaded) {
        return MF_DOES_NOT_EXIST;
    }

    return m_menu.GetMenuItemID (nPos);
}

UINT CButtonSSL::GetSSLMenuState (UINT nID, UINT nFlags) {
	if (FALSE == m_bMenuLoaded) {
		return MF_DOES_NOT_EXIST;
	}
	
	return m_menu.GetMenuState (nID, nFlags);
}

int CButtonSSL::GetSSLMenuString (UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags) {
    if (FALSE == m_bMenuLoaded) {
        return 0;
    }

    return m_menu.GetMenuString (nIDItem, lpString, nMaxCount, nFlags);
}

int CButtonSSL::GetSSLMenuString (UINT nIDItem, CString& rString, UINT nFlags) {
    if (FALSE == m_bMenuLoaded) {
        return 0;
    }

    return m_menu.GetMenuString (nIDItem, rString, nFlags);
}

BOOL CButtonSSL::GetSSLMenuItemInfo (UINT nIDItem, LPMENUITEMINFO lpMenuItemInfo,
                                     BOOL ByPos/*=FALSE*/) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.GetMenuItemInfo (nIDItem, lpMenuItemInfo, ByPos);
}

BOOL CButtonSSL::ModifySSLMenu (UINT nPosition, UINT nFlags, UINT nIDNewItem/*=0*/,
                                LPCTSTR lpszNewItem/*=NULL*/) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.ModifyMenu (nPosition, nFlags, nIDNewItem, lpszNewItem);
}

BOOL CButtonSSL::ModifySSLMenu (UINT nPosition, UINT nFlags, UINT nIDNewItem,
                                const CBitmap* pBmp) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.ModifyMenu (nPosition, nFlags, nIDNewItem, pBmp);
}

BOOL CButtonSSL::RemoveSSLMenu (UINT nPosition, UINT nFlags) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.RemoveMenu (nPosition, nFlags);
}

BOOL CButtonSSL::SetSSLMenuItemBitmaps (UINT nPosition, UINT nFlags,
                                        const CBitmap* pBmpUnchecked,
                                        const CBitmap* pBmpChecked) {
    if (FALSE == m_bMenuLoaded) {
        return FALSE;
    }

    return m_menu.SetMenuItemBitmaps (nPosition, nFlags, pBmpUnchecked,
                                      pBmpChecked);
}

/////////////////////////////////////////////////////////////////////////////
// Miscellaneous Functions

BOOL CButtonSSL::SetSSLButtonCursor (UINT nResourceID) {
	HINSTANCE hInstResource;
	// Destroy any previous cursor
	if (NULL != m_hCursor) {
		::DestroyCursor (m_hCursor);
		m_hCursor = NULL;
	}

	// If we want a cursor
	if (nResourceID != NULL) {
		hInstResource = AfxFindResourceHandle (MAKEINTRESOURCE (nResourceID), RT_GROUP_CURSOR);
		// Load icon resource
		m_hCursor = (HCURSOR)::LoadImage (hInstResource, MAKEINTRESOURCE (nResourceID),
			IMAGE_CURSOR, 0, 0, 0);
		// If something wrong then return FALSE
		if (NULL == m_hCursor) {
			return FALSE;
		}
	}

	return TRUE;
}

void CButtonSSL::SetSSLButtonToolTip (LPCTSTR lpszTipText, BOOL bActivate) {
	// Can't have a NULL text string
	if (NULL == lpszTipText) {
		return;
	}

	// Initialise the tooltip
	InitToolTipCtrl ();

	// Need to add a tooltip if none defined
	if (0 == m_ToolTip.GetToolCount ()) {
		CRect rectBtn;
		GetClientRect (rectBtn);
		m_ToolTip.AddTool (this, lpszTipText, rectBtn, 1);
	}

	// Set the text
	m_ToolTip.UpdateTipText (lpszTipText, this, 1);
	m_ToolTip.Activate (bActivate);
}

void CButtonSSL::SetSSLButtonToolTip (UINT nResourceID, BOOL bActivate) {
	CString strTipText;
	strTipText.LoadString (nResourceID);
	if (FALSE == strTipText.IsEmpty ()) {
		SetSSLButtonToolTip ((LPCTSTR)strTipText, bActivate);
	}
}

void CButtonSSL::GetSSLButtonToolTip (CString& strTipText) {
	m_ToolTip.GetText (strTipText, this, 1);
}

// The following appeared in Paul DiLascia's Jan 1998 MSJ articles.
// It loads a "hand" cursor from the winhlp32.exe module
void CButtonSSL::SetSSLButtonURL (LPCTSTR lpszURL) {
	if (NULL != lpszURL) {
		// Store the URL
		::lstrcpyn(m_szURL, lpszURL, _MAX_PATH);

		if (NULL == m_hCursor) {
			// Try to load the 'standard' hand cursor
			CString szWndDir;
			GetWindowsDirectory (szWndDir.GetBuffer (MAX_PATH), MAX_PATH);
			szWndDir.ReleaseBuffer ();

			// Try cursor #106 in WinHlp32.exe
			CString szHlp32 = szWndDir + _T("\\winhlp32.exe");
			HMODULE hModule = LoadLibrary (szHlp32);
			if (NULL != hModule) {
				HCURSOR hHandCursor;
				hHandCursor = ::LoadCursor (hModule, MAKEINTRESOURCE (106));
				if (NULL != hHandCursor) {
					m_hCursor = CopyCursor (hHandCursor);
				}
			}
		}
	}
	else {
		// Remove any existing URL
		::ZeroMemory(&m_szURL, sizeof(m_szURL));
	}
}

/////////////////////////////////////////////////////////////////////////////
// CButtonSSL helper functions

void CButtonSSL::DrawArrow (CDC* pDC, CPoint ptTip) {
	CPoint ptDest;

	pDC->SetPixel (ptTip, RGB (0, 0, 0));

	ptTip -= CPoint (1, 1);
	pDC->MoveTo (ptTip);

	ptDest = ptTip;
	ptDest += CPoint (3, 0);
	pDC->LineTo (ptDest);

	ptTip -= CPoint (1, 1);
	pDC->MoveTo (ptTip);

	ptDest = ptTip;
	ptDest += CPoint (5, 0);
	pDC->LineTo (ptDest);

	ptTip -= CPoint (1, 1);
	pDC->MoveTo (ptTip);

	ptDest = ptTip;
	ptDest += CPoint (7, 0);
	pDC->LineTo (ptDest);
}

BOOL CButtonSSL::HitMenuButton (CPoint pt)
{
	if (FALSE == m_bMenuLoaded)
		return FALSE; // Don't allow menu button drop down if no menu items are loaded

	ClientToScreen(&pt);

	CRect rect;
	GetWindowRect (rect);
	rect.left = rect.right - DROP_BUTTON_WIDTH;

	return rect.PtInRect (pt);
}

void CButtonSSL::InitToolTipCtrl () {
	if (NULL == m_ToolTip.m_hWnd) {
		m_ToolTip.Create (this);
		m_ToolTip.Activate(FALSE); // Inactive initially
		m_ToolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, 300); // Enable multiline tooltip
	}
}

void CButtonSSL::AddBitmap (UINT nResourceID, COLORREF crMask) {
	m_bmpImage.Detach ();
	m_bmpImage.LoadBitmap (nResourceID);
	m_imageList.Add (&m_bmpImage, crMask);
}

void CButtonSSL::AddIcon (UINT nResourceID) {
	HINSTANCE hInstance = AfxFindResourceHandle (MAKEINTRESOURCE (nResourceID), RT_GROUP_ICON);

	m_hIcon = (HICON)::LoadImage (hInstance, MAKEINTRESOURCE (nResourceID), IMAGE_ICON, 0, 0, 0);
	if (NULL != m_hIcon) {
		ICONINFO iconInfo;
		ZeroMemory (&iconInfo, sizeof (ICONINFO));
		::GetIconInfo (m_hIcon, &iconInfo);
		::DeleteObject(iconInfo.hbmMask);
		::DeleteObject(iconInfo.hbmColor);
		m_imageList.Add (m_hIcon);
	}
}

CPoint CButtonSSL::GetImagePoint (CRect btnRect) {
	int nLeft = 3, nTop = 3; // Default position for SSL_IMAGE_LEFT / _TOP
	// Determine the left coordinate
	if (SSL_IMAGE_CENTER == (SSL_IMAGE_CENTER & m_nImageAlign)) {
		if (SSL_BS_MENU_BTN == (SSL_BS_MENU_BTN & m_nStyle)) {
			nLeft = (btnRect.Width () - m_nImageWidth - DROP_BUTTON_WIDTH) / 2;
		}
		else {
			nLeft = (btnRect.Width () - m_nImageWidth) / 2;
		}
	}
	else if (SSL_IMAGE_RIGHT == (SSL_IMAGE_RIGHT & m_nImageAlign)) {
		nLeft = btnRect.right - m_nImageWidth - 3;
		if (SSL_BS_MENU_BTN == (SSL_BS_MENU_BTN & m_nStyle)) {
			nLeft -= DROP_BUTTON_WIDTH;
		}
	}
	// Determine the top coordinate
	if (SSL_IMAGE_VCENTER == (SSL_IMAGE_VCENTER & m_nImageAlign)) {
		nTop = (btnRect.Height () - m_nImageHeight) / 2;
	}
	else if (SSL_IMAGE_BOTTOM == (SSL_IMAGE_BOTTOM & m_nImageAlign)) {
		nTop = btnRect.bottom - m_nImageHeight - 3;
	}

	return CPoint (nLeft + m_bBtnPushed, nTop + m_bBtnPushed);
}

void CButtonSSL::SetSize () {
	// Get the size of the button text
	CDC* pDC = GetDC ();
	SIZE size;
	CString szText;
	GetWindowText (szText);
	// Need to select the font to ensure correct sizing for GetTextExtentPoint32
	pDC->SelectObject (&m_font); 
	GetTextExtentPoint32 (pDC->m_hDC, szText, szText.GetLength (), &size);

	// Get the current size of the button
	CRect btnRect;
	GetWindowRect (btnRect);

	// Adjust the size according to the contents
	btnRect.right = btnRect.left + max (m_nImageWidth, size.cx) + 6;
	btnRect.bottom = btnRect.top + max (m_nImageHeight, size.cy) + 6;

	// Take in to account the drop button if there is one
	if (SSL_BS_MENU_BTN == (SSL_BS_MENU_BTN & m_nStyle)) {
		btnRect.right += DROP_BUTTON_WIDTH + 3;
	}

	// Resize the button
	SetWindowPos (NULL, 0, 0, btnRect.Width (), btnRect.Height (), SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);
}

void CButtonSSL::TraceState (ButtonState state) {
	CString strState = _T("Button State: ");
	switch (state) {
	case SSL_STATE_UP:
		strState += _T("Up");
		break;
	case SSL_STATE_OVER:
		strState += _T("Over");
		break;
	case SSL_STATE_DOWN:
		strState += _T("Down");
		break;
	case SSL_STATE_DISABLED:
		strState += _T("Disabled");
		break;
	default:
		strState += _T("Invalid");
	}
	TRACE ("%s. m_bDisabled: %i. m_bMouseOnBtn: %i. m_bBtnPushed: %i. m_bMenuPushed: %i.\n",
		strState, m_bDisabled, m_bMouseOnBtn, m_bBtnPushed, m_bMenuPushed);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -