RichEdit - Feld & Link



  • tach zusammen....

    ich bin c++ neuling und versuchen einen Text als Link in einem RichEdit - Feld darzustellen! Man soll diesen hinterher auch anklicken können so das sich die Seite im Browser öffnet !!

    Für Hilf wäre ich dankbar 😃 😃 😃

    Danke in voraus!!!!

    mfg hamster



  • Servus,

    als kleines Tut für ein Richeditfeld empfiehlt sich:

    http://www.functionx.com/visualc/controls/richedit.htm

    Für dein Problem solltest du dir in der Klasse CRicheditCtrl dir mal "SetSelectionCharFormat()" anschauen. Als Paramater nimmt diese einmal "CHARFORMAT" und "CHARFORMAT2". Unter "CHARFORMAT2" findet sich bei dwEffects der Parameter "CFE_LINK".

    kleines Bsp.:

    CRichEditCtrl* RichEditor = (CRichEditCtrl*)GetDlgItem(ID_DEINES_RICHEDIT);
    RichEditor->SetSel(0, 12); //Markierungsbereich, für den Text 
    CHARFORMAT Cfm;
    
    RichEditor->GetSelectionCharFormat(Cfm);
    Cfm.cbSize = sizeof(CHARFORMAT);
    Cfm.dwMask = CFM_BOLD | CFM_UNDERLINE;
    Cfm.dwEffects ^= CFE_BOLD | CFM_UNDERLINE; 
    
    RichEditor->SetSelectionCharFormat(Cfm); 
    RichEditor->SetFocus();
    

    Damit würdest du den Text nun Fett und Unterstrichen ausgeben. Wie das alles genau geht, steht in dem Tut.

    Viel Spass 😃

    *winke*
    Hellsgore



  • Danke schonmal !!!!



  • Also irgendwie check ich das nich mach alles wies da steht aber es passiert nix!! Ist das CFE_LINK vieleicht erst ab ner bestimmten version vorhanden oder so... ???

    😡 😡 😕 😕 😞 😞





  • Also,

    guckst du:

    .h

    public:
      afx_msg void OnEnLinkRichedit21(NMHDR *pNMHDR, LRESULT *pResult);
    

    .cpp

    BEGIN_MESSAGE_MAP(CTestFTPDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_NOTIFY(EN_LINK, IDC_RICHEDIT21, OnEnLinkRichedit21)
    END_MESSAGE_MAP()
    
    void CDeinDlg::OnTackerDieKatz()
    {
    	m_ctrRichEdit.SetWindowText("TackerdieKatzandieDeck");
    
    	m_ctrRichEdit.SetSel(0, 17);
    	CHARFORMAT Cfm;
    
    	m_ctrRichEdit.GetSelectionCharFormat(Cfm);
    	Cfm.cbSize = sizeof(CHARFORMAT);
    	if(Cfm.dwMask & CFM_LINK)
    	{ 
    		Cfm.dwEffects ^= CFE_LINK; 
    	}
    	else
    	{ 
    		Cfm.dwEffects |= CFE_LINK;
    	}
    	Cfm.dwMask = CFM_LINK;
    
    	m_ctrRichEdit.SetSelectionCharFormat(Cfm); 
    	m_ctrRichEdit.SetFocus();
    	m_ctrRichEdit.SetEventMask(ENM_LINK);
    
    }
    
    //Eigenschaften vom Richedit und dann Methode für EN_LINK einfügen
    void CDeinDlg::OnEnLinkRichedit21(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	ENLINK *pEnLink = reinterpret_cast<ENLINK *>(pNMHDR);
    	if (pEnLink->msg == WM_LBUTTONDOWN)
    	{
    		ShellExecute(NULL, "open", "www.c-plusplus.net", NULL, NULL, SW_SHOW);
    	}
    	*pResult = 0;
    }
    

    Klickst du in deinem Richeditfeld auf "TackerdieKatzandieDeck" öffnet sich c-plusplus.net...

    Viel Spaß
    *winke*
    Hellsgore

    PS: noch ein ratsamer Link: http://www.thecodeproject.com/richedit/cricheditctrlgs.asp


Log in to reply