Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Edit Feld in ToolBar auf Knopfdruck füllen !

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.12.2007, 20:42 Uhr
WindDancer1



Hi Leute ,

ich hab hier ein Prijekt, das eine EditBox in der ToolBar haben soll, das implementieren und anzeigen anzeigen funktioniert.
Wenn ich versuche die TextBox auf Knopfdruck zu füllen klappt's nicht, es ist zum irre werden !
Ich möchte per Druck auf diesen Knopf (das Ereignis(Knopfdruck) wird im Doc gehandelt) die Edit Box dynamisch füllen (mit Werten die im Doc berechnet werden), aber das klappt einfach nicht ;( !
Ich hab jetzt emal ein kleines Projekt mit der selben Problematik angelegt um übertschaubaren Code schicken zu können.
Wenn es möglich ist / wäre würde ich das ganze Projekt (ist wirklich nicht groß !)
hochladen uder zumailen, Hauptsache Ihr könnt mir helfen, es ist wirklich wichtig !

Hier der Code in Kürze :

also das ist der Code Im DOC.cpp:

C++:
void CEditCtrlDoc::OnUpdateFill(CCmdUI* pCmdUI)
{
    pCmdUI->Enable (m_bFill);    // Aktiviert Button zum füllen der EditBox    
}




Code der DOC.h :

Ich habe nur die Bool Variable im Public Bereich eingefügt :

C++:
    BOOL        m_bFill;




Code der TlBar.cpp (neue Klasse für das Edit Control in der ToolBar):

C++:
// TlBar.cpp: Implementierungsdatei
//

#include "stdafx.h"
#include "EditCtrl.h"
#include "TlBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#define  EDITLEN 80
#define  EDITPOS 3



/////////////////////////////////////////////////////////////////////////////
// CTlBar

CTlBar::CTlBar()
{
}

CTlBar::~CTlBar()
{
}


BEGIN_MESSAGE_MAP(CTlBar, CToolBar)
    //{{AFX_MSG_MAP(CTlBar)
        // HINWEIS - Der Klassen-Assistent fügt hier Zuordnungsmakros ein und entfernt diese.
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CTlBar


BOOL CTlBar::LoadToolBarEx (UINT id)
{
    bool bReturn;
    bReturn = CTlBar::LoadToolBar (id);

    int iPosition = CommandToIndex (ID_nEDIT);

    SetButtonInfo (iPosition,ID_nEDIT,TBBS_SEPARATOR,EDITLEN);

    
    CRect rect;
    GetItemRect (iPosition, &rect);
    rect.bottom = 20;

    DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL;
    m_Ctrl_EDIT.CreateEx(WS_EX_CLIENTEDGE,_T("EDIT"),NULL, dwStyle, rect, this, ID_nEDIT);
    return bReturn;
}




Code in TlBar.h :

C++:
#if !defined(AFX_TLBAR_H__1741EA96_4BB2_4E63_8A8A_F21C15ACF84F__INCLUDED_)
#define AFX_TLBAR_H__1741EA96_4BB2_4E63_8A8A_F21C15ACF84F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TlBar.h : Header-Datei
//

/////////////////////////////////////////////////////////////////////////////
// Fenster CTlBar

class CTlBar : public CToolBar
{
// Konstruktion
public:
    CTlBar();

//***********************************************************************************************************************
    BOOL LoadToolBarEx (UINT id);
//***********************************************************************************************************************
// Attribute
public:

// Operationen
public:

// Überschreibungen
    // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
    //{{AFX_VIRTUAL(CTlBar)
    //}}AFX_VIRTUAL

// Implementierung
public:
    virtual ~CTlBar();

    // Generierte Nachrichtenzuordnungsfunktionen
protected:
    //{{AFX_MSG(CTlBar)
        // HINWEIS - Der Klassen-Assistent fügt hier Member-Funktionen ein und entfernt diese.
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
//***********************************************************************************************************************
private:
    CEdit m_Ctrl_EDIT;
//***********************************************************************************************************************
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

#endif // AFX_TLBAR_H__1741EA96_4BB2_4E63_8A8A_F21C15ACF84F__INCLUDED_




Ich möchte eigentlich nichts weiter als dass bei Druck auf den Fill Button (grüner Punkt) die TextBox mit einem Text gefüllt wird !!!


könnt Ihr mir da weiterhelfen ???

Gruß
WindDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.12.2007, 00:38 Uhr
mmc20
puss in boots


hi,
ich rat jetzt mal:
- du hast nen SDI/MDI project ?
- die toolbar wird in deiner CMainFrame instanziert ?
wenn ja, dann kannst du aus der doc über GetParent() (bzw. GetParentOwner()) über die member der toolbar (m_wndToolBar, oder so) auf dein CEdit zugreifen.

C++:
// in der CMainFrame
public: void SetMyToolBarEditText(CString csText) {
     m_wndToolBar.m_Ctrl_EDIT.SetWindowText(csText);
     // m_Ctrl_EDIT muss dann natürlich auch public sein
}

// in deiner doc, in "OnHabGeradeDenGruenenPunktGedrueckt(...)"
((CMainFrame*)GetParent())->SetMyToolBarEditText("blabla");


besser wäre natürlich das über messages zu machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.12.2007, 12:36 Uhr
WindDancer1



Hi mm20 ,

danke für Deine schnelle Antwort.
> - du hast nen SDI/MDI project ?
Ich hab ein SDI-Projekt

> - die toolbar wird in deiner CMainFrame instanziert ?
Ja genau.


C++:
protected:  // Eingebundene Elemente der Steuerleiste
    CStatusBar  m_wndStatusBar;
    CTlBar      m_wndToolBar;



Ich habe alles so eingefügt wie Du's gesagt hast !

In MainFrm.h:

C++:
.
.
.
protected:
    //{{AFX_MSG(CMainFrame)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        // HINWEIS - An dieser Stelle werden Member-Funktionen vom Klassen-Assistenten eingefügt und entfernt.
        //    Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

public:
    void SetMyToolBarEditText(CString csText)
    {
        m_wndToolBar.m_Ctrl_EDIT.SetWindowText(csText);
    }
};





In der EditCtrlDoc.cpp :

C++:
void CEditCtrlDoc::OnFill()
{
((CMainFrame*)GetParent())->SetMyToolBarEditText("blabla");
}





Leider bekomm ich jetzt noch 2 Fehler :

C++:
: error C2660: 'GetParent' : Funktion akzeptiert keine 0 Parameter
: error C2227: Der linke Teil von '->SetMyToolBarEditText' muss auf Klasse/Struktur/Union zeigen


Der erste Fehler ist klar warum er auftritt, da GetParent einen HWND erwartet, aber wie und woher bekomm ich den ?

Wenn es eine Möglichkeit gibt, würde ich Die das Projekt mailen ist nur ein 46 KB zip., also wirklich klein !

Vielen Dank für Deine Geduld und Mühe

WindDancer

P.S.: Wenn Du noch Muse hast könntest Du mir erklären / zeigen wie man das über Messages macht Ich nehm an Du meinst die Afx - Geschichten, MessageMaps usw.

Dieser Post wurde am 14.12.2007 um 12:42 Uhr von WindDancer1 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.12.2007, 11:48 Uhr
WindDancer1



Hi,

AfxGetMainWnd ist die Lösung !



WinDDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: