Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Behandlung von Elementen in Cdialogbar(s)

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 < [ 2 ]
000
03.02.2004, 17:55 Uhr
Philipp



Hi Leute,

hab ne Frage zu ner SDI-MFC-Anwendung von mir. Hatte vor ein paar Tagen schon mal ne Frage zu Dialogbars gestellt, darum geht es jetzt wieder.

Ich habe also eine Dialogbar mit verschiedenen Elementen, darunter u.a. Buttons&Edit Felder. Die Buttons auslösen zu lassen ist ja sehr einfach, einfach ne Message senden lassen und fertig, das klappt auch schon...

Nur hab ich ne Frage zu den EditFeldern/Labels: Wie kann ich denen einen Wert zuweisen bzw. ihren aktuellen Wert abfragen? Hab das dialogfeld dem CMainFrame Objekt zugewiesen, nur lassen sich unter "MemberVariablen" der jeweiligen Klasse im Klassen-Assistent keine Membervariablen an die einzelnen EditFelder/Labels zuweisen!
Geht das trotzdem irgendwie? ODer muss ich das auf ne ganz andere Weise machen?

Wer nen Screenshot will :

www.codetown.de/stuff/AA1.jpg

Rechts halt die Dialogbar mit den Editfeldern, allerdings sind die "grauen Editfelder" unter "Informationen" die Labels, darunter (unter Berechnung) befinden sich die Edit-Felder!

Philipp

Dieser Post wurde am 03.02.2004 um 17:58 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.02.2004, 20:19 Uhr
mike
Pinguinhüpfer
(Operator)


Moin!
Du musst ja ne Instanz von dem Dialog haben. Mit der holst du dir Zugriff aufs Fenster (CWnd*, HWND) und mit GetDlgItem bekommst du imho Zugriff auf die Items.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.02.2004, 21:48 Uhr
Philipp



Mhhh...

Egal wie ich es versuche, er gibt mir immer 0 zurück, wobei das Errorbyte dass er erstellt ebenfalls 0(-> also Fehler) anzeigt!

Ich weiß echt net warum, meine Beispiel ID war "IDC_CURX" und die sollte auch stimmen. Hab mir über AfxGetApp()->m_pMainWnd besorgt. Dann darauf GetDlgItemInt mit der angegebenen ID ausgeführt, aber er will nicht!
Komisch ist auch, dass pApp->m_pMainWnd kein Objekt "DialogBar" enthält, obwohl ich eine Instanz von CDialogBar namens DialogBar in CMainFrame abgelegt hab! Muss ich m_pMainWnd erst noch in (CMainFrame*) konvertieren?


C++:
CAreaApproachApp* pApp=(CAreaApproachApp*)AfxGetApp();

BOOL bError=false;
int lol=pApp->m_pMainWnd->GetDlgItemInt(IDC_CURX,&bError, TRUE);
}



Ist ja sowieso irgendwie was umständlich... Gibt es keine andere Möglichkeit?

Philipp

Dieser Post wurde am 03.02.2004 um 21:50 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.02.2004, 22:47 Uhr
mike
Pinguinhüpfer
(Operator)


Das meinte ich nicht ganz - du musst irgendwo eine CDialogBar m_cmyBar Variable haben. Die sollte imho den Zugriff auf den Dialog geben. Man könnte noch direkt einen CWnd* holen, wenn man die ID kennt (FindWindow,...)
m_cmyBar.GetDlgItem sollte dann gehen

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.02.2004, 00:09 Uhr
Philipp



und die Variable muss wirlich genau "m_cmyBar" heißen? Weil die habe ich per "In Dateien Suchen" nicht gefunden

Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.02.2004, 07:33 Uhr
mike
Pinguinhüpfer
(Operator)


*g* Such einfach nach CDialogBar. Da müsste er dann sowas wie "CDialogBar <namedervariable>;" finden. Möglicherweise findest du auch ein new CDialogBar - dann nutzt du die *<variablennamen> Variable.

mfg
PS: Mir war gerade fad *g* Eine Lösung von vielen:

C++:
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
HWND hWnd = pMain->m_wndDlgBar.GetSafeHwnd();
if(hWnd){
    CWnd *pBar = CWnd::FromHandle(hWnd);
    CWnd* pItem = NULL;
    pItem = pBar->GetDlgItem(IDC_LABEL);
    ((CButton*)pItem)->SetWindowText("Hallo Label");
    pItem = pBar->GetDlgItem(IDC_EDIT);
    ((CEdit*)pItem)->SetWindowText("Hallo Edit");
}


Achja der Auszug aus CMainFrame

C++:
    ///// MEIN CODE
    if (!m_wndDlgBar.Create(this, IDD_DLG,
            WS_CHILD|WS_VISIBLE| CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
            IDD_DLG))
    {

        TRACE0("Fehler\n");
    }    

    // ZU ERLEDIGEN: Löschen Sie diese drei Zeilen, wenn Sie nicht wollen, dass die Symbolleiste
    //  andockbar ist.
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    DockControlBar(&m_wndDlgBar,AFX_IDW_DOCKBAR_RIGHT);


und

C++:
class CMainFrame : public CFrameWnd
{
    
// Implementierung
public:
    CDialogBar m_wndDlgBar;


--

Dieser Post wurde am 04.02.2004 um 07:51 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.02.2004, 17:44 Uhr
Philipp



Thx, das klappt schonmal!

Jetzt aber hab ich das Problem mit der Combobox, die in meiner Dialogbar per Ressource-Editor integriert ist!

Wie kann ich für diese Combobox ne Membervariable hinzufügen, sodass ich über diese Membervariable( denke ja vom Typ CComboBox) z.B. über AddString neue Elemente hinzufügen kann?

Weil wenn ich einfach sage:


C++:
///ComboBox für Rechenart initialisieren
    CRect Rect;
    Rect.top=300;
    Rect.left=64;
    Rect.right=136;
    Rect.bottom=Rect.top+100;

    m_ctrlCalcType.Create(CBS_DROPDOWNLIST|WS_VSCROLL|WS_CHILD|WS_VISIBLE,Rect,(CWnd*)&DlgBar,IDC_CALCTYPE);
    m_ctrlCalcType.AddString("Rechteck");
    m_ctrlCalcType.AddString("Dreieck");
    m_ctrlCalcType.AddString("Simpson/Spline");


Dann erstellt der mir eine ganz neue Combobox! Und das will ich ja nicht!

Philipp

Dieser Post wurde am 06.02.2004 um 17:44 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.02.2004, 18:01 Uhr
mike
Pinguinhüpfer
(Operator)


Moin
Entweder du fügst das DDX Makro händisch ein, oder erstellt ne Klasse und überlässt dem KLassenassi die Arbeit.
Die zweite Möglichkeit wäre, auf die Membervariablen zu verzichten und mit dem Objektnamen zu arbeiten. Also
pItem = pBar->GetDlgItem(IDC_COMBO);
((CComboBox*)pItem)->AddString("Hallo Combo");

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.02.2004, 18:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
((CComboBox*)(GetDlgItem(IDC_COMBO_...)))->AddString("Text");


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.02.2004, 20:07 Uhr
Philipp



Ok danke, wenn ich Zeit hab probier ichs mal aus...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: