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

📄 mghtmlview.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			case CURSOR_E_RESIZE:			case CURSOR_W_RESIZE:				c = GetSystemCursor (IDC_SIZEWE);				break;			case CURSOR_N_RESIZE:			case CURSOR_S_RESIZE:				c = GetSystemCursor (IDC_SIZENS);				break;			case CURSOR_NE_RESIZE:			case CURSOR_SW_RESIZE:				c = GetSystemCursor (IDC_SIZENESW);				break;			case CURSOR_NW_RESIZE:			case CURSOR_SE_RESIZE:				c = GetSystemCursor (IDC_SIZENWSE);				break;			case CURSOR_TEXT:				c = GetSystemCursor (IDC_IBEAM);				break;			case CURSOR_WAIT:				c = GetSystemCursor (IDC_WAIT);				break;			case CURSOR_HELP:			case CURSOR_DEFAULT:				break;		}	}	SetCursor(c);	m_part->khtmlMouseMoveEvent(xm, ym, innerNode, url);		// !!!!! modify it to give paramater.}void MGHTMLView::OnMouseReleaseEvent(int x, int y, DWORD flags){	if(!m_part->docImpl()) 		return;	int xm, ym;	xm = x + m_xOffset;	ym = y + m_yOffset;	DOMString url;	NodeImpl *innerNode=0;	long offset=0;	m_part->docImpl()->mouseEvent( xm, ym, flags, DOM::NodeImpl::MousePress, 0, 0, url, innerNode, offset);	m_part->khtmlMouseReleaseEvent(xm, ym, innerNode, url);	// !!!!!! modify it to give paramater.}void MGHTMLView::OnKeyPressEvent(int key, DWORD flags){#ifdef JAVASCRIPT_ENABLE	{#if DEBUG_BY_XHTANG	fprintf(stderr,"MGHTMLView::OnKeyPressEvent-1\n");#endif	if((m_JsEventTypeToCapture & mgjsDOMEvent::KEYPRESS))	{		m_JsEventType = mgjsDOMEvent::KEYPRESS;		m_JsKeyEventValue=key;		EventEvaluateJavaScript(&m_JSContext,&m_JSObject,this);	}#if DEBUG_BY_XHTANG	fprintf(stderr,"MGHTMLView::OnKeyPressEvent-2\n");#endif				}#endif	switch (key)	{		case SCANCODE_CURSORBLOCKDOWN:		//case SCANCODE_J:			scrollBy( 0, 10 );			break;		case SCANCODE_CURSORBLOCKUP:		//case SCANCODE_K:			scrollBy( 0, -10 );			break;		case SCANCODE_CURSORBLOCKRIGHT:		//case SCANCODE_L:			scrollBy( 10, 0 );			break;		case SCANCODE_CURSORBLOCKLEFT:		//case SCANCODE_H:			scrollBy( -10, 0 );			break;		case SCANCODE_PAGEDOWN:			scrollBy (0, (height () > 10)?(height () - 10):height());			break;		case SCANCODE_PAGEUP:			scrollBy (0, (height () > 10)?(10 - height ()):height());			break;		case SCANCODE_ENTER:		case SCANCODE_SPACE:			break;		case SCANCODE_HOME:			setContentsPos( 0, 0 );			break;		case SCANCODE_END:			setContentsPos( 0, m_clntSize.height() - height() );			break;		default:			break;	}}void MGHTMLView::OnKeyReleaseEvent(int key, DWORD flags){	switch(key)	{		case SCANCODE_ENTER:		case SCANCODE_SPACE:        	toggleActLink(true);			return;			break;	}}bool MGHTMLView::focusNextPrevChild( bool next ){// i do not know what it does. ????? !!!!!!//    if (!gotoLink(next))//      {//	  bool retval = QScrollView::focusNextPrevChild( next );//	  viewport()->clearFocus();//	  return retval;//    }//    else	return true;}void MGHTMLView::doAutoScroll(){	//  i do not know what it does. ????? !!!!!//    QPoint pos = QCursor::pos();//    pos = viewport()->mapFromGlobal( pos );  //  int xm, ym;//    viewportToContents(pos.x(), pos.y(), xm, ym);//    pos = QPoint(pos.x() - viewport()->x(), pos.y() - viewport()->y());//    if ( (pos.y() < 0) || (pos.y() > visibleHeight()) ||//         (pos.x() < 0) || (pos.x() > visibleWidth()) )//    {//        ensureVisible( xm, ym, 0, 5 );//    }}DOM::NodeImpl *MGHTMLView::nodeUnderMouse() const{	return d->underMouse;}bool MGHTMLView::gotoLink(){	return gotoLink(d->currentNode);}bool MGHTMLView::gotoLink(HTMLElementImpl *n){	if(d->currentNode)		d->currentNode->blur();	if(!n)	{		d->currentNode = 0;		return false;	}	if (!n->isSelectable())	{		d->currentNode = 0;		return false;	}		n->focus();	if (d->linkPressed)		n->setKeyboardFocus(DOM::ActivationActive);	int x = 0, y = 0;	n->getAnchorPosition(x,y);	int xe = 0, ye = 0;	n->getAnchorBounds(xe,ye);	int deltax;	int deltay;	int borderX, borderY;	borderX = borderY = 30;        // is ypos of target above upper border?	if (y < contentsY() + borderY)	{		deltay = y - contentsY() - borderY;	}    // is ypos of target below lower border:	else if (ye + borderY > contentsY() + height())	{		deltay = ye + borderY - ( contentsY() + height() );	}	else	deltay = 0;    // is xpos of target left of the view's border?	if (x - borderX - contentsX() < 0)	{		deltax = x - contentsX() - borderX;	}    // is xpos of target right of the view's right border?	else if (xe + borderX > contentsX() + width())	{		deltax = xe + borderX - ( contentsX() + width() );	}	else	deltax = 0;    if (!d->currentNode)    {		scrollBy(deltax, deltay);		d->currentNode = n;		return true;	}	int maxx = width()-borderX;	int maxy = height()-borderY;	int scrollX,scrollY;	scrollX = deltax > 0 ? (deltax > maxx ? maxx : deltax) : deltax == 0 ? 0 : (deltax>-maxx ? deltax : -maxx);	scrollY = deltay > 0 ? (deltay > maxy ? maxy : deltay) : deltay == 0 ? 0 : (deltay>-maxy ? deltay : -maxy);	scrollBy(scrollX, scrollY);    // generate abs(scroll.)	if (scrollX<0)		scrollX=-scrollX;	if (scrollY<0)		scrollY=-scrollY;    // only set cursor to new node if scrolling could make    // the link completely visible	if ( (scrollX!=maxx) && (scrollY!=maxy) )	{		d->currentNode = n;	}	return true;}bool MGHTMLView::gotoLink(bool forward){	if (!m_part->docImpl())		return false;	int currentTabIndex = (d->currentNode?d->currentNode->tabIndex():-1);	HTMLElementImpl *n=0;    // search next link in current scope    // (scope means either the links without tabindex or with tabindex)	n = m_part->docImpl()->findLink(d->currentNode, forward, currentTabIndex);	if (currentTabIndex!=-1 && (!n || n->tabIndex()!=currentTabIndex))	{		HTMLElementImpl *m = m_part->docImpl()->findLink(0, forward, currentTabIndex);		if (m && m!=d->currentNode && m->tabIndex()==currentTabIndex)			n = m;	}	if (!n)	{		int maxTabIndex = 0;		if (forward && maxTabIndex!=-1)			maxTabIndex = 0;		else			maxTabIndex = m_part->docImpl()->findHighestTabIndex();		if (maxTabIndex!=-1)			n = m_part->docImpl()->findLink(0, forward, maxTabIndex);		else			n = 0;	}	return gotoLink(n);}bool MGHTMLView::gotoNextLink(){ 	return gotoLink(true); }bool MGHTMLView::gotoPrevLink(){ 	return gotoLink(false); }void MGHTMLView::toggleActLink(bool actState){	if ( d->currentNode )	{	//retrieve url		HTMLElementImpl *e = static_cast<HTMLElementImpl *>(d->currentNode);		if (!actState) // inactive->active		{			int x,y;			d->currentNode->setKeyboardFocus(DOM::ActivationActive);			d->originalNode=d->currentNode;			d->linkPressed=true;			e->getAnchorPosition(x,y);//            ensureVisible(x,y);				// make (x,y) visible		}		else //active->inactive		{			e->setKeyboardFocus(DOM::ActivationOff);			d->linkPressed=false;			if (d->currentNode==d->originalNode)			{				if (e->id()==ID_A)				{					HTMLAnchorElementImpl *a = static_cast<HTMLAnchorElementImpl *>(d->currentNode);					d->currentNode=0;					m_part->urlSelected( a->areaHref().string(), 1, 0, a->targetRef().string());	// !!!!! modify m_part				}			}			d->originalNode=0;		}	}}void MGHTMLView::useSlowRepaints(){	d->useSlowRepaints = true;//    setStaticBackground(true);}void MGHTMLView::setVScrollBarMode (LONG mode ){//    d->vmode = mode;											!!!!!//    QScrollView::setVScrollBarMode(mode);}void MGHTMLView::setHScrollBarMode (LONG mode ){//    d->hmode = mode;											!!!!!//    QScrollView::setHScrollBarMode(mode);}void MGHTMLView::restoreScrollBar ( ){	SetScrollPos (getHwnd(), SB_HORZ, m_xOffset);	SetScrollPos (getHwnd(), SB_VERT, m_yOffset);				//    int ow = visibleWidth();//    QScrollView::setVScrollBarMode(d->vmode);//    if (visibleWidth() != ow)//    {//        layout();//        updateContents(contentsX(),contentsY(),visibleWidth(),visibleHeight());//    }}void MGHTMLView::setLinkCursor(DOM::HTMLElementImpl *n){	//if (lstViews)	//{	//	lstViews->first();	//	while(lstViews->next())	//	{	//		MGHTMLView * actView = lstViews->current();	//		if (!actView || !this)	//			return;	//		if (actView != this)	//		{	//			if (actView->d->currentNode && actView->d->currentNode!=n)	//				actView->d->currentNode->blur();	//			actView->d->currentNode = 0;	//		}	//	}	//}	if (d->currentNode != n)	{		if (d->currentNode)			d->currentNode->blur();		d->currentNode = n;		if (n)		{			n->setKeyboardFocus(DOM::ActivationPassive);			n->focus();		}	}	d->linkPressed=false;}void MGHTMLView::scrollBy (int deltax, int deltay){	if (m_yOffset + deltay < 0)		deltay = - m_yOffset;	else if (m_yOffset + deltay + visibleHeight() >= m_clntSize.height() )		deltay = m_clntSize.height() - visibleHeight() - m_yOffset;	if (m_xOffset + deltax < 0)		deltax = - m_xOffset;	else if (m_xOffset + deltax + visibleWidth() >= m_clntSize.width () )		deltax = m_clntSize.width() - visibleWidth() - m_xOffset;    ScrollWindow (getHwnd(), -deltax, -deltay, NULL, NULL);	m_part->m_isMoved = true;    m_xOffset += deltax;	m_yOffset += deltay;	SetScrollPos( m_hWnd, SB_HORZ, m_xOffset );	SetScrollPos( m_hWnd, SB_VERT, m_yOffset );	//ResetScrollBar ();}void MGHTMLView::setContentsPos( int x, int y){	if (y < 0) 		y = 0;	if (y > m_clntSize.height() - visibleHeight ())		y = m_clntSize.height() - visibleHeight ();	if (x < 0)		x = 0;	if (x > m_clntSize.width() - visibleWidth ())		x = m_clntSize.width() - visibleWidth ();	m_xOffset = x;	m_yOffset = y;	m_part->m_isMoved = true;	InvalidateRect (getHwnd (), NULL, TRUE);	//ResetScrollBar ();}int MGHTMLView::HTMLViewProc( HWND hWnd, int message, WPARAM wParam, LPARAM lParam ){	MGHTMLView *view = ( MGHTMLView* ) GetWindowAdditionalData( hWnd );	JobElement * temp;	//DOM::HTMLDocumentImpl *document;	HDC hdc;	int w = 0;	int h = 0;	switch( message )   	{		case MSG_CREATE:			break;		case MSG_PAINT:			if( view->getHwnd() != (HWND)HWND_INVALID )			{				view->ShowChildWidget( false );				hdc = BeginPaint( hWnd );				view->drawContents(hdc, -view->contentsX(), -view->contentsY(), view->visibleWidth(), view->visibleHeight());				EndPaint( hWnd, hdc );				view->ShowChildWidget( true );			}			break;		case MSG_VSCROLL:			switch (wParam) 

⌨️ 快捷键说明

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