Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Find Control

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
22.02.2005, 13:56 Uhr
~Finder
Gast


Hi!

Wie stellt man fest (ohne Absturz) , ob ein bestimmter Button auf dem Dialog vorhanden ist?
Z.B. möchte ich herausfinden auf welchem Dialog der Button IDPBCANCEL ist.

danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.02.2005, 16:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


GetDlgItem auf NULL checken...?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.02.2005, 12:30 Uhr
~Finder
Gast


o.k.

ich möchte dann in einem Editfeld (es gibt 2 und ich möchte das 2.Editfeld)
einen Text reinschreiben.
Es handelt sich aber dabei um einen Dialog in einer anderen Anwendung:

CWnd *pWndPrev, *pWndChild;
CString strMyText = "Hello World";

if( pWndPrev = CWnd::FindWindow(NULL,"ForeignApp" ) )
{ // if so, does it have any popups?
pWndChild = pWndPrev->GetLastActivePopup( );
// If iconic, restore the main window
if( pWndPrev->IsIconic( ) )
{ pWndPrev->ShowWindow( SW_RESTORE );
}
// Bring the main window or its popup to the foreground
pWndChild->SetForegroundWindow( );

// Get edit control which happens to be the first child window
CEdit* pEdit = (CEdit*)pWndChild->GetWindow(GW_CHILD);
if(pEdit)
{
//i want the second Control on the foreign dialog:
pEdit = (CEdit*)pWndChild->GetWindow(GW_HWNDNEXT);
if(pEdit)
{
pEdit->SendMessage(EM_REPLACESEL, 0, (LPARAM)strMyText.GetBuffer(strMyText.GetLength()));
pWndPrev->SendMessage( WM_COMMAND, IDOK, NULL );
}
}
}

-->funzt nicht, so wie ich mir das vorstelle :-(

Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.02.2005, 13:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


äh du willst du nur ein text reinpacken?...

C++:
GetDlgItem(IDC...)->SetWindowText("Tralala");


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.02.2005, 14:38 Uhr
~Finder
Gast


ne. so einfach geht das nicht :-o
in einem Fremdprogramm kennt man nicht die Id's der Controls!
Also muß man z.b. alle Controls vom Typ Edit durchlaufen (denn dann kann man rausfinden mit CEdit* pEdit = (CEdit*)pWndChild->GetWindow(GW_CHILD); )
Wenn man also dann speziell ein Eingabefeld an Pos. 2 füllen will... pEdit = (CEdit*)pWndChild->GetWindow(GW_HWNDNEXT);

nur wenn man dann das richtige gefunden hat kann man mit pEdit->SendMessage(EM_REPLACESEL, 0, (LPARAM)strMyText.GetBuffer(strMyText.GetLength())); den Text einsetzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.02.2005, 15:01 Uhr
~Finder
Gast


also wie füllt man ein eingabefeld eines anderen programms ist die frage.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.02.2005, 15:26 Uhr
Th



Probier einfach mal die anderen Messages WM_SETEXT bzw. EM_SETTEXTEX aus. Eine davon muß ja funktionieren-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.02.2005, 16:51 Uhr
~Finder
Gast


...muss man nicht eigentlich GetNextDlgTabItem() verwenden, um zum nächsten Control desselben dialogs zu gelangen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.02.2005, 17:06 Uhr
Th



Ja, wenn du schon Zugriff auf das erste Control eines Dialogs hast, dann kannst du mit GetNextDlgTabItem() zum nächsten Control gelangen. (Hierfür ist die Tab-Reihenfolge entscheidend!!!).

Mit GetWindow(GW_HWNDNEXT) bekommst du das Fenster, das bzgl. der Z-Reihenfolge hinter dem übergebenen liegt (daher ist diese Funktion auf jeden Fall falsch).

Mit "if (pEdit->IsKindOf( RUNTIME_CLASS(CEdit) )" kannst du überprüfen, ob es wirklich ein Editfeld ist (bevor du es erst einfach castest und evtl. ein anderes Control erwischt hast).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.02.2005, 17:23 Uhr
~Finder
Gast


kennt niemand eine beispiel-anwendung ;-)

mit GetNextDlgTabItem() scheint sich auch nichts zu bewegen.
jedenfalls hat SendMessage keine Wirkung danach. nur ins erste Editfeld bekomme ich den string.
das zweite bleibt auch nach GetNextDlgTabItem() leer!
 
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: