BOOL CPMenuSpecial::SetFont (CFont &pFont) { TEXTMETRIC tm; CFont *pOldFont; CDC TVDC; LOGFONT LogFont; m_Font.DeleteObject (); if (pFont.GetObject (sizeof (LogFont), &LogFont) != 0) { if (m_Font.CreateFontIndirect (&LogFont) != 0) { if (m_Font.GetObject (sizeof (LogFont), &LogFont) != 0) { if (TVDC.CreateDC ("DISPLAY", NULL, NULL, NULL) != 0) { if ((pOldFont = TVDC.SelectObject (&m_Font)) != NULL) { TVDC.GetTextMetrics (&tm); m_nDefaultTextHeight = tm.tmHeight; TVDC.SelectObject (pOldFont); return TRUE; } } } m_Font.DeleteObject (); } } return FALSE; }
void CPadView::OnChooseFont() { // get current font description CFont* pFont = GetFont(); LOGFONT lf; if (pFont != NULL) pFont->GetObject(sizeof(LOGFONT), &lf); else ::GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf); CFontDialog dlg(&lf, CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT); if (dlg.DoModal() == IDOK) { // switch to new font. m_font.DeleteObject(); if (m_font.CreateFontIndirect(&lf)) { CWaitCursor wait; SetFont(&m_font); m_lfDefFont = lf; if (GetPrinterFont() == NULL) { // notify container that content has changed GetDocument()->UpdateAllItems(NULL); } } } }
void CHyperlinkStatic::CreateFont() { CFont* pFontParent = GetParent()->GetFont(); if ( pFontParent ) { LOGFONT lf; pFontParent->GetObject(sizeof(lf), &lf); lf.lfUnderline = TRUE; _fontCaption.CreateFontIndirect(&lf); _bCreateFont = true; } }
void CMyLabel::PreSubclassWindow() { CStatic::PreSubclassWindow(); CFont* cf = GetFont(); if(cf !=NULL) { cf->GetObject(sizeof(m_logFont),&m_logFont); } else { GetObject(GetStockObject(SYSTEM_FONT),sizeof(m_logFont), &m_logFont); } m_font.DeleteObject(); m_font.CreateFontIndirect(&m_logFont); }
////////////////////////////////////////////////////////////////////////// // // Function: CLabel::PreSubclassWindow // // Description: Assigns default dialog font // // INPUTS: // // RETURNS: // // NOTES: // // MODIFICATIONS: // // Name Date Version Comments // NT ALMOND 15092000 1.5 Origin // NT ALMOND 02072002 1.6 Fix crash when GetFont returns NULL ////////////////////////////////////////////////////////////////////////// void CLabel::PreSubclassWindow() { CStatic::PreSubclassWindow(); CFont* cf = GetFont(); if(cf !=NULL) { cf->GetObject(sizeof(m_lf),&m_lf); } else { GetObject(GetStockObject(SYSTEM_FONT),sizeof(m_lf),&m_lf); } ReconstructFont(); }
void CHyperLink::PreSubclassWindow() { // Enable notifications - CStatic has this disabled by default ModifyStyle(0, SS_NOTIFY); // By default use the label text as the URL if (m_strURL.IsEmpty()) GetWindowText(m_strURL); CString strWndText; GetWindowText(strWndText); if (strWndText.IsEmpty()) { SetWindowText(m_strURL); } LOGFONT lf; CFont* pFont = GetFont(); if (pFont) pFont->GetObject(sizeof(lf), &lf); else { NONCLIENTMETRICS metrics = { 0 }; metrics.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &metrics, FALSE); memcpy_s(&lf, sizeof(LOGFONT), &metrics.lfMessageFont, sizeof(LOGFONT)); } m_StdFont.CreateFontIndirect(&lf); lf.lfUnderline = TRUE; m_UnderlineFont.CreateFontIndirect(&lf); SetDefaultCursor(); // try loading a "hand" cursor SetUnderline(); CRect rect; GetClientRect(rect); m_ToolTip.Create(this); m_ToolTip.AddTool(this, m_strURL, rect, TOOLTIP_ID); CStatic::PreSubclassWindow(); }
void CPPgDisplay::OnBnClickedSelectHypertextFont() { if (GetAsyncKeyState(VK_CONTROL) < 0) m_eSelectFont = sfLog; else m_eSelectFont = sfServer; // get current font description CFont* pFont; if (m_eSelectFont == sfLog) pFont = &theApp.m_fontLog; else pFont = &theApp.m_fontHyperText; LOGFONT lf; if (pFont != NULL) pFont->GetObject(sizeof(LOGFONT), &lf); else AfxGetMainWnd()->GetFont()->GetLogFont(&lf); // Initialize 'CFontDialog' CFontDialog dlg(&lf, CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT); dlg.m_cf.Flags |= CF_APPLY | CF_ENABLEHOOK; // Set 'lpfnHook' to our own Hook function. But save MFC's hook! _pfnChooseFontHook = dlg.m_cf.lpfnHook; dlg.m_cf.lpfnHook = ChooseFontHook; _pThis = this; if (dlg.DoModal() == IDOK) { if (m_eSelectFont == sfLog) theApp.emuledlg->ApplyLogFont(&lf); else theApp.emuledlg->ApplyHyperTextFont(&lf); } _pfnChooseFontHook = NULL; _pThis = NULL; }
void CTCGroupBox::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class CButton::PreSubclassWindow(); //modified the style to avoid text overlap when press tab ModifyStyle(0, BS_ICON); // Get Defalut Font CFont* cf = GetFont(); if(cf !=NULL) { cf->GetObject(sizeof(m_lf),&m_lf); } else { GetObject(GetStockObject(SYSTEM_FONT),sizeof(m_lf),&m_lf); } ReconstructFont(); }
/////////////////////////////////////////////////////////////////////////////// // PreSubclassWindow void CXHTMLStatic::PreSubclassWindow() { // We want to get mouse clicks via STN_CLICKED DWORD dwStyle = GetStyle(); ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY); CStatic::PreSubclassWindow(); CFont* cf = GetFont(); LOGFONT lf; if (cf != NULL) { cf->GetObject(sizeof(lf), &lf); } else { GetObject(GetStockObject(SYSTEM_FONT), sizeof(lf), &lf); } m_font.DeleteObject(); VERIFY(m_font.CreateFontIndirect(&lf)); }
void CEditView::OnBeginPrinting(CDC* pDC, CPrintInfo*) { ASSERT_VALID(this); ASSERT_VALID(pDC); // initialize page start vector ASSERT(m_aPageStart.GetSize() == 0); m_aPageStart.Add(0); ASSERT(m_aPageStart.GetSize() > 0); if (m_hPrinterFont == NULL) { // get current screen font object metrics CFont* pFont = GetFont(); LOGFONT lf; LOGFONT lfSys; if (pFont == NULL) return; VERIFY(pFont->GetObject(sizeof(LOGFONT), &lf)); VERIFY(::GetObject(::GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lfSys)); if (lstrcmpi((LPCTSTR)lf.lfFaceName, (LPCTSTR)lfSys.lfFaceName) == 0) return; // map to printer font metrics HDC hDCFrom = ::GetDC(NULL); lf.lfHeight = ::MulDiv(lf.lfHeight, pDC->GetDeviceCaps(LOGPIXELSY), ::GetDeviceCaps(hDCFrom, LOGPIXELSY)); lf.lfWidth = ::MulDiv(lf.lfWidth, pDC->GetDeviceCaps(LOGPIXELSX), ::GetDeviceCaps(hDCFrom, LOGPIXELSX)); ::ReleaseDC(NULL, hDCFrom); // create it, if it fails we just use the printer's default. m_hMirrorFont = ::CreateFontIndirect(&lf); m_hPrinterFont = m_hMirrorFont; } ASSERT_VALID(this); }
BOOL CServerWnd::OnInitDialog() { if (theApp.m_fontLog.m_hObject == NULL) { CFont* pFont = GetDlgItem(IDC_MYINFO)->GetFont(); LOGFONT lf; pFont->GetObject(sizeof lf, &lf); theApp.m_fontLog.CreateFontIndirect(&lf); } ReplaceRichEditCtrl(GetDlgItem(IDC_MYINFOLIST), this, GetDlgItem(IDC_MYINFO)->GetFont()); CResizableDialog::OnInitDialog(); // using ES_NOHIDESEL is actually not needed, but it helps to get around a tricky window update problem! // If that style is not specified there are troubles with right clicking into the control for the very first time!? #define LOG_PANE_RICHEDIT_STYLES WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_READONLY | ES_NOHIDESEL CRect rect; GetDlgItem(IDC_SERVMSG)->GetWindowRect(rect); GetDlgItem(IDC_SERVMSG)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (servermsgbox->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_SERVMSG)){ servermsgbox->SetProfileSkinKey(_T("ServerInfoLog")); servermsgbox->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); servermsgbox->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); servermsgbox->SetEventMask(servermsgbox->GetEventMask() | ENM_LINK); servermsgbox->SetFont(&theApp.m_fontHyperText); servermsgbox->ApplySkin(); servermsgbox->SetTitle(GetResString(IDS_SV_SERVERINFO)); /* ismod: mod version servermsgbox->AppendText(_T("eMule v") + theApp.m_strCurVersionLong + _T("\n")); */ servermsgbox->AppendText(_T("eMule v") + theApp.m_strCurVersionLong + _T(" ") + theApp.m_strCurVersionLongMod + _T("\n")); // MOD Note: Do not remove this part - Merkur /* ismod: no new version check m_strClickNewVersion = GetResString(IDS_EMULEW) + _T(" ") + GetResString(IDS_EMULEW3) + _T(" ") + GetResString(IDS_EMULEW2); servermsgbox->AppendHyperLink(_T(""), _T(""), m_strClickNewVersion, _T("")); */ // MOD Note: end servermsgbox->AppendText(_T("\n\n")); // ismod: ed2k club link m_strED2kClub = _T("Посетить Клуб \"Ословеды\""); servermsgbox->AppendHyperLink(_T(""), _T(""), m_strED2kClub, _T("")); servermsgbox->AppendText(_T("\n\n")); } GetDlgItem(IDC_LOGBOX)->GetWindowRect(rect); GetDlgItem(IDC_LOGBOX)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (logbox->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_LOGBOX)){ logbox->SetProfileSkinKey(_T("Log")); logbox->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); logbox->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); if (theApp.m_fontLog.m_hObject) logbox->SetFont(&theApp.m_fontLog); logbox->ApplySkin(); logbox->SetTitle(GetResString(IDS_SV_LOG)); logbox->SetAutoURLDetect(FALSE); } GetDlgItem(IDC_DEBUG_LOG)->GetWindowRect(rect); GetDlgItem(IDC_DEBUG_LOG)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (debuglog->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_DEBUG_LOG)){ debuglog->SetProfileSkinKey(_T("VerboseLog")); debuglog->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); debuglog->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); if (theApp.m_fontLog.m_hObject) debuglog->SetFont(&theApp.m_fontLog); debuglog->ApplySkin(); debuglog->SetTitle(SZ_DEBUG_LOG_TITLE); debuglog->SetAutoURLDetect(FALSE); } SetAllIcons(); Localize(); serverlistctrl.Init(); TCITEM newitem; CString name; name = GetResString(IDS_SV_SERVERINFO); name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 1; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneServerInfo ); name = GetResString(IDS_SV_LOG); name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneLog ); name = SZ_DEBUG_LOG_TITLE; name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneVerboseLog ); AddAnchor(IDC_SERVLST_ICO, TOP_LEFT); AddAnchor(IDC_SERVLIST_TEXT, TOP_LEFT); AddAnchor(serverlistctrl, TOP_LEFT, MIDDLE_RIGHT); AddAnchor(m_ctrlMyInfoFrm, TOP_RIGHT, BOTTOM_RIGHT); AddAnchor(m_MyInfo, TOP_RIGHT, BOTTOM_RIGHT); AddAnchor(StatusSelector, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_LOGRESET, MIDDLE_RIGHT); // avoid resizing GUI glitches with the tab control by adding this control as the last one (Z-order) // The resizing of those log controls (rich edit controls) works 'better' when added as last anchors (?) AddAnchor(*servermsgbox, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(*logbox, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(*debuglog, MIDDLE_LEFT, BOTTOM_RIGHT); // Set the tab control to the bottom of the z-order. This solves a lot of strange repainting problems with // the rich edit controls (the log panes). ::SetWindowPos(StatusSelector, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOSIZE); debug = true; ToggleDebugWindow(); debuglog->ShowWindow(SW_HIDE); logbox->ShowWindow(SW_HIDE); servermsgbox->ShowWindow(SW_SHOW); // optional: restore last used log pane if (thePrefs.GetRestoreLastLogPane()) { if (thePrefs.GetLastLogPaneID() >= 0 && thePrefs.GetLastLogPaneID() < StatusSelector.GetItemCount()) { int iCurSel = StatusSelector.GetCurSel(); StatusSelector.SetCurSel(thePrefs.GetLastLogPaneID()); if (thePrefs.GetLastLogPaneID() == StatusSelector.GetCurSel()) UpdateLogTabSelection(); else StatusSelector.SetCurSel(iCurSel); } } m_MyInfo.SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); m_MyInfo.SetAutoURLDetect(); m_MyInfo.SetEventMask(m_MyInfo.GetEventMask() | ENM_LINK); PARAFORMAT pf = {0}; pf.cbSize = sizeof pf; if (m_MyInfo.GetParaFormat(pf)){ pf.dwMask |= PFM_TABSTOPS; pf.cTabCount = 4; pf.rgxTabs[0] = 900; pf.rgxTabs[1] = 1000; pf.rgxTabs[2] = 1100; pf.rgxTabs[3] = 1200; m_MyInfo.SetParaFormat(pf); } m_cfDef.cbSize = sizeof m_cfDef; if (m_MyInfo.GetSelectionCharFormat(m_cfDef)){ m_cfBold = m_cfDef; m_cfBold.dwMask |= CFM_BOLD; m_cfBold.dwEffects |= CFE_BOLD; } InitWindowStyles(this); // splitter CRect rcSpl; rcSpl.left = 55; rcSpl.right = 300; rcSpl.top = 55; rcSpl.bottom = rcSpl.top + SVWND_SPLITTER_HEIGHT; m_wndSplitter.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_SERVER); m_wndSplitter.SetDrawBorder(true); InitSplitter(); return true; }
//*************************************************************************** // // //*************************************************************************** BOOL DrawVerticalText ( CDC* pDC, const CRect& rectWindow, CString szcText, const DWORD dwStyle ) { int nSavedDC = pDC->SaveDC(); // // Start by getting this control's font, and then tweak it a bit. // LOGFONT lf; CFont *pTmpFont = pDC->GetCurrentFont(); if( NULL == pTmpFont ) { ASSERT( pTmpFont ); // Font not selected in DC! return FALSE; } pTmpFont->GetObject( sizeof(LOGFONT), &lf ); // // Text will be rotated counter-clockwise 90 degrees. // lf.lfOrientation = lf.lfEscapement = 900; // // We need a TrueType font to get rotated text. MS Sans Serif // won't cut it! Opps! A hard coded string! // lstrcpy( lf.lfFaceName, _T("Tahoma") ); // // Create a font with the tweaked attributes. // CFont font; if( FALSE == font.CreateFontIndirect( &lf ) ) { TRACE2("Error creating font! Line: %d, File: %s\n", __LINE__, __FILE__ ); return FALSE; } CFont *pfontOld = pDC->SelectObject( &font ); CRect rectText( rectWindow ); // // Compute size of horizontal oriented string // pDC->DrawText ( CString(szcText), rectText, DT_LEFT |DT_TOP |DT_CALCRECT |DT_SINGLELINE ); // // Dependence on format flags, compute offset of text rectangle // Horizontal offset is constant for all formats // Vertical offset depend on format // CSize szOffset(0,0); if ( dwStyle & SS_CENTER ) { szOffset = CSize( (rectWindow.Width()-rectText.Height())/2, -(rectWindow.Height()-rectText.Width())/2+rectText.Height() ); } else if ( dwStyle & SS_RIGHT ) { szOffset = CSize( (rectWindow.Width()-rectText.Height())/2, -rectWindow.Height()+rectText.Width()+rectText.Height() ); } else { szOffset = CSize( (rectWindow.Width()-rectText.Height())/2, rectText.Height() ); } // // Convert dimensions of horizontal oriented rectangle // to dimensions of vertical oriented rectangle // (swap horizontal and vertical sizes) // rectText.SetRect( rectWindow.left, 0, rectWindow.left + rectText.Height(), rectWindow.Height()); // rectText.SetRect( rectWindow.left, rectWindow.top, rectText.right, rectWindow.Height()); // rectText.top = rectWindow.top; rectText.bottom = rectWindow.bottom; // // Offset text rectangle // rectText.OffsetRect(szOffset); rectText.top = 0; if( rectWindow.Height() < rectText.Width() ) rectText.right -= ((rectText.Width() - rectWindow.Height())/2); pDC->SetBkMode( TRANSPARENT ); pDC->DrawText( szcText, rectText, DT_LEFT |DT_BOTTOM |DT_SINGLELINE |DT_END_ELLIPSIS ); pDC->SelectObject ( pfontOld ); pDC->RestoreDC( nSavedDC ); return TRUE; }
/////////////////////////////////////////////////////////////////////////////// // OnPaint void CXHTMLStatic::OnPaint() { CPaintDC dc(this); // device context for painting // get text from control CString strText = _T(""); GetWindowText(strText); // replace character entity names with codes TCHAR ent[3] = { 0 }; ent[0] = _T('\001'); // each entity name is replaced with a two-character // code that begins with \001 for (int i = 0; m_aCharEntities[i].pszName != NULL; i++) { ent[1] = m_aCharEntities[i].cCode; strText.Replace(m_aCharEntities[i].pszName, ent); } CString str1 = _T(""); int index = 0; // set text and background colors COLORREF crText = m_crText; COLORREF prev_crText = crText; COLORREF crBackground = m_crBackGround; COLORREF prev_crBackground = crBackground; CFont *pOldFont = dc.SelectObject(&m_font); int n = strText.GetLength(); CRect rect; GetClientRect(&rect); //dc.FillSolidRect(&rect, m_crBackGround); // allow for margins rect.left += m_nLeftMargin; rect.right -= m_nRightMargin; int nInitialXOffset = 0;//m_nLeftMargin; m_yStart = rect.top; LOGFONT lf, prev_lf; if (m_bLogFont) { memcpy(&lf, &m_lf, sizeof(lf)); } else { CFont* cf = GetFont(); if (cf) cf->GetObject(sizeof(lf), &lf); else GetObject(GetStockObject(SYSTEM_FONT), sizeof(lf), &lf); } memcpy(&prev_lf, &lf, sizeof(lf)); CString strAnchorText = _T(""); BOOL bSizeChange = FALSE; //BOOL bEndOfSizeChange = FALSE; TEXTMETRIC tm; dc.GetTextMetrics(&tm); while (n > 0) { /////////////////////////////////////////////////////////////////////// if (_tcsnicmp(strText, _T("<B>"), 3) == 0) // check for <b> or <B> { n -= 3; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bBold++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</B>"), 4) == 0) // check for </B> { n -= 4; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bBold) m_bBold--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<I>"), 3) == 0) // check for <I> { n -= 3; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bItalic++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</I>"), 4) == 0) // check for </I> { n -= 4; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bItalic) m_bItalic--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<U>"), 3) == 0) // check for <U> { n -= 3; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bUnderline++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</U>"), 4) == 0) // check for </U> { n -= 4; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bUnderline) m_bUnderline--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<STRIKE>"), 8) == 0) // check for <STRIKE> { n -= 8; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bStrikeThrough++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</STRIKE>"), 9) == 0) // check for </STRIKE> { n -= 9; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bStrikeThrough) m_bStrikeThrough--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<BIG>"), 5) == 0) // check for <BIG> { n -= 5; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (lf.lfHeight > 0) lf.lfHeight++; else lf.lfHeight--; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</BIG>"), 6) == 0) // check for </BIG> { n -= 6; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (lf.lfHeight > 0) lf.lfHeight--; else lf.lfHeight++; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<SMALL>"), 7) == 0) // check for <SMALL> { n -= 7; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (lf.lfHeight > 0) lf.lfHeight--; else lf.lfHeight++; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</SMALL>"), 8) == 0) // check for </SMALL> { n -= 8; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (lf.lfHeight > 0) lf.lfHeight++; else lf.lfHeight--; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<SUB>"), 5) == 0) // check for <SUB> { n -= 5; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bSubscript++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</SUB>"), 6) == 0) // check for </SUB> { n -= 6; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bSubscript) m_bSubscript--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<SUP>"), 5) == 0) // check for <SUP> { n -= 5; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); m_bSuperscript++;// = TRUE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</SUP>"), 6) == 0) // check for </SUP> { n -= 6; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); if (m_bSuperscript) m_bSuperscript--;// = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<FONT"), 5) == 0) // check for <FONT { index = strText.Find(_T('>')); if (index != -1) { CString strAttributes = strText.Mid(5, index-5); int m = strAttributes.GetLength(); strText = strText.Mid(index+1); // loop to parse FONT attributes while (m > 0) { // trim left whitespace if ((strAttributes.GetLength() > 0) && (strAttributes[0] == _T(' '))) { m--; strAttributes = strAttributes.Mid(1); continue; } /////////////////////////////////////////////////////////// if (_tcsnicmp(strAttributes, _T("COLOR"), 5) == 0) { int index2 = strAttributes.Find(_T('"')); if (index2 != -1) { m -= index2 + 1; strAttributes = strAttributes.Mid(index2+1); index2 = strAttributes.Find(_T('"')); if (index2 != -1) { CString strColor = strAttributes.Left(index2); CXNamedColors nc(strColor); crText = nc.GetRGB(); strAttributes = strAttributes.Mid(index2+1); m = strAttributes.GetLength(); } } else break; } /////////////////////////////////////////////////////////// else if (_tcsnicmp(strAttributes, _T("BGCOLOR"), 7) == 0) { int index2 = strAttributes.Find(_T('"')); if (index2 != -1) { m -= index2 + 1; strAttributes = strAttributes.Mid(index2+1); index2 = strAttributes.Find(_T('"')); if (index2 != -1) { CString strBgColor = strAttributes.Left(index2); CXNamedColors nc(strBgColor); crBackground = nc.GetRGB(); strAttributes = strAttributes.Mid(index2+1); m = strAttributes.GetLength(); } } else break; } /////////////////////////////////////////////////////////// else if (_tcsnicmp(strAttributes, _T("FACE"), 4) == 0) { int index2 = strAttributes.Find(_T('"')); if (index2 != -1) { m -= index2 + 1; strAttributes = strAttributes.Mid(index2+1); index2 = strAttributes.Find(_T('"')); if (index2 != -1) { memset(lf.lfFaceName, 0, sizeof(lf.lfFaceName)); _tcsncpy(lf.lfFaceName, strAttributes, index2); m -= index2 + 1; if (m > 0) strAttributes = strAttributes.Mid(index2+1); else strAttributes = _T(""); m = strAttributes.GetLength(); } } else break; } /////////////////////////////////////////////////////////// else if (_tcsnicmp(strAttributes, _T("SIZE"), 4) == 0) { int index2 = strAttributes.Find(_T('"')); if (index2 != -1) { m -= index2 + 1; strAttributes = strAttributes.Mid(index2+1); index2 = strAttributes.Find(_T('"')); if (index2 != -1) { int nSize = 0; nSize = _ttoi(strAttributes); lf.lfHeight -= nSize; bSizeChange = TRUE; m -= index2 + 1; if (m > 0) strAttributes = strAttributes.Mid(index2+1); else strAttributes = _T(""); m = strAttributes.GetLength(); } } else break; } else { while ((strAttributes.GetLength() > 0) && (strAttributes[0] != _T(' '))) { m--; strAttributes = strAttributes.Mid(1); } } } n -= index + 1; } continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</FONT>"), 7) == 0) // check for </FONT> { n -= 7; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); crText = prev_crText; crBackground = prev_crBackground; memcpy(&lf, &prev_lf, sizeof(lf)); if (bSizeChange) m_yStart += tm.tmDescent; bSizeChange = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<CODE>"), 6) == 0) // check for <CODE> { n -= 6; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); _tcscpy(lf.lfFaceName, _T("Courier New")); continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</CODE>"), 7) == 0) // check for </CODE> { n -= 7; index = strText.Find(_T('>')); if (index != -1) strText = strText.Mid(index+1); memcpy(&lf, &prev_lf, sizeof(lf)); continue; } /////////////////////////////////////////////////////////////////////// // <a href=www.xyz.com>XYZ Web Site</a> else if (_tcsnicmp(strText, _T("<A HREF="), 8) == 0) // check for <A HREF= { index = strText.Find(_T('>')); if (index != -1) { strAnchorText = strText.Mid(8, index-8); strText = strText.Mid(index+1); n = strText.GetLength(); m_bInAnchor = TRUE; continue; } } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("</A>"), 4) == 0) // check for </A> { strText = strText.Mid(4); n -= 4; m_bInAnchor = FALSE; continue; } /////////////////////////////////////////////////////////////////////// else if (_tcsnicmp(strText, _T("<HR"), 3) == 0) // check for <HR> { index = strText.Find(_T('>')); if (index != -1) { CString strAttributes = strText.Mid(3); //, index-3); int m = strAttributes.GetLength(); strText = strText.Mid(index+1); // loop to parse attributes while (m > 0) { // trim left whitespace if ((strAttributes.GetLength() > 0) && (strAttributes[0] == _T(' '))) { m--; strAttributes = strAttributes.Mid(1); continue; } /////////////////////////////////////////////////////////// if (_tcsnicmp(strAttributes, _T("SIZE"), 4) == 0) { int index2 = strAttributes.Find(_T('=')); if (index2 != -1) { m -= index2 + 1; strAttributes = strAttributes.Mid(index2+1); index2 = strAttributes.Find(_T('>')); if (index2 != -1) { CString strSize = strAttributes.Left(index2); m_nHorizontalRuleSize = _ttoi(strSize); strAttributes = strAttributes.Mid(index2+1); m = strAttributes.GetLength(); } } else break; } else { while ((strAttributes.GetLength() > 0) && (strAttributes[0] != _T(' '))) { m--; strAttributes = strAttributes.Mid(1); } } } n -= index + 1; } m_bHorizontalRule++;// = TRUE; str1 = _T("\r\n"); m_bGeneratedText = TRUE; } /////////////////////////////////////////////////////////////////////// // <br> or \r\n or plain text else { str1 = strText; index = str1.Find(_T('<')); if (index != -1) { if (_tcsnicmp(strText, _T("<BR>"), 4) == 0) // check for <BR> { n -= 4; str1 = _T("\r\n"); m_bGeneratedText = TRUE; strText = strText.Mid(4); } else { str1 = strText.Left(index); if (str1.GetLength() <= 0) { if (strText.GetLength() != 0) { str1 = strText[0]; index = 1; n -= 1; } } strText = strText.Mid(index); } } else { str1 = strText; strText = _T(""); } } lf.lfWeight = m_bBold ? FW_BOLD : FW_NORMAL; lf.lfUnderline = (BYTE) m_bUnderline; lf.lfItalic = (BYTE) m_bItalic; lf.lfStrikeOut = (BYTE) m_bStrikeThrough; m_font.DeleteObject(); VERIFY(m_font.CreateFontIndirect(&lf)); dc.SetTextColor(crText); //dc.SetBkColor(crBackground); dc.SetBkMode(TRANSPARENT); dc.SelectObject(&m_font); dc.GetTextMetrics(&tm); int nBaselineAdjust = tm.tmAscent / 2; if (m_bSubscript) { rect.top += nBaselineAdjust; rect.bottom += nBaselineAdjust; m_yStart += nBaselineAdjust; } if (m_bSuperscript) { rect.top -= nBaselineAdjust; rect.bottom -= nBaselineAdjust; m_yStart -= nBaselineAdjust; } nInitialXOffset = FormatText(dc.m_hDC, str1, &rect, nInitialXOffset); if (str1 == _T("\r\n")) { nInitialXOffset = 0; } if (m_bSubscript) { rect.top -= nBaselineAdjust; rect.bottom -= nBaselineAdjust; m_yStart -= nBaselineAdjust; } if (m_bSuperscript) { rect.top += nBaselineAdjust; rect.bottom += nBaselineAdjust; m_yStart += nBaselineAdjust; } if (m_bInAnchor) { SIZE size; GetTextExtentPoint32(dc.m_hDC, str1, str1.GetLength(), &size); CRect rectDraw = rect; rectDraw.bottom = rectDraw.top + size.cy; rectDraw.left = nInitialXOffset - size.cx; rectDraw.right = nInitialXOffset; // save rect for this text - save in window coordinates CRect *pRect = new CRect(rectDraw); m_AnchorRectPtrs.Add(pRect); m_AnchorUrls.Add(strAnchorText); TRACE(_T("added anchor: <%s>\n"), strAnchorText); //TRACERECT(*pRect); if (!m_bHyperlinkTimer) { m_bHyperlinkTimer = TRUE; SetTimer(1, 80, NULL); } } // draw horizontal rule if (m_bHorizontalRule) { int nPenWidth = m_nHorizontalRuleSize; CPen pen(PS_SOLID, nPenWidth, crText); CPen *pOldPen = dc.SelectObject(&pen); dc.MoveTo(rect.left-m_nLeftMargin, rect.top); dc.LineTo(rect.right+m_nRightMargin, rect.top); if (pOldPen) dc.SelectObject(pOldPen); m_yStart += nPenWidth; rect.top += nPenWidth; rect.bottom += nPenWidth; nInitialXOffset = 0; m_bHorizontalRule--; } if (!m_bGeneratedText) n -= str1.GetLength(); m_bGeneratedText = FALSE; } // Restore DC's State dc.SelectObject(pOldFont); // Do not call CStatic::OnPaint() for painting messages }
BOOL CServerWnd::OnInitDialog() { if (theApp.m_fontLog.m_hObject == NULL) { CFont* pFont = GetDlgItem(IDC_SSTATIC)->GetFont(); LOGFONT lf; pFont->GetObject(sizeof lf, &lf); theApp.m_fontLog.CreateFontIndirect(&lf); } ReplaceRichEditCtrl(GetDlgItem(IDC_MYINFOLIST), this, GetDlgItem(IDC_SSTATIC)->GetFont()); CResizableDialog::OnInitDialog(); // using ES_NOHIDESEL is actually not needed, but it helps to get around a tricky window update problem! // If that style is not specified there are troubles with right clicking into the control for the very first time!? #define LOG_PANE_RICHEDIT_STYLES WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_READONLY | ES_NOHIDESEL CRect rect; GetDlgItem(IDC_SERVMSG)->GetWindowRect(rect); GetDlgItem(IDC_SERVMSG)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (servermsgbox->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_SERVMSG)){ servermsgbox->SetProfileSkinKey(_T("ServerInfoLog")); servermsgbox->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); servermsgbox->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); servermsgbox->SetEventMask(servermsgbox->GetEventMask() | ENM_LINK); servermsgbox->SetFont(&theApp.m_fontHyperText); servermsgbox->ApplySkin(); servermsgbox->SetTitle(GetResString(IDS_SV_SERVERINFO)); //Xman ModID /* servermsgbox->AppendText(_T("eMule v") + theApp.m_strCurVersionLong + _T("\n")); */ // ==> ModID [itsonlyme/SiRoB] - Stulle /* servermsgbox->AppendText(_T("eMule v") + theApp.m_strCurVersionLong + _T(" [") + MOD_VERSION + _T("]") + _T("\n")); */ servermsgbox->AppendText(_T("eMule v") + theApp.m_strCurVersionLong + _T(" [") + theApp.m_strModLongVersion + _T("]\n")); // <== ModID [itsonlyme/SiRoB] - Stulle //Xman end // MOD Note: Do not remove this part - Merkur m_strClickNewVersion = GetResString(IDS_EMULEW) + _T(" ") + GetResString(IDS_EMULEW3) + _T(" ") + GetResString(IDS_EMULEW2); servermsgbox->AppendHyperLink(_T(""), _T(""), m_strClickNewVersion, _T("")); // MOD Note: end //Xman versions check // ==> Removed Xtreme version check [Stulle] - Stulle /* servermsgbox->AppendText(_T("\n")); m_strClickNewXtremeVersion=_T("Click to check for new Xtreme-Version"); servermsgbox->AppendHyperLink(_T(""),_T(""),m_strClickNewXtremeVersion,_T("")); */ // <== Removed Xtreme version check [Stulle] - Stulle //Xman end servermsgbox->AppendText(_T("\n\n")); } GetDlgItem(IDC_LOGBOX)->GetWindowRect(rect); GetDlgItem(IDC_LOGBOX)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (logbox->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_LOGBOX)){ logbox->SetProfileSkinKey(_T("Log")); logbox->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); logbox->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); if (theApp.m_fontLog.m_hObject) logbox->SetFont(&theApp.m_fontLog); logbox->ApplySkin(); logbox->SetTitle(GetResString(IDS_SV_LOG)); logbox->SetAutoURLDetect(FALSE); } GetDlgItem(IDC_DEBUG_LOG)->GetWindowRect(rect); GetDlgItem(IDC_DEBUG_LOG)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (debuglog->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_DEBUG_LOG)){ debuglog->SetProfileSkinKey(_T("VerboseLog")); debuglog->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); debuglog->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); if (theApp.m_fontLog.m_hObject) debuglog->SetFont(&theApp.m_fontLog); debuglog->ApplySkin(); debuglog->SetTitle(SZ_DEBUG_LOG_TITLE); debuglog->SetAutoURLDetect(FALSE); } //Xman Anti-Leecher-Log GetDlgItem(IDC_LEECHERLOG)->GetWindowRect(rect); GetDlgItem(IDC_LEECHERLOG)->DestroyWindow(); ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2); if (leecherlog->Create(LOG_PANE_RICHEDIT_STYLES, rect, this, IDC_LEECHERLOG)){ leecherlog->SetProfileSkinKey(_T("VerboseLog")); leecherlog->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); leecherlog->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); if (theApp.m_fontLog.m_hObject) leecherlog->SetFont(&theApp.m_fontLog); leecherlog->ApplySkin(); leecherlog->SetTitle(GetResString(IDS_LEERCHERLOGTITLE)); leecherlog->SetAutoURLDetect(FALSE); } //Xman end OnBackcolor(); // Design Settings [eWombat/Stulle] - Max SetAllIcons(); Localize(); serverlistctrl.Init(); ((CEdit*)GetDlgItem(IDC_SPORT))->SetLimitText(5); GetDlgItem(IDC_SPORT)->SetWindowText(_T("4661")); TCITEM newitem; CString name; name = GetResString(IDS_SV_SERVERINFO); name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 1; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneServerInfo ); name = GetResString(IDS_SV_LOG); name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneLog ); name = SZ_DEBUG_LOG_TITLE; name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT | TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneVerboseLog ); //Xman Anti-Leecher-Log name=GetResString(IDS_LEERCHERLOGTITLE); name.Replace(_T("&"), _T("&&")); newitem.mask = TCIF_TEXT|TCIF_IMAGE; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; VERIFY( StatusSelector.InsertItem(StatusSelector.GetItemCount(), &newitem) == PaneLeecherLog ); //Xman end AddAnchor(IDC_SERVLST_ICO, TOP_LEFT); AddAnchor(IDC_SERVLIST_TEXT, TOP_LEFT); AddAnchor(serverlistctrl, TOP_LEFT, MIDDLE_RIGHT); AddAnchor(m_ctrlNewServerFrm, TOP_RIGHT); AddAnchor(IDC_SSTATIC4, TOP_RIGHT); AddAnchor(IDC_SSTATIC7, TOP_RIGHT); AddAnchor(IDC_IPADDRESS, TOP_RIGHT); AddAnchor(IDC_SSTATIC3, TOP_RIGHT); AddAnchor(IDC_SNAME, TOP_RIGHT); AddAnchor(IDC_ADDSERVER, TOP_RIGHT); AddAnchor(IDC_SSTATIC5, TOP_RIGHT); AddAnchor(m_ctrlMyInfoFrm, TOP_RIGHT, BOTTOM_RIGHT); AddAnchor(m_MyInfo, TOP_RIGHT, BOTTOM_RIGHT); AddAnchor(IDC_SPORT, TOP_RIGHT); AddAnchor(m_ctrlUpdateServerFrm, TOP_RIGHT); AddAnchor(IDC_SERVERMETURL, TOP_RIGHT); AddAnchor(IDC_UPDATESERVERMETFROMURL, TOP_RIGHT); AddAnchor(IDC_SERVER_LISTS, TOP_RIGHT); // Links for Server list and nodes file [Stulle] - Stulle AddAnchor(StatusSelector, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_LOGRESET, MIDDLE_RIGHT); // avoid resizing GUI glitches with the tab control by adding this control as the last one (Z-order) AddAnchor(IDC_ED2KCONNECT, TOP_RIGHT); AddAnchor(IDC_DD, TOP_RIGHT); // The resizing of those log controls (rich edit controls) works 'better' when added as last anchors (?) AddAnchor(*servermsgbox, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(*logbox, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(*debuglog, MIDDLE_LEFT, BOTTOM_RIGHT); AddAnchor(*leecherlog, MIDDLE_LEFT, BOTTOM_RIGHT); //Xman Anti-Leecher-Log // Set the tab control to the bottom of the z-order. This solves a lot of strange repainting problems with // the rich edit controls (the log panes). ::SetWindowPos(StatusSelector, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOSIZE); debug = true; ToggleDebugWindow(); leecherlog->ShowWindow(SW_HIDE); //Xman Anti-Leecher-Log debuglog->ShowWindow(SW_HIDE); logbox->ShowWindow(SW_HIDE); servermsgbox->ShowWindow(SW_SHOW); // optional: restore last used log pane if (thePrefs.GetRestoreLastLogPane()) { if (thePrefs.GetLastLogPaneID() >= 0 && thePrefs.GetLastLogPaneID() < StatusSelector.GetItemCount()) { int iCurSel = StatusSelector.GetCurSel(); StatusSelector.SetCurSel(thePrefs.GetLastLogPaneID()); if (thePrefs.GetLastLogPaneID() == StatusSelector.GetCurSel()) UpdateLogTabSelection(); else StatusSelector.SetCurSel(iCurSel); } } m_MyInfo.SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); m_MyInfo.SetAutoURLDetect(); m_MyInfo.SetEventMask(m_MyInfo.GetEventMask() | ENM_LINK); PARAFORMAT pf = {0}; pf.cbSize = sizeof pf; if (m_MyInfo.GetParaFormat(pf)){ pf.dwMask |= PFM_TABSTOPS; pf.cTabCount = 4; pf.rgxTabs[0] = 900; pf.rgxTabs[1] = 1000; pf.rgxTabs[2] = 1100; pf.rgxTabs[3] = 1200; m_MyInfo.SetParaFormat(pf); } m_cfDef.cbSize = sizeof m_cfDef; if (m_MyInfo.GetSelectionCharFormat(m_cfDef)){ m_cfBold = m_cfDef; m_cfBold.dwMask |= CFM_BOLD; m_cfBold.dwEffects |= CFE_BOLD; } if (thePrefs.GetUseAutocompletion()){ m_pacServerMetURL = new CCustomAutoComplete(); m_pacServerMetURL->AddRef(); if (m_pacServerMetURL->Bind(::GetDlgItem(m_hWnd, IDC_SERVERMETURL), ACO_UPDOWNKEYDROPSLIST | ACO_AUTOSUGGEST | ACO_FILTERPREFIXES )) m_pacServerMetURL->LoadList(thePrefs.GetMuleDirectory(EMULE_CONFIGDIR) + SERVERMET_STRINGS_PROFILE); if (theApp.m_fontSymbol.m_hObject){ GetDlgItem(IDC_DD)->SetFont(&theApp.m_fontSymbol); GetDlgItem(IDC_DD)->SetWindowText(_T("6")); // show a down-arrow } } else GetDlgItem(IDC_DD)->ShowWindow(SW_HIDE); InitWindowStyles(this); // splitter CRect rcSpl; rcSpl.left = 55; rcSpl.right = 300; rcSpl.top = 55; rcSpl.bottom = rcSpl.top + SVWND_SPLITTER_HEIGHT; m_wndSplitter.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_SERVER); m_wndSplitter.SetDrawBorder(true); InitSplitter(); return true; }
void CPadView::OnChoosePrintFont() { CWaitCursor wait; CFont* pFont = GetPrinterFont(); LOGFONT lf; LPLOGFONT plf = NULL; if (pFont != NULL) { pFont->GetObject(sizeof(LOGFONT), &lf); plf = &lf; } // magic to get printer dialog that would be used if we were printing! CPrintDialog dlgPrint(FALSE); if (!AfxGetApp()->GetPrinterDeviceDefaults(&dlgPrint.m_pd)) { AfxMessageBox(IDP_ERR_GET_DEVICE_DEFAULTS); return; } wait.Restore(); HDC hdcPrint = dlgPrint.CreatePrinterDC(); if (hdcPrint == NULL) { AfxMessageBox(IDP_ERR_GET_PRINTER_DC); return; } CDC dcScreen; dcScreen.Attach(::GetDC(NULL)); CDC dcPrint; dcPrint.Attach(hdcPrint); if (plf != NULL) { // need to map initial logfont to screen metrics. ::ScaleLogFont(plf, dcPrint, dcScreen); } // now bring up the dialog since we know the printer DC CFontDialog dlg(plf, CF_PRINTERFONTS, &dcPrint); if (dlg.DoModal() == IDOK) { // map the resulting logfont back to printer metrics. lf = dlg.m_lf; ::ScaleLogFont(&lf, dcScreen, dcPrint); SetPrinterFont(NULL); m_fontPrint.DeleteObject(); if (m_fontPrint.CreateFontIndirect(&lf)) { SetPrinterFont(&m_fontPrint); m_lfDefPrintFont = lf; // notify container that content has changed GetDocument()->UpdateAllItems(NULL); } } //NOTE: destructor will call dcPrint.DeleteDC ::ReleaseDC(NULL, dcScreen.Detach()); }
void SECEditView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) { ASSERT_VALID(this); ASSERT_VALID(pDC); SECEdit* pEdit = GetEdit(); ASSERT(pEdit != NULL); // get the latest page setup values from the registry dlgPageSetup.Initialize(); LPCTSTR pszFileName = GetDocument()->GetPathName(); BOOL bForceSysTime = _tcschr(pszFileName, '.') == NULL; CTime timeSys = CTime::GetCurrentTime(); CFileStatus status; CFile::GetStatus(pszFileName, status); if (dlgPageSetup.m_iHeaderTime != 0 || bForceSysTime) m_timeHeader = timeSys; else m_timeHeader = status.m_mtime; if (dlgPageSetup.m_iFooterTime != 0 || bForceSysTime) m_timeFooter = timeSys; else m_timeFooter = status.m_mtime; if (m_hPrinterFont == NULL) { // get current screen font object metrics CFont* pFont = &m_font; LOGFONT lf; LOGFONT lfSys; if (pFont == NULL) return; VERIFY(pFont->GetObject(sizeof(LOGFONT), &lf)); VERIFY(::GetObject(::GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lfSys)); if (lstrcmpi((LPCTSTR)lf.lfFaceName, (LPCTSTR)lfSys.lfFaceName) == 0) return; // map to printer font metrics HDC hDCFrom = ::GetDC(NULL); lf.lfHeight = ::MulDiv(lf.lfHeight, pDC->GetDeviceCaps(LOGPIXELSY), ::GetDeviceCaps(hDCFrom, LOGPIXELSY)); lf.lfWidth = ::MulDiv(lf.lfWidth, pDC->GetDeviceCaps(LOGPIXELSX), ::GetDeviceCaps(hDCFrom, LOGPIXELSX)); ::ReleaseDC(NULL, hDCFrom); // create it, if it fails we just use the printer's default. m_hMirrorFont = ::CreateFontIndirect(&lf); m_hPrinterFont = m_hMirrorFont; } // select the font so we can calc the metrics CFont* pOldFont = NULL; if (m_hPrinterFont != NULL) pOldFont = pDC->SelectObject(CFont::FromHandle(m_hPrinterFont)); /* Get the height of one line and the height of a page */ // get some constants int iWidth = pDC->GetDeviceCaps(HORZRES); int iHeight = pDC->GetDeviceCaps(VERTRES); // calculate our print rect CRect rect; rect.top = rect.left = 0; rect.bottom = iHeight; rect.right = iWidth; TEXTMETRIC metrics; pDC->GetTextMetrics(&metrics); m_iPrintLineHeight = metrics.tmHeight+metrics.tmExternalLeading; int iPageHeight = pDC->GetDeviceCaps(VERTRES); int iCharWidth = metrics.tmAveCharWidth; int maxchars = rect.Width() / iCharWidth; maxchars--; // go thru global OEPageSetupDlg to format the header and footer CString strHeader; dlgPageSetup.FormatHeader(strHeader, m_timeHeader, pszFileName, 1); CString strFooter; dlgPageSetup.FormatFooter(strFooter, m_timeFooter, pszFileName, 1); // exlude space for the header if (!strHeader.IsEmpty()) iPageHeight -= m_iPrintLineHeight + m_iPrintLineHeight / 4 + m_iPrintLineHeight / 4; // exlude space for the footer if (!strFooter.IsEmpty()) iPageHeight -= m_iPrintLineHeight + m_iPrintLineHeight/4 + m_iPrintLineHeight/4; m_iLinesPerPage = iPageHeight / m_iPrintLineHeight; if (pOldFont != NULL) { ////////////////////////////////////////////////////// // Pagination. Note we have to do it here to be able to // give an accurate page count to the print preview code. // it's not just a count of lines because we wrap lines // that won't fit inside the rect. // PLINEDESC pFirst,pSecond; int iLineCount = 0; SECEdit* pEdit = GetEdit(); ASSERT(pEdit != NULL); if (m_bPrintSelection) { pFirst = m_BlockStart.pLine; pSecond = m_BlockEnd.pLine->pNext; } else { pFirst = pEdit->ListGetFirst(m_pTopLine,NULL); pSecond = NULL; } iLineCount = CountLines(); m_PageList.RemoveAll(); // set the array's initial size to allow for a bunch of split lines m_PageList.SetSize(iLineCount/m_iLinesPerPage+8); int iPage = 0; m_PageList.SetAt(iPage,pEdit->GetLineNo(pFirst)); iLineCount = 0; int iTotalLines = 0; while (pFirst != pSecond) { int iAddLines = 0; if ((pFirst->iTxtSize - pEdit->m_iLineEndLength) > maxchars) { int iSize = pFirst->iTxtSize; // first (maybe) adjust for OE_CR/OE_LF char cFirst,cSecond; cFirst = pFirst->pText[iSize-pEdit->m_iLineEndLength]; cSecond = pEdit->m_szLineEnd[0]; if (cFirst == cSecond) iSize -= pEdit->m_iLineEndLength; iAddLines = iSize / maxchars; if (iSize % maxchars) iAddLines++; iTotalLines += iAddLines; // skip this whole line if it's the last line of a // page, so we don't have to handle a line being // split across pages if ((iLineCount+iAddLines) <= m_iLinesPerPage) { iLineCount += iAddLines; iAddLines = 0; } } else { iLineCount++; iTotalLines++; } if ((iLineCount+iAddLines) >= m_iLinesPerPage) { if (pFirst->pNext) { iPage++; int iLineNo = pEdit->GetLineNo(pFirst); if (!iAddLines) iLineNo++; m_PageList.SetAtGrow(iPage,iLineNo); iLineCount = 0; } } if (!iAddLines) pFirst = pFirst->pNext; } pInfo->SetMaxPage(iPage+1); pDC->SelectObject(pOldFont); } ASSERT_VALID(this); }
BOOL CWedApp::SaveAllModified() { // Save reopen information: CString buf; CPtrList il; int row, col; // Save list of buffers if(!comline) { int count = 0; POSITION Pos = pDocTemplate->GetFirstDocPosition(); // Make a list, current edited buffer as last for(;;) { if(!Pos) break; CWedDoc* doc = (CWedDoc*)pDocTemplate->GetNextDoc(Pos); POSITION pos = doc->GetFirstViewPosition(); CView *cv = doc->GetNextView(pos); ASSERT_VALID(cv); if(cv != currentedit) il.AddTail(cv); } if(currentedit) il.AddTail(currentedit); POSITION pos = il.GetHeadPosition(); for(;;) { if(!pos) break; CView *cv = (CView*)il.GetNext(pos); if(!cv) break; ASSERT_VALID(cv); CWedDoc* doc = (CWedDoc*)cv->GetDocument(); if(!doc) break; ASSERT_VALID(doc); CString fline =doc->strlist.GetLine(0); // If it is a new doc if(doc->strlist.GetCount() == 1 && fline.GetLength() == 0) { //P2N("New doc: %d\r\n", doc); } else { CString file = doc->GetPathName(); row = ((CWedView*)cv)->row; col = ((CWedView*)cv)->col; buf.Format("%d", count + 1); WriteProfileString(strSection, strStringItem + buf, file); WriteProfileInt(strSection, strStringItem + buf + "row", row); WriteProfileInt(strSection, strStringItem + buf + "col", col); count++; } } WriteProfileInt(strSection, strIntItem, count); } // Serialize holdings message ("Saving holdings"); SaveHoldings(); // Serialize macros message ("Saving macros"); SaveMacros(); // Save config information: CTime t = CTime::GetCurrentTime(); WriteProfileInt(strConfig, "strLastUsage", (int)t.GetTime()); WriteProfileInt(strConfig, "strUsage", use); // Save main frame window placement WINDOWPLACEMENT wp; pMainFrame->GetWindowPlacement(&wp); WriteProfileInt(strConfig, "WindowState", wp.showCmd); // Save file informaion // Save current window focus: // Save font info LOGFONT lf; ff.GetObject(sizeof(LOGFONT), &lf); WriteProfileString(strConfig, strFontName, lf.lfFaceName); WriteProfileInt(strConfig, strFontSize, lf.lfHeight); WriteProfileInt(strConfig, strFontWeight, lf.lfWeight); WriteProfileInt(strConfig, strFontItalic, lf.lfItalic); // Save color info WriteProfileInt(strConfig, strColorBg, bgcol); WriteProfileInt(strConfig, strColorFg, fgcol); WriteProfileInt(strConfig, strColorSel , selcol ); WriteProfileInt(strConfig, strColorCSel, cselcol); WriteProfileInt(strConfig, strColorAdd , cadd ); WriteProfileInt(strConfig, strColorDel , cdel ); WriteProfileInt(strConfig, strColorChg , cchg ); WriteProfileInt(strConfig, strColorComm, comm ); WriteProfileInt(strConfig, strColorSrc , srcc ); WriteProfileInt(strConfig, strColorLong , clng ); // Save backwrap WriteProfileInt(strConfig, strBackWrap , backwrap); // Save tab2space WriteProfileInt(strConfig, strTab2Space, Tab2Space); // Save tabstop WriteProfileInt(strConfig, strTabStop, tabstop); return CWinApp::SaveAllModified(); }