コード例 #1
0
void SliderBoth::OnPaint() 
{
	if(b_Initialized==0)
	{
		PostMessage(WM_USER+100); //确定滑块初始位置状态
	}

	CPaintDC dc(this);

	CRect rc;
	GetClientRect(&rc);

	rc.bottom = rc.bottom-5;//LSC 增加 Slider控件底部减小
//	COLORREF clrBk=::GetSysColor(COLOR_BTNFACE);//LSC 原执行此句
	int iV=209;
//	COLORREF clrBk=RGB(iV,iV,iV);//LSC 原屏蔽此句
	COLORREF clrBk=RGB(17,74,126); //LSC  修改整个slider控件的背景色
	dc.FillRect(&rc,&CBrush(clrBk));//LSC原代码执行此句

	P_PaintHorz(&dc,rc); //LSC 绘制刻度线
	SetBlockColor();
}
コード例 #2
0
LRESULT SliderBoth::WindowProc(UINT m,WPARAM w,LPARAM l) 
{
	if((m==WM_USER)||(m==WM_USER+1)||(m==WM_USER+100))
	{
		CRect rcMe;
		GetClientRect(&rcMe);

		if(b_Horz)
		{
			const int iXL=MARGIN_ME;
			const int iXR=rcMe.right-MARGIN_ME;
			double dbOne=(iXR-iXL)*1.0/(pos.iMax-pos.iMin);

			if(m==WM_USER)
			{
				int iMove=(int)(((int)w)/dbOne);

				int iL,iR;
				GetPosition(iL,iR);
				if(l)	iL+=iMove;
				else	iR+=iMove;
				P_SetPosition(iL,iR,l,!l);
// 				CClientDC dc(this);
// 				
// 				int iV=209;
// 				//	COLORREF clrBk=RGB(iV,iV,iV);//LSC 原屏蔽此句
// 				COLORREF clrBk=RGB(0,0,255); //LSC  修改整个slider控件的背景色
// 				dc.FillRect(&rcMe,&CBrush(clrBk));//LSC原代码执行此句
			}
			else
			if(m==WM_USER+1)
			{
				int iL,iR;
				GetPosition(iL,iR);
				if((pos.iOldL!=iL)||(pos.iOldR!=iR))
				{
					pos.iOldL=iL;
					pos.iOldR=iR;
					//post event
					GetParent()->PostMessage(WM_COMMAND,i_ID);
					SetBlockColor();
#if 0
					CClientDC dc(this);
					CRect rc;
					GetClientRect(&rc);


					int iNumTic=(pos.iMax-pos.iMin)/pos.iTick;
					const int iL=MARGIN_SLIDE;
					const int iR=rc.right-MARGIN_SLIDE;
					const double dbStep=(iR-iL)*1.0/iNumTic;
					double db=iL;



					CBrush brush;             
					//brush.CreateSolidBrush(RGB(200,100,255));  
					brush.CreateSolidBrush(RGB(165,196,211));   
					CBrush * pOldBrush= dc.SelectObject (&brush);


					double lval = pos.iL*dbStep;
					double rval = pos.iR*dbStep;

					dc.Rectangle((int)lval+MARGIN_SLIDE*2,rc.top+1,(int)rval,rc.bottom-MARGIN_SLIDE*2); 
					dc.SelectObject (pOldBrush);
					brush.DeleteObject();
#endif


				}
			}
			if(m==WM_USER+100)
			{
				b_Initialized=1;
				//P_SetPosition(pos.iMin,pos.iMax,1,1);
				P_SetPosition(m_min,m_max,1,1);//注意,后两个参数是1,2,3...的1,不是l,j,k的l
				RedrawWindow();
			}
		}
		else
		{
			const int iXL=rcMe.bottom-MARGIN_ME;
			const int iXR=rcMe.top+MARGIN_ME;
			double dbOne=(iXL-iXR)*1.0/(pos.iMax-pos.iMin);

			if(m==WM_USER)
			{
				int iMove=(int)(((int)w)/dbOne);

				int iL,iR;
				GetPosition(iL,iR);
				if(l)	iL-=iMove;
				else	iR-=iMove;
				P_SetPosition(iL,iR,l,!l);
			}
			else
			if(m==WM_USER+1)
			{
				int iL,iR;
				GetPosition(iL,iR);
				if((pos.iOldL!=iL)||(pos.iOldR!=iR))
				{
					pos.iOldL=iL;
					pos.iOldR=iR;
					//post event;
					GetParent()->PostMessage(WM_COMMAND,i_ID);
//wm.DT(200,i_ID);
				}
			}
			else
			if(m==WM_USER+100)
			{
				b_Initialized=1;
				P_SetPosition(pos.iMin,pos.iMax,1,1);
				RedrawWindow();
			}
		}
	}

	return CWnd::WindowProc(m,w,l);
}
コード例 #3
0
void CSynBCGPEditCtrl::SelectLanguage( UINT nLanguage )
{
	RemoveXMLSettings();
	theApp.m_nSynLanguage = nLanguage;

	// 1)设置语言
	m_SynLanguage.SetCurLanguage(nLanguage);

	// 2)设置分隔符
	m_strWordDelimeters = m_SynLanguage.GetWordDelimeters();
	m_strSpecialDelimiters = m_SynLanguage.GetSpecialDelimiters();
	m_strIntelliSenseChars = m_SynLanguage.GetIntelliSenseChars();
	CString strEscapeSequence, strEscapeSequences;
	int nPos, nPosPrior = 0;

	strEscapeSequences = m_SynLanguage.GetEscapeSequences();
	nPos = strEscapeSequences.Find(_T(","), nPosPrior);
	while (nPos != -1)
	{
		strEscapeSequence = strEscapeSequences.Mid(nPosPrior, nPos - nPosPrior);
		AddEscapeSequence (strEscapeSequence);

		nPosPrior = nPos + 1;
		nPos = strEscapeSequences.Find(_T(","), nPosPrior);
	}
	
	// 3)设置关键字
	BOOL bCaseSensitive;
	CString strWords;
	CString strWord;
	nPosPrior = 0;

	m_SynLanguage.GetWords(strWords, bCaseSensitive);
	nPos = strWords.Find(_T(","), nPosPrior);
	while (nPos != -1)
	{
		strWord = strWords.Mid(nPosPrior, nPos - nPosPrior);
		SetWordColor(strWord, m_clrSyn, -1, bCaseSensitive);

		nPosPrior = nPos + 1;
		nPos = strWords.Find(_T(","), nPosPrior);
	}

	nPosPrior = 0;
	m_SynLanguage.GetTypeWords(strWords, bCaseSensitive);
	nPos = strWords.Find(_T(","), nPosPrior);
	while (nPos != -1)
	{
		strWord = strWords.Mid(nPosPrior, nPos - nPosPrior);
		SetWordColor(strWord, m_clrType, -1, bCaseSensitive);

		nPosPrior = nPos + 1;
		nPos = strWords.Find(_T(","), nPosPrior);
	}
	m_SynLanguage.GetIsNumberColor(m_bNumberColor);

	// 4)设置注释
	CString strBlockOpen, strBlockClose;

	m_SynLanguage.GetMultilineComment(strBlockOpen, strBlockClose, bCaseSensitive);
	if (_T("") != strBlockOpen.Trim())
	{
		SetBlockColor(strBlockOpen, strBlockClose, TRUE, m_clrComment, -1, bCaseSensitive);
	}

	CString strBlockOpens;
	m_SynLanguage.GetLineComment(strBlockOpens, bCaseSensitive);
	nPosPrior = 0;
	nPos = strBlockOpens.Find(_T(","), nPosPrior);
	while (nPos != -1)
	{
		strBlockOpen = strBlockOpens.Mid(nPosPrior, nPos - nPosPrior);
		SetBlockColor(strBlockOpen, _T(""), FALSE, m_clrComment, -1, bCaseSensitive);

		nPosPrior = nPos + 1;
		nPos = strBlockOpens.Find(_T(","), nPosPrior);
	}

	// 5)设置字符串
	m_SynLanguage.GetString(strBlockOpen, strBlockClose, bCaseSensitive);
	if (_T("") != strBlockOpen.Trim())
	{
		SetBlockColor(strBlockOpen, strBlockClose, FALSE, m_clrString, -1, bCaseSensitive);
	}
	m_SynLanguage.GetChar(strBlockOpen, strBlockClose, bCaseSensitive);
	if (_T("") != strBlockOpen.Trim())
	{
		SetBlockColor(strBlockOpen, strBlockClose, FALSE, m_clrChar, -1, bCaseSensitive);
	}

	// 6)设置折叠
	if (m_pOutlineParser != NULL)
	{
		m_OutlineNodes.DeleteAllBlocks ();
		m_pOutlineParser->RemoveAllBlockTypes ();		

		// 7)大纲设置
		m_pOutlineParser->m_strDelimiters = m_strWordDelimeters;
		m_pOutlineParser->m_bCaseSensitive = m_SynLanguage.GetOutlineCaseSensitive();
		m_pOutlineParser->m_bWholeWords = m_SynLanguage.GetOutlineWholeWords();

		// 8)转义字符
		m_SynLanguage.GetOutlineEscapeSequences(strEscapeSequences);
		nPosPrior = 0;
		nPos = strEscapeSequences.Find(_T(","), nPosPrior);
		while (nPos != -1)
		{
			strEscapeSequence = strEscapeSequences.Mid(nPosPrior, nPos - nPosPrior);
			m_pOutlineParser->AddEscapeSequence (strEscapeSequence);

			nPosPrior = nPos + 1;
			nPos = strEscapeSequences.Find(_T(","), nPosPrior);
		}

		// 9)折叠块
		CString strBlock, strBlocks;
		CString strReplace, strNested, strIgnore;
		CStringList lstKeywordsList;
		int nBlockPos, nBlockPosPrior = 0;
		m_SynLanguage.GetOutlineBlockType(strBlocks);
		nPosPrior = 0;
		nPos = strBlocks.Find(_T("|"), nPosPrior);
		while (nPos != -1)
		{
			strBlock = strBlocks.Mid(nPosPrior, nPos - nPosPrior);

			nBlockPosPrior = 0;
			nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
			if (nBlockPos != -1)
			{
				strBlockOpen = strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior);

				nBlockPosPrior = nBlockPos + 1;
				nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
				if (nBlockPos != -1)
				{
					strBlockClose = strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior);

					nBlockPosPrior = nBlockPos + 1;
					nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
					if (nBlockPos != -1)
					{
						strReplace =  strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior);

						nBlockPosPrior = nBlockPos + 1;
						nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
						if (nBlockPos != -1)
						{
							strNested =  strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior);

							nBlockPosPrior = nBlockPos + 1;
							nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
							if (nBlockPos != -1)
							{
								strIgnore =  strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior);

								nBlockPosPrior = nBlockPos + 1;
								nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
								lstKeywordsList.RemoveAll();
								while (nBlockPos != -1)
								{
									lstKeywordsList.AddTail(strBlock.Mid(nBlockPosPrior, nBlockPos - nBlockPosPrior));

									nBlockPosPrior = nBlockPos + 1;
									nBlockPos = strBlock.Find(_T(","), nBlockPosPrior);
								}
								m_pOutlineParser->AddBlockType(strBlockOpen, strBlockClose, strReplace, _ttoi(strNested), _ttoi(strIgnore), &lstKeywordsList);
							}
						}
					}
				}
			}

			nPosPrior = nPos + 1;
			nPos = strBlocks.Find(_T("|"), nPosPrior);
		}
		EnableAutoOutlining(!strBlocks.IsEmpty());  //禁止掉无大纲的语言,这样可以有“隐藏选定区域”功能
	}

	// 10)设置超链接
	m_lstURLPrefixes.RemoveAll ();
	m_arrHyperlinks.RemoveAll ();
	m_nCurrHyperlink = -1;
	m_nCurrHyperlinkHot = -1;	

	m_lstURLPrefixes.AddTail (_T("http://"));
	m_lstURLPrefixes.AddTail (_T("ftp://"));
	m_lstURLPrefixes.AddTail (_T("mailto:"));
	m_lstURLPrefixes.AddTail (_T("news://"));
	m_lstURLPrefixes.AddTail (_T("file://"));
	m_lstURLPrefixes.AddTail (_T("telnet://"));
	m_lstURLPrefixes.AddTail (_T("gopher://"));
	m_lstURLPrefixes.AddTail (_T("prospero://"));
	m_lstURLPrefixes.AddTail (_T("wais://"));
	m_lstURLPrefixes.AddTail (_T("nntp://"));

	m_bCheckColorTags = FALSE;
	UseXmlParser (FALSE);
	switch (nLanguage)
	{
	case SYN_ASP:
	case SYN_HTML:
	case SYN_XML:
		m_bCheckColorTags = TRUE;
		EnableAutoOutlining(TRUE);
		UseXmlParser(TRUE);
		break;
	case SYN_PASCAL:
		SetBlockColor(_T("(*"), _T("*)"), FALSE, m_clrComment, -1, FALSE);
		break;
	case SYN_AUTOIT:
		//SetBlockColor(_T("#comments-start"), _T("#comments-end"), FALSE, m_clrComment, -1, FALSE);
		break;
	case SYN_D:
		SetBlockColor(_T("/+"), _T("+/"), FALSE, m_clrComment, -1, FALSE);
		SetBlockColor(_T("`"), _T("`"), FALSE, m_clrChar, -1, FALSE);
		break;
	}
	RedrawWindow();
	UpdateAutoOutlining();
}