亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hyperlink.cpp

?? 這個源碼封裝了ADO連接數據庫
?? CPP
字號:
// HyperLink.cpp : implementation file


#include "stdafx.h"
#include "HyperLink.h"
//Win2000定義
//#define IDC_HAND            MAKEINTRESOURCE(32649)

#ifdef _DEBUG
#define new DEBUm_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define TOOLTIP_ID 1

//設置風格位操作
#define SETBITS(dw, bits)	(dw |= bits)
//去掉風格位操作
#define CLEARBITS(dw, bits)	(dw &= ~(bits))
//判斷風格位操作
#define BITSET(dw, bit)		(((dw) & (bit)) != 0L)

/////////////////////////////////////////////////////////////////////////////
// CHyperLink

const DWORD CHyperLink::STYLEUNDERLINE		 = 0x00000001;		// 下劃線
const DWORD CHyperLink::STYLEUSEHOVER		 = 0x00000002;		// 鼠標的掠過顏色風格
const DWORD CHyperLink::STYLEAUTOSIZE	  	 = 0x00000004;		// 自動調整大小
const DWORD CHyperLink::STYLEDOWNCLICK		 = 0x00000008;		// 鼠標按下代表單擊風格
const DWORD CHyperLink::STYLEGETFOCUSONCLICK = 0x00000010;		// 單擊時候得到光標
const DWORD CHyperLink::STYLENOHANDCURSOR	 = 0x00000020;		// 沒有設置光標
const DWORD CHyperLink::STYLENOACTIVECOLOR	 = 0x00000040;		// 沒有活動時設置顏色

//默認的顏色
COLORREF CHyperLink::m_crLinkColor		= RGB(0, 0, 255);	
COLORREF CHyperLink::m_crActiveColor	= RGB(0, 128, 128);	
COLORREF CHyperLink::m_crVisitedColor	= RGB(128, 0, 128);	
COLORREF CHyperLink::m_crHoverColor		= RGB(255, 0, 0	);	

HCURSOR	 CHyperLink::m_hLinkCursor		= NULL;				



CHyperLink::CHyperLink()
{
	m_bOverControl		= FALSE;	// 光標不在控件上
	m_bVisited			= FALSE;	// 可見
	m_bLinkActive		= FALSE;	// 活動
	m_strURL.Empty();				// URL
	// 設置默認的風格
	m_dwStyle = STYLEUNDERLINE|STYLEAUTOSIZE|STYLEGETFOCUSONCLICK;
}

CHyperLink::~CHyperLink()
{
    m_Font.DeleteObject();
}

IMPLEMENT_DYNAMIC(CHyperLink, CStatic)

BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
    //{{AFX_MSm_MAP(CHyperLink)
    ON_WM_CTLCOLOR_REFLECT()
    ON_WM_SETCURSOR()
    ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	ON_WM_KEYDOWN()
	ON_WM_NCHITTEST()
	ON_WM_LBUTTONDOWN()	
	//}}AFX_MSm_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHyperLink message handlers

BOOL CHyperLink::PreTranslateMessage(MSG* pMsg) 
{
    m_ToolTip.RelayEvent(pMsg);
    return CStatic::PreTranslateMessage(pMsg);
}

void CHyperLink::PreSubclassWindow() 
{		    
	// 如果URL為空,以顯示文本為連接對象
    if (m_strURL.IsEmpty())
        GetWindowText(m_strURL);

    //檢查是否為空
    CString strWndText;
    GetWindowText(strWndText);
    if (strWndText.IsEmpty()) 
	{	
        //ASSERT(!m_strURL.IsEmpty());    
		CStatic::SetWindowText(m_strURL);
    }

    //得到字體
    CFont* pFont = GetFont();	
	
	if (pFont != NULL) 
	{
		LOGFONT lf;
		pFont->GetLogFont(&lf);
		lf.lfUnderline = BITSET(m_dwStyle, STYLEUNDERLINE);
		if (m_Font.CreateFontIndirect(&lf))
			CStatic::SetFont(&m_Font);    
		//調整窗口的大小,以適應字體的全部可見
		AdjustWindow();
	}
	else 
	{				
		//如果沒有得到字體,說明本控件不是一個Text類型的,
		//把其設置成自動伸縮
		CLEARBITS(m_dwStyle,STYLEAUTOSIZE);
	}
	
	if (!BITSET(m_dwStyle,STYLENOHANDCURSOR))
		SetDefaultCursor();     

    //提示
    CRect rect; 
    GetClientRect(rect);
    m_ToolTip.Create(this);	
    m_ToolTip.AddTool(this, m_strURL, rect, TOOLTIP_ID);

    CStatic::PreSubclassWindow();
}

//設置字體和顏色
HBRUSH CHyperLink::CtlColor(CDC* pDC, UINT nCtlColor) 
{		
	ASSERT(nCtlColor == CTLCOLOR_STATIC);

	if (m_bOverControl && BITSET(m_dwStyle,STYLEUSEHOVER))
	{
		pDC->SetTextColor(m_crHoverColor);
	}
	else if (!BITSET(m_dwStyle,STYLENOACTIVECOLOR) && m_bLinkActive)
	{
		pDC->SetTextColor(m_crActiveColor);
	}
	else if (m_bVisited)
	{
		pDC->SetTextColor(m_crVisitedColor);
	}
	else
	{
		pDC->SetTextColor(m_crLinkColor);
	}
	
	pDC->SetBkMode(TRANSPARENT);
	return (HBRUSH)GetStockObject(NULL_BRUSH);
}

void CHyperLink::OnMouseMove(UINT nFlags, CPoint point) 
{

	if (m_bOverControl)        // 當前在
	{
		CRect rect;
		GetClientRect(rect);

		if (!rect.PtInRect(point))
		{
			m_bOverControl = FALSE;
			ReleaseCapture();
			Invalidate();						
			return;
		}			
	}
	else                      // 光標已經離開
	{
		m_bOverControl = TRUE;
		Invalidate();		
		SetCapture();		
	}
}

//通常,如果沒有SS_NOTIFY,Static控件得不到到鼠標事件,
//本函數完成了與SS_NOTIFY
//的效果,但在調用OnCtlColor時打開SS_NOTIFY更可靠,因為在Bitamap風格的Static中沒有
//發送WM_CTLCOLOR的消息

UINT CHyperLink::OnNcHitTest(CPoint point) 
{
	return HTCLIENT;	
}

void CHyperLink::OnLButtonDown(UINT nFlags, CPoint point) 
{
	if (BITSET(m_dwStyle,STYLEGETFOCUSONCLICK))
	{
		SetFocus();				
	}
	if (BITSET(m_dwStyle,STYLEDOWNCLICK))
	{
		FollowLink();
	}
	m_bLinkActive = TRUE;
}

void CHyperLink::OnLButtonUp(UINT nFlags, CPoint point) 
{
	if (m_bLinkActive && !BITSET(m_dwStyle,STYLEDOWNCLICK))
		FollowLink();
}

BOOL CHyperLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{	
	if (m_hLinkCursor)
	{
		::SetCursor(m_hLinkCursor);
		return TRUE;
	}
	return FALSE;
}

void CHyperLink::OnSetFocus(CWnd* pOldWnd) 
{
	m_bLinkActive = TRUE;
	Invalidate();							// Repaint to set the focus
}

void CHyperLink::OnKillFocus(CWnd* pNewWnd) 
{	
	// Assume that control lost focus = mouse out
	// this avoid troubles with the Hover color
	m_bOverControl = FALSE;
	m_bLinkActive = FALSE;
	Invalidate();							// Repaint to unset the focus
}

void CHyperLink::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{	
	//空格
	if (nChar == VK_SPACE)
	{
		FollowLink();
	}
	else
	{
		CStatic::OnKeyDown(nChar, nRepCnt, nFlags);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CHyperLink operations

void CHyperLink::SetColors(	COLORREF crLinkColor,
							COLORREF crActiveColor,
							COLORREF crVisitedColor,
                            COLORREF crHoverColor /* = -1 */) 
{
	m_crLinkColor    = crLinkColor;
	m_crActiveColor	 = crActiveColor;
	m_crVisitedColor = crVisitedColor;	

	if (crHoverColor == -1)
		m_crHoverColor = ::GetSysColor(COLOR_HIGHLIGHT);
	else
		m_crHoverColor = crHoverColor;	
}


void CHyperLink::GetColors(COLORREF	&crLink,COLORREF &crActive,COLORREF	&crVisited,COLORREF	&crHover)
{	
	crLink=m_crLinkColor;
	crActive = m_crActiveColor;
	crVisited = m_crVisitedColor;
	crHover = m_crHoverColor;
}

void CHyperLink::SetLinkCursor(HCURSOR hCursor) {
	ASSERT(hCursor != NULL);

	m_hLinkCursor = hCursor;
	if (m_hLinkCursor == NULL)
		SetDefaultCursor();
}

HCURSOR CHyperLink::GetLinkCursor() {
	return m_hLinkCursor;
}

BOOL CHyperLink:: ModifyLinkStyle(DWORD dwRemove, DWORD dwAdd,
								  BOOL bApply /* =TRUE */)
{
	
	if ((dwRemove & dwAdd) != 0L)
		return FALSE;
	
	CLEARBITS(m_dwStyle, dwRemove);
	SETBITS(m_dwStyle, dwAdd);		
	if (bApply && ::IsWindow(GetSafeHwnd())) 	
	{
	
		if (BITSET(dwAdd,STYLEUNDERLINE) || BITSET(dwRemove,STYLEUNDERLINE))
			SwitchUnderline();		
		if (BITSET(dwAdd,STYLEAUTOSIZE))
			AdjustWindow();		
		if (BITSET(dwRemove,STYLEUSEHOVER))
			Invalidate();
	}
	return TRUE;
}

DWORD CHyperLink::GetLinkStyle() const {
	return m_dwStyle;
}

void CHyperLink::SetURL(CString strURL)
{
	m_strURL = strURL;

	if (::IsWindow(GetSafeHwnd())) 
	{
		ShowWindow(SW_HIDE);
		AdjustWindow();
		m_ToolTip.UpdateTipText(strURL, this, TOOLTIP_ID);
		ShowWindow(SW_SHOW);
	}
}

CString CHyperLink::GetURL() const 
{ 
	return m_strURL;   
}

void CHyperLink::SetWindowText(LPCTSTR lpszText)
{
	ASSERT(lpszText != NULL);

	if (::IsWindow(GetSafeHwnd())) 
	{		
		ShowWindow(SW_HIDE);					
		CStatic::SetWindowText(lpszText);		
		AdjustWindow();
		ShowWindow(SW_SHOW);			
	}
}

void CHyperLink::SetFont(CFont* pFont)
{
	ASSERT(::IsWindow(GetSafeHwnd()));
	ASSERT(pFont != NULL);	
	ShowWindow(SW_HIDE);				
	LOGFONT lf;	
	pFont->GetLogFont(&lf);
	m_Font.DeleteObject();
	m_Font.CreateFontIndirect(&lf);	
	CStatic::SetFont(&m_Font);	
	AdjustWindow();
	ShowWindow(SW_SHOW);				
}


void CHyperLink::SwitchUnderline()
{	
	LOGFONT lf;
	CFont* pFont = GetFont();
	if (pFont != NULL) 
	{
		pFont->GetLogFont(&lf);		
		lf.lfUnderline = BITSET(m_dwStyle,STYLEUNDERLINE);
		m_Font.DeleteObject();
		m_Font.CreateFontIndirect(&lf);
		SetFont(&m_Font);					
	}	
}

//調整窗口的大小,以適應文字的大小
void CHyperLink::AdjustWindow()
{	
	ASSERT(::IsWindow(GetSafeHwnd()));
    
	if (!BITSET(m_dwStyle,STYLEAUTOSIZE)) 
		return;

    
    CRect rcWnd;
    GetWindowRect(rcWnd);

	//父窗口先轉換
    CWnd* pParent = GetParent();
    if (pParent)
        pParent->ScreenToClient(rcWnd);
	

	CRect rcClient;
	GetClientRect(rcClient);

	// 計算邊框
	int borderWidth = rcWnd.Width() - rcClient.Width();
	int borderHeight = rcWnd.Height() - rcClient.Height();

    // 得到字體的尺寸
    CString strWndText;
    GetWindowText(strWndText);	
    CDC* pDC = GetDC();	
    CFont* pOldFont = pDC->SelectObject(&m_Font);
    CSize Extent = pDC->GetTextExtent(strWndText);
    pDC->SelectObject(pOldFont);
    ReleaseDC(pDC);

    
	//得到字體的對方式
    DWORD dwStyle = GetStyle();    
    if (BITSET(dwStyle, SS_CENTERIMAGE))
	{
		rcWnd.DeflateRect(0, (rcWnd.Height() - Extent.cy) / 2);
	}
    else
	{
		rcWnd.bottom = rcWnd.top + Extent.cy;
	}

    if (BITSET(dwStyle, SS_CENTER))
	{
		rcWnd.DeflateRect((rcWnd.Width() - Extent.cx) / 2, 0);
	}
    else if (BITSET(dwStyle,SS_RIGHT))
	{
		rcWnd.left  = rcWnd.right - Extent.cx;
	}
	else // SS_LEFT
	{
		rcWnd.right = rcWnd.left + Extent.cx;
	}
	
	MoveWindow(rcWnd.left, rcWnd.top, rcWnd.Width() + borderWidth,
		rcWnd.Height() + borderHeight);
}

void CHyperLink::SetVisited(BOOL bVisited /* = TRUE */) {
	m_bVisited = bVisited;
}

BOOL CHyperLink::IsVisited() const {
	return m_bVisited;
}

/////////////////////////////////////////////////////////////////////////////
// CHyperLink implementation

// 從WIn32hlp中得到默認的手形光標
void CHyperLink::SetDefaultCursor()
{
	//如果僅在Win2000中可以用
	//HCURSOR hHandCursor=::LoadCursor(NULL,IDC_HAND);
	//m_hLinkCursor = CopyCursor(hHandCursor);
	//return;
	//否則用
	if (m_hLinkCursor == NULL)		
	{
        
		CString strWndDir;
		GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH);
		strWndDir.ReleaseBuffer();

		strWndDir += _T("\\winhlp32.exe");
		
		HMODULE hModule = LoadLibrary(strWndDir);
		if (hModule) 
		{
			HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
			if (hHandCursor)				
				m_hLinkCursor = CopyCursor(hHandCursor);
		}
		FreeLibrary(hModule);
	}
}

HINSTANCE CHyperLink::GotoURL(LPCTSTR url, int showcmd)
{
    HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);
    return result;
}

// 激活連接控件
void CHyperLink::FollowLink() 
{	
	int result = (int) GotoURL(m_strURL, SW_SHOW);
    if (result <= HINSTANCE_ERROR)
	{
        MessageBeep(MB_ICONEXCLAMATION);	        
    } 
	else 
	{
		m_bVisited = TRUE;
		Invalidate();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产视频在线观看| 国产乱码精品一区二区三区五月婷 | av高清久久久| 国产精品99久久久久| 国产中文字幕精品| 国产一区激情在线| 国产成人综合在线| 高清成人免费视频| 91在线国产福利| 在线亚洲一区二区| 欧美日韩国产首页| 日韩免费电影一区| 久久综合久久综合久久| 久久久不卡网国产精品二区| 欧美国产精品v| 亚洲人123区| 午夜精品一区二区三区三上悠亚| 亚洲成人动漫一区| 国产一区二区电影| 成人app网站| 欧美色综合影院| 日韩欧美国产精品| 国产午夜精品福利| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲三级电影全部在线观看高清| 亚洲一区av在线| 韩国av一区二区| 97久久精品人人做人人爽| 欧美人xxxx| 国产亲近乱来精品视频| 一区二区免费看| 精品亚洲免费视频| 91免费看视频| 精品国产乱码久久久久久影片| 国产视频911| 亚洲一区二区三区国产| 久久99久久99| 欧美在线免费视屏| 国产午夜久久久久| 日本亚洲免费观看| 色偷偷久久人人79超碰人人澡 | 男女男精品视频| av在线播放成人| 欧美一区二区三区系列电影| 国产精品理伦片| 久久国产三级精品| 欧美日韩免费视频| 中文字幕色av一区二区三区| 美女视频黄 久久| 在线欧美一区二区| 国产日韩亚洲欧美综合| 免费精品视频最新在线| 在线观看亚洲精品| 一区在线观看视频| 国产一区二区免费看| 制服.丝袜.亚洲.中文.综合| 中文字幕在线不卡视频| 激情综合一区二区三区| 欧美日韩国产影片| 有坂深雪av一区二区精品| 成人三级伦理片| 精品成人a区在线观看| 首页国产欧美久久| 欧美影院午夜播放| 国产精品久久久久久久久果冻传媒| 另类小说色综合网站| 欧美高清性hdvideosex| 一区二区三区91| 91国产免费看| 亚洲一区二区偷拍精品| 日本韩国一区二区三区视频| 亚洲狠狠丁香婷婷综合久久久| 成人性视频网站| 中文字幕一区二区三区精华液| 高清beeg欧美| 国产精品欧美久久久久一区二区| 久久99国产精品麻豆| 久久综合色播五月| 国产精品99久久久久久久vr | 欧美中文字幕一区二区三区亚洲| 欧美激情在线看| 成人性视频免费网站| 国产精品乱码人人做人人爱| 成人av资源在线观看| 亚洲欧美在线观看| 91免费观看在线| 香蕉成人伊视频在线观看| 91精品蜜臀在线一区尤物| 看片的网站亚洲| 久久久青草青青国产亚洲免观| 国产一区二区精品久久| 亚洲欧洲99久久| 欧美最新大片在线看| 天天影视网天天综合色在线播放| 欧美一级免费大片| 国产精品影视在线| 亚洲欧美另类图片小说| 欧美日韩1234| 国产综合久久久久久久久久久久| 欧美经典一区二区| 欧美午夜精品久久久久久超碰 | 亚洲精品成人精品456| 欧美亚一区二区| 狠狠色狠狠色综合日日91app| 欧美国产丝袜视频| 欧美日韩一区三区四区| 久久99精品国产麻豆婷婷洗澡| 国产精品区一区二区三| 欧美日韩国产在线观看| 国产一区二区三区| 亚洲成人先锋电影| 26uuu国产一区二区三区| 在线观看亚洲一区| 国产精品中文欧美| 亚洲18女电影在线观看| 中文一区二区在线观看| 欧美日韩和欧美的一区二区| 国产剧情一区在线| 亚洲一二三四久久| 国产日韩欧美在线一区| 3atv在线一区二区三区| 不卡在线观看av| 美女高潮久久久| 亚洲国产美女搞黄色| 国产日韩精品一区二区三区| 91麻豆精品久久久久蜜臀| 91在线精品一区二区| 国产精品一区专区| 美女一区二区三区在线观看| 亚洲一区二区三区视频在线| 亚洲18色成人| 亚洲色图欧美激情| www国产精品av| 91精品国产一区二区| 在线观看亚洲a| 91丨九色丨黑人外教| 国产精品888| 狠狠色伊人亚洲综合成人| 日韩高清电影一区| 亚洲成人激情综合网| 亚洲精品欧美综合四区| 中文字幕亚洲区| 欧美激情中文字幕| 国产午夜精品美女毛片视频| 日韩三级视频中文字幕| 91精品欧美综合在线观看最新| 91老师片黄在线观看| 99re这里都是精品| 99re热视频这里只精品| 成人免费毛片嘿嘿连载视频| 国产福利一区在线观看| 日韩av中文字幕一区二区三区| 亚洲成人激情av| 午夜精品久久久久影视| 婷婷国产在线综合| 日日摸夜夜添夜夜添国产精品| 亚洲成人综合在线| 日韩福利电影在线观看| 日本午夜精品一区二区三区电影| 亚洲成人精品一区| 日本免费在线视频不卡一不卡二 | 国产成人在线观看免费网站| 国产一区二区三区综合| 国产成人在线视频网址| av在线这里只有精品| 91影院在线免费观看| 在线观看亚洲精品视频| 日韩一二三区视频| 精品国产乱码91久久久久久网站| 久久网站最新地址| 中文字幕色av一区二区三区| 亚洲二区在线观看| 麻豆91在线播放免费| 成人午夜电影小说| 欧美人妖巨大在线| 久久女同精品一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲成人一区在线| 国产在线国偷精品免费看| 99久久久无码国产精品| 3d动漫精品啪啪1区2区免费| 久久久久久97三级| 亚洲一区二区免费视频| 久久99国产精品尤物| 色综合久久久久久久| 日韩三级.com| 亚洲欧美中日韩| 久久爱www久久做| 91麻豆免费视频| 精品国产伦一区二区三区观看方式 | 欧美色综合天天久久综合精品| 777午夜精品视频在线播放| 国产日韩精品一区二区三区| 亚洲二区在线视频| 不卡的av电影| 欧美videos中文字幕| 亚洲一区在线观看免费观看电影高清| 国产资源在线一区| 欧美日韩一区高清| 亚洲欧洲无码一区二区三区|