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(); }
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); }
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(); }