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

📄 addressbarex.cpp

📁 1.MyIE开源工程协议 MyIE开源工程遵循GNU通用公共许可证GPL(GNU General Public License)开发,任何人都可以永久免费安装使用,在你下载和使用MyIE源代码前,请
💻 CPP
字号:
// AddressBarEx.cpp : implementation file
//

#include "stdafx.h"
#include "MyIE.h"
#include "AddressBarEx.h"
#include "MainFrm.h"

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


//#pragma optimize( "s", on)

/////////////////////////////////////////////////////////////////////////////
// CAddressBarEx

CAddressBarEx::CAddressBarEx()
{
}

CAddressBarEx::~CAddressBarEx()
{
}


BEGIN_MESSAGE_MAP(CAddressBarEx, CToolBar)
	//{{AFX_MSG_MAP(CAddressBarEx)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddressBarEx message handlers

void CAddressBarEx::OnSize(UINT nType, int cx, int cy) 
{
	CToolBar::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	CRect rect2;
	GetItemRect(1, rect2);
	int w;
	if(pmf->m_bShowAddressBarButton)
		w= cx-rect2.Width()-2;
	else
		w = cx;
		
	if (::IsWindow(m_wndAddress))
	{
		SetButtonInfo(0, 0, TBBS_SEPARATOR, w);
		m_wndAddress.SetWindowPos(NULL,  0, 0, w, cy, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCOPYBITS);
		if(!m_wndAddress.IsWindowVisible())
			m_wndAddress.ShowWindow(SW_SHOW);
	}
}

CComboBoxEx* CAddressBarEx::GetAddressBox()
{
	return &m_wndAddress;
}

void CAddressBarEx::Init() 
{
	// TODO: Add your specialized creation code here
	if (!m_wndAddress.Create(CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_CHILD, CRect(0, 0, 200, 450), this, ID_TOOLBAR_ADDRESS))
	{
		TRACE0("Failed to create combobox\n");
		return ;      // fail to create
	}
	m_wndAddress.SetExtendedStyle(0, m_wndAddress.GetExtendedStyle()|CBES_EX_NOSIZELIMIT);
	InitImage();
	if (!ms_dropTarget.Register(this)) {
		TRACE("Fail in registing drop target\n");
	}
}

void CAddressBarEx::InitImage() 
{
	CImageList *oldimg;
	oldimg = m_wndAddress.GetImageList();
	if(oldimg!=NULL)
		oldimg->DeleteImageList();
	if (pmf->m_bComboShowIcon)
	{
		DWORD dwStyle = m_wndAddress.GetExtendedStyle();
		dwStyle &= ~(CBES_EX_NOEDITIMAGE|CBES_EX_NOEDITIMAGEINDENT) ;
		m_wndAddress.SetExtendedStyle(0,dwStyle);
		CImageList img;
		HBITMAP hbmp = pmf->GetBitmap("FavBar.bmp");
		img.Create(16, 16, ILC_COLORDDB|ILC_MASK, 2, 1);
		ImageList_AddMasked(img.GetSafeHandle(), hbmp, RGB(255,0,255));
		DeleteObject(hbmp);
		m_wndAddress.SetImageList(&img);
		img.Detach();
	}
	else
	{
		DWORD dwStyle = m_wndAddress.GetExtendedStyle();
		dwStyle |= (CBES_EX_NOEDITIMAGE|CBES_EX_NOEDITIMAGEINDENT) ;
		m_wndAddress.SetExtendedStyle(0,dwStyle);
	}
}

/*************************************************************
CAddDropTarget
**************************************************************/

DROPEFFECT CAddDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point)
{
	return DROPEFFECT_SCROLL | DROPEFFECT_COPY | DROPEFFECT_LINK;
}

DROPEFFECT CAddDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, 
                                      DWORD dwKeyState, CPoint point)
{
	DROPEFFECT dwEffect;
	dwEffect=DROPEFFECT_COPY;
    return dwEffect;
}

void CAddDropTarget::OnDragLeave(CWnd* pWnd)
{
}

DROPEFFECT CAddDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, 
                                     DWORD dwKeyState, CPoint point)
{
	DROPEFFECT dwEffect;
	dwEffect=DROPEFFECT_COPY;
	return dwEffect;
}

BOOL CAddDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
                           DROPEFFECT dropEffect, CPoint point)
{
	try{
    HGLOBAL hData=pDataObject->GetGlobalData(CF_TEXT);
	LPCSTR lpcszData;
	CString strUrl;
    if (hData)
	{
		lpcszData=(LPCSTR)GlobalLock(hData);
		strUrl = lpcszData;
		//for link only search the text
		if (dropEffect==DROPEFFECT_LINK && *pWnd == pmf->m_SearchBar)
		{
			HGLOBAL hLinkData=pDataObject->GetGlobalData(RegisterClipboardFormat("FileGroupDescriptor"));
			if(hLinkData)
			{
				strUrl = ((LPCSTR)GlobalLock(hLinkData)) + 76;
				strUrl = strUrl.Left(strUrl.GetLength()-4);//cut .url of abc.url
				GlobalUnlock(hLinkData);
			}
		}
    }
	else
	{
		hData=pDataObject->GetGlobalData(CF_HDROP);
		if (!hData) {
			TRACE("Fail in getting data\n");
			return FALSE;
		}
		HDROP hdrop =(HDROP)GlobalLock(hData);
		DragQueryFile(hdrop, 0, g_szFile, 1024);
		strUrl = g_szFile;
	}
    GlobalUnlock(hData);

	short ks=GetKeyState(VK_CONTROL), ss=GetKeyState(VK_SHIFT);
	if (*pWnd == pmf->m_AddressBar)
	{
		//if the protocol is javascript then ignore
		if ( IS_SCRIPT_MAILTO(strUrl) )
			return FALSE;

		//check alias
		CString strRet;
		if(pmf->m_bUseAlias && pmf->m_mapAlias.Lookup(strUrl, strRet))
			strUrl = strRet;

		//only ctrl:	search string
		//only shift:	set search string
		//ctrl+shift: highlight
		//no ctrl,shift: open string
		if (ks<0 && ss>=0)
		{
			pmf->m_wndSearch->GetEditCtrl()->SetWindowText(strUrl);
			pmf->m_nSearchBarAction = 1;
			SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, ID_SEARCH_OK, 0);
		}
		else if (ks>=0 && ss<0)
			pmf->m_wndSearch->GetEditCtrl()->SetWindowText(strUrl);
		else if (ks<0 && ss<0)
		{
			pmf->m_wndSearch->GetEditCtrl()->SetWindowText(strUrl);
			pmf->m_nSearchBarAction = 4;
			SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, ID_SEARCH_OK, 0);
		}
		else
			pmf->NewChildWindow(1,2,strUrl);
	}
	else
	{
		//only ctrl:  find next
		//only shift:	set search string
		//ctrl+shift: highlight
		//no ctrl,shift: search
		pmf->m_wndSearch->GetEditCtrl()->SetWindowText(strUrl);
		if (ks<0 && ss>=0)
		{
			pmf->m_nSearchBarAction = 2;
			SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, ID_SEARCH_OK, 0);
		}
		else if (ks>=0 && ss<0)
			;
		else if (ks<0 && ss<0)
		{
			pmf->m_nSearchBarAction = 4;
			SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, ID_SEARCH_OK, 0);
		}
		else
		{
			int nButton = pmf->m_SearchBar.GetToolBarCtrl().HitTest(&point);
			int nIconCount = pmf->m_SearchList.m_nIconCount;
			//
			if (nIconCount && nButton>2 && nButton<nIconCount+3)
				SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, B_SEARCH+pmf->m_SearchList.GetIconIndex(nButton-3), 0);
			else
			{
				int nBegin = nIconCount ? nIconCount+4 : 3;//high light pos
				if (nButton==nBegin)
					pmf->m_nSearchBarAction = 4;
				else if (nButton==nBegin+1)
					pmf->m_nSearchBarAction = 2;
				else
					pmf->m_nSearchBarAction = 1;
				SendMessage(pmf->GetSafeHwnd(), WM_COMMAND, ID_SEARCH_OK, 0);
			}
		}
	}

	}catch(...){}

    return TRUE;
}

//#pragma optimize( "s", off)

void CAddressBarEx::GetSelText(int index, CString & str)
{
	if(index<0)
		return;

	try{
	static TCHAR	sz[MAX_PATH];
	COMBOBOXEXITEM	item;
	item.mask = CBEIF_TEXT;
	item.pszText = (LPTSTR)sz;
	item.cchTextMax = MAX_PATH;

	item.iItem = index;
	m_wndAddress.GetItem(&item);
	str = sz;
	}catch(...){}
}

int CAddressBarEx::FindStringExact(int start, CString & str)
{
	static TCHAR           sz[MAX_PATH];

	try{
	COMBOBOXEXITEM item;

	item.mask = CBEIF_TEXT;
	item.pszText = (LPTSTR)sz;
	item.cchTextMax = MAX_PATH;

	int nc = m_wndAddress.SendMessage(CB_GETCOUNT, 0, 0);
	for(register int i=start+1;i<nc;i++)
	{
		item.iItem = i;
		m_wndAddress.GetItem(&item);
		if(str.CompareNoCase(sz)==0)
			return i;
	}
	}catch(...){}

	return CB_ERR;
}

⌨️ 快捷键说明

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