Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Problem] C++ GUI unter MFC

Discussion on [Problem] C++ GUI unter MFC within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
Question [Problem] C++ GUI unter MFC

Hi,
Ich habe ein Problem mit einem GUI. Und zwar möchte ich mir einen Hack erstellen mit GUI. Ich mache das ganze unter MFC. (Beispielscript im Anhang)

1. Problem: Ich möchte einen RadioButton als gesetzt wählen. SetChecked funktioniert nicht, bzw. ich weiß nicht wohin ich das plawtzieren muss. Ich verstehe bei den ganzen Header Dateien, Quelldateien und Ressourcendateien überhaupt nicht mehr, wo was hin muss. =/

2. problem: Das GUI soll nur so lange angezeigt werden, wie ein bestimmtes Fenster existiert. Wenn das Fenster geschlossen wird, soll stattdessen eine MsgBox angezeigt werden, bei welcher man die Auswahlmöglichkeiten "OK" und "Abbrechen" hat. Wenn man auf Ok drückt, wird überprüft, ob das Spiel wieder geöffnet ist. Wenn dies nicht der Fall ist, wird wieder die MsgBox angezeigt, wenn das Spiel zwischenzeitlich wieder gestartet wurde, soll man zurück ins GUI kehren.

€: Warum schreib ich eigentlich so viel?! O.o Code hierzu:
PHP Code:
CWnd *pWnd;
HWND hWnd;  
hWnd NULL;
    
_messagebox(void)
    {
            
pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Shaiya"));
            
hWnd HWND(pWnd->GetSafeHwnd());
            if (
hWnd == NULL)
            {
                
int nResult AfxMessageBox(_TEXT("Shaiya ist nicht aktiv. Drücke OK, sobald Shaiya geöffnet wurde."), MB_ICONWARNING|MB_OKCANCEL);
                if(
nResult == IDOK)
                {
                    if (
hWnd == NULL)
                    {
                        
_messagebox();
                    }
                }
                if(
nResult == IDCANCEL)
                {
                    exit(
0);
                }
            }
    } 
3. Problem: Wenn ich einen Radio Button markiere, soll der Wert Ingame ja dauernd überschrieben werden.
Halt so:

PHP Code:
while(1)
{
MemoryProcessWrite(...)

Macht das MFC automatisch oder muss ich das manuell einfügen? Und wenn ja, wo?

Ich hoffe, ihr versteht meine Fragen/Probleme. Mein Hauptproblem ist eigentlich, dass ich einfach nicht weiß, wo was hin muss.

mfg

€: Ich weiß nicht genau, ob das hier die richtige Section für mein Problem ist. Bitte moved es ansonsten.
Attached Files
File Type: zip Beispiel.zip (5.22 MB, 7 views)
Frezee is offline  
Old 07/20/2009, 23:15   #2

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
Ja MFC kann am Anfang etwas undurchschaubar sein, aber wenn man sich mal dran gewöhnt hat, ist es ganz easy.


1. Radio Button:
Ich frage mich wieso du das mit einem Radio Button machen willst. Ein Radio Button ist immer ausgewählt. Radio Buttons werden verwendet um eine Auswahl zwischen mehreren Optionen zu machen wo es nur 1 Auswahlmöglichkeit gibt. Sprich [o] Ja oder [ ] Nein.

Wenn der Radio Button einmal gewählt ist, kannst du ihn nicht mehr weg machen, sondern höhstens einen anderen Wählen.

Wenn du etwas ein / ausschalten willst, solltest du lieber Check Boxen nehmen.

Naja aber ok.

Du gehst in die Klassenansicht und Klickst auf CDeinProjektNameDlg, unten siehst du dann die Funktionen. Du machst einen Doppelklick auf OnInitDialog();
Dann scrollst du bist an's Ende der Funktion, dort steht irgendwo:
PHP Code:
// TODO: Hier zusätzliche Initialisierung einfügen 
Datrunter fügst du dann folgendes ein:

PHP Code:
CButton *z_Radio1=(CButton *)GetDlgItem(IDC_RADIO1);
    
z_Radio1->SetCheck(1); 
IDC_RADIO1 ist die ID von deinem Radio Button. Das wars schon.

2. Du kannst in die Ressource ansicht gehen und dort einen Rechtsklick auf den Radio Button machen, und dann Ereignishandler hinzufügen. BN_Clicked.
Dann wirst du autoamtisch in die Funktion reinspringen. Dort kansnt du nun z.B. was reinschreiben, was gemacht werden soll, wenn der Radio Button angeklickt wird.
Ich würde dir aber empfehlen, vorher eine Funktion anzulegen und dort nur die Funktion aufzurufen.

Aber wie gesagt, ich würde dir eine Check Box empfehlen.
Da kannst du das auch über Controls machen und z.B. so abfragen:
PHP Code:
if (m_CheckBox.GetCheck() == BST_CHECKED){
    
            
m_func1();
    
    
    } else if ( 
m_CheckBox.GetCheck() == BST_UNCHECKED ) {

            
m_func2();
        


3. GUI
Also ich weiß nicht genau ob das so möglich ist wie du das machen willst. Wird auf jedenfall sehr schwer.
Soweit ich das verstanden habe willst du, dass falls das Spielefenster von Shayia nicht gefunden wurde, nur eine MessageBox kommt, und die ganze restliche GUI erst geladen wird, wenn Shaiya offen ist.

Ist imo nur sehr schwer zu realisieren. Weil da müsstest du auch im OnInitDialog() rumfuchteln, und das kann problematisch werden. Bei MFC wird das meiste vorgeneriert, und wenn du solche Abläufe ändern willst die schon vorgeneriert sind, kannst du dies nur mit sehr viel Programmieraufwand. Da du kein MFC pro bist, würde ich dir auch davon abraten.

Besser wäre es, wenn du zuerst die GUI laden lassen würdest, und dann je nach Funktion die dein Programm erfüllen soll, dir eine memberfunktion erstellst die nochmal den Handle checkt. Sprich ob das Fenster gefunden wurde.
Die Funktion kannst du dann einfach immer aufrufen bevor du eine andere Funktion aufrufst. So ist sichergestellt, das z.B. MemoryWrites nicht in's leere verlaufen.

btw.
PHP Code:
while(1)
{
MemoryProcessWrite(...)

Damit wirst du Probleme bekommen. Was du dort machst du schreibst einen Wert ununterbrochen in den Speicher. In einer Endlosschleife. Dadurch, dürfte dein Programm freezen.
Adroxxx is offline  
Thanks
2 Users
Old 07/21/2009, 00:24   #3
 
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
Erst mal Danke für deine Antwort. War schon fast am verzweifeln.^^
Hinterher erscheint mir eine Checkbox eigentlich auch sinnvoller. Ich glaube, ich probier es mal damit.

Quote:
Originally Posted by Adroxxx
Soweit ich das verstanden habe willst du, dass falls das Spielefenster von Shayia nicht gefunden wurde, nur eine MessageBox kommt, und die ganze restliche GUI erst geladen wird, wenn Shaiya offen ist.
Das hab ich schon geschafft. Mit OnInitDialog() musste ich da eigentlich ned rumfuchteln.^^
Eigentlich will ich, dass diese MsgBox auch bei "laufendem Betrieb" angezeigt wird, wenn Shaiya beendet wird. In AutoIT war das total simpel, ich hab einfach das GUI nur so lange erstellen lassen, wie das Fenster existiert und habe dann meine Mesagebox aufgerufen. Aber ich seh schon, das ist unter C++ wohl ned so ganz einfach .

Die While Schleife war eigentlich nur ein Bespiel. Wäre schon etwas doof, die in einem Script zu verwenden.^^
Frezee is offline  
Reply


Similar Threads Similar Threads
mangos + sd2 problem unter linux
02/10/2010 - WoW Private Server - 0 Replies
Ich versuche schon seit einigen tagen mangos 0.15 mit sd2 zu compilieren. leider hänge ich immer hier fest : (debian 4.0) Weiß jemand was ich falsch gemacht habe bzw. was mir fehlt ?
Pserver problem unter Windows 7
12/20/2009 - Metin2 Private Server - 2 Replies
Hey hab ein problem also wenn ich die Sura.exe anklick dann kommt zwar dieses fenster aber wenn ich dann den Knop da unten anklick passiert nichts,also es öffnet sich kein Metin2 fenster hier ist die Meldung die immer kommt http://250kb.de/u/091220/p/0fffc6e9.png hofe jemand hat das gleiche problem udn kann mir helfen Unter XP lief das alles ganz normal nur ich hab jetzt ein neuen PC und da ist halt Windows7 drauf
_MemoryPointerRead von Nomad unter XP Problem
10/02/2009 - AutoIt - 4 Replies
Hi, weiss zufällig jemand ob es Probleme mit der Funktion _MemoryPointerRead(..) von der Nomad.au3 unter win XP gibt? Bekomme leider keine Werte zurück bzw. sieht es so aus als berechnet er die neue Adresse mit den Offsets in der funktion falsch. Unter Win 7 und Vista läuft das Script einwandfrei. Danke schon mal im voraus. -->>> meine memoryGetBaseAddress() function war fehlerhaft. Mit Local $iv_Address = 0x400000 wird man auch unter xp ein bissle mehr glücklich...
58-60 in unter 2h
04/25/2007 - Quotes - 10 Replies
ging zuerst ums questen :B (19:00:03) g0d: von 58-60 braucht man höchstens 2sdt:D (19:00:11) g0d: ab 60 dauerts dann :D (19:00:41) Ping: ^^ (19:00:43) Ping: noe (19:00:44) Ping: nix 2 stunden (19:00:51) Ping: jetz untertreibst du (19:00:55) g0d: ne (19:00:58) Ping: das waeren ~ 250k EP/h



All times are GMT +1. The time now is 20:55.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.