Ein paar fragen ;-)
-
Sorry, hatte den Eindruck, hier fehlen massiv Grundlagen.
z.B. zu Frage 1 (IDC_TEXT1 bis IDC_TEXT9 nacheinander angelegt):void CStaticTextDlg::OnButton_StaticText_Hochschalten() { static BYTE zahl = 0; const BYTE ZAHLMAX = 9; // Anzahl STATICs minus 1 for( int i = 0; i<=ZAHLMAX; ++i) GetDlgItem(IDC_TEXT1 + i)->EnableWindow(FALSE); GetDlgItem(IDC_TEXT1 + zahl)->EnableWindow(); zahl++; if(zahl > ZAHLMAX) zahl = 0; }Frage2 ist unklar formuliert. Wenn ich eine Funktion haben will, die auf einen Button reagiert, dann erzeuge ich mir eine Funktion OnButton...(...).
-
eine frage hätte ich noch zum verwenden von GetDlgItem meine funktion ist in der klasse Quiz drin kann man von dortaus aufs Main windows(oder wie das auch heisst zugreifen?). Irgendwie hab ich schon überlegt ob man der funktion irgendwie nen Pointer oder Handle übergeben muss das habe ich aber noch nie gemacht.
und zum zweiten problem kenn ich halt nur folgende möglichkeit
void COneMillionDlg::OnButton1() { if(!m_Quiz.IsAnswerCorrect())m_Quiz.NextQuestion; m_Quiz.YouLose() } void COneMillionDlg::OnButton2() { if(!m_Quiz.IsAnswerCorrect())m_Quiz.NextQuestion; m_Quiz.YouLose() } void COneMillionDlg::OnButton3() { if(!m_Quiz.IsAnswerCorrect())m_Quiz.NextQuestion; m_Quiz.YouLose() } void COneMillionDlg::OnButton4() { if(!m_Quiz.IsAnswerCorrect())m_Quiz.NextQuestion; m_Quiz.YouLose() }so kenne ich das bisher meine frage ist nun ob es auch eine möglichkeit folgender art gibt
PSEUDOCODE void COneMillionDlg::OnButtonsClicked() { --welcher button wurde gedrückt --rufe funktion is answercorrect mit parameter(welcher button gedrückt wurde) auf behandle richtig und falsche antwort }
-
Mach das z.B. so:
void COneMillionDlg::OnButton1(){Button(1);} void COneMillionDlg::OnButton2(){Button(2);} void COneMillionDlg::OnButton3(){Button(3);} void COneMillionDlg::OnButton4(){Button(4);} void COneMillionDlg::Button(int i) { if(!m_Quiz.IsAnswerCorrect(i)) m_Quiz.ShowQuestion(i+1); m_Quiz.YouLose() }Wie man klassenübergreifend zugreift, siehst Du z.B. hier (Doc und View):
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel7.htmvoid CTest_View::OnDraw(CDC* pDC) { CTest_Doc * pDoc = GetDocument(); // Zeiger auf andere Klasse beschaffen pDC->MoveTo(pDoc->ErstesQuadrat); // Zeiger_auf_fremde_Klasse->Member verwenden pDC->LineTo(pDoc->ErstesQuadrat.x + pDoc->Laenge, pDoc->ErstesQuadrat.y); //...
-
sorry aber irgendwie klappt das nicht nicht ganz.
hätte vielleicht dazu sagen sollen das ich eine dialogbasierte anwendung habe
-
Was kommt für eine Fehlermeldung?! WO ist dein Problem?!
-
ich bekomme es nicht hin von meiner Klasse auf IDC_TEXT1 zuzugreifen
Fehlermeldungen gabs verschiedene je nachdem was ich probiert habe.
z.b. habe ich dann einfach folgendes versucht
void Quiz::SetNextQuizState(HWND hwnd) { . . . GetDlgItem(hwnd, IDC_TEXT1)->EnableWindow();das endet dann in
error C2039: 'EnableWindow' : is not a member of 'HWND__'
-
Du benutzt die API-Version von GetDlgItem, offensichtlich ist Quiz nicht von CWnd abgeleitet. Du könntest aber z.B.
CWnd::FromHandle( GetDlgItem(hwnd, IDC_TEXT1) )->EnableWindow();benutzen.
-
erstmal @conan danke das funktioniert jetzt
eins habe ich aber noch folgendes funktioniert
CWnd::FromHandle( GetDlgItem(hwnd, IDC_TEXT1) )->EnableWindow();dies aber nicht
int a = 3;
CWnd::FromHandle( GetDlgItem(hwnd, IDC_TEXT1 + a) )->EnableWindow();eigentlich doch genau nach Erhard Henkes vorschlag der Kompiler meckert auch nicht nur beim aufruf des programmes gibts nen absturz
-
Die Frage ist, was du denkst

Ich gehe davon aus, das du der Meinung bist das wenn du
IDC_TEXT1 + aschreibst, IDC_TEXT13 daraus kommt? oder IDC_TEXT4 ?! Beides nicht.
IDC_TEXT1 ist ja ein #define in der resource.h. Nun wird durch den Preprozessor aber IDC_TEXT1 durch den definierten Wert ersetzt. K. Gehen wir bsw davon aus das folgendes in der resource.h steht:
#define IDC_TEXT1 105Dann würde aus:
CWnd::FromHandle(GetDlgItem(hWnd, IDC_TEXT1+a))->EnableWindow();CWnd::FromHandle(GetDlgItem(hWnd, 105+a))->EnableWindow();d.h. würd dir GetDlgItem einen Handle des ctrls mit der ID 105+a zurückliefern.
-
Wenn Du die ID im Ressourceneditor erstellst oder eingibst, ist nicht gewährleistet, das die tatsächlichen Werte die dahinter stehen, in einer Reihenfolge angelegt werden. Das müsstest Du von Hand erledigen IMHO in der ressource.h.
OT: wie stehts um den Ticker ?

Edit: Ah, dass war knapp

-
@(D)Evil und connan
Da habe ich was verhunzt, das die resource da nicht hintereinander kommen.
Peinlich solch ein schusselfehler zu begehen
@connan am Newsticker wird weiterhin gebastelt
momentan versuche ich krampfhaft das hauptfenster in den Tray zu schicken.
Aber bisher ohne erfolg
egal nach welchem tutorial ich vorgehe es gibt keine fehlermeldungen sonder dass programm startet einfach nicht
-
sorry aber ich glaub ich drehe durch
void Quiz::SetNextQuizState(HWND hwnd) { CWnd::FromHandle( GetDlgItem(hwnd, IDC_TEXT1 + QuizState) )->EnableWindow(FALSE); QuizState++; CWnd::FromHandle( GetDlgItem(hwnd, IDC_TEXT1 + QuizState) )->EnableWindow(); return; }IDC_TEXT1 ist bei mir jetzt
#define IDC_TEXT1 1007also müsste beim ersten durchlauf der schleife ja reintheoretisch
1007 + 0 deaktiviert werden
und 1007 + 1 namentlich IDC_TEXT2 aktiviert werden lustigerweise
wird aber IDC_TEXT6 oder als resource 1012 aktiviert
beim nächsten aufruf wird dann auch nicht IDC_TEXT7 (1013) sondern IDC_TEXT5(1011) aktiviert
-
Richtig lustig hier.
-
void Quiz::SetNextQuizState(HWND hwnd) { CWnd::FromHandle(GetDlgItem(hwnd, IDC_TEXT1 + QuizState))->EnableWindow(FALSE); nQuizState++; CWnd::FromHandle(GetDlgItem(hwnd, IDC_TEXT1 + QuizState))->EnableWindow(); }Das hat jawohl wenig mit einer schleife zu tun...
-
@(D)Evil ne schleife die gibts da auch nicht währe ja auch sinnlos
jedesmal wenn eine eine Frage richtig beantwortet wird soll diese Funktion den Punkte stand erhöhen
und es passiert ja gemau das was sie eigentlich machen soll der vorhergehende text wird abgeschaltet der nächste ein. nur halt durcheinander und verkehrt herum.
-
Ach zeig einfach mal deine verdammte resource.h

-
Null Problemo
//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by OneMillion.rc // #define IDM_ABOUTBOX 0x0010 #define IDD_ABOUTBOX 100 #define IDS_ABOUTBOX 101 #define IDD_ONEMILLION_DIALOG 102 #define IDR_MAINFRAME 128 #define IDC_Frage 1001 #define IDC_ANTW_A 1002 #define IDC_ANTW_B 1003 #define IDC_ANTW_C 1004 #define IDC_ANTW_D 1005 #define IDC_TEXT0 1006 #define IDC_TEXT1 1007 #define IDC_TEXT2 1008 #define IDC_TEXT3 1009 #define IDC_TEXT4 1010 #define IDC_TEXT5 1011 #define IDC_TEXT6 1012 #define IDC_TEXT7 1013 #define IDC_TEXT8 1014 #define IDC_START 1015 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 129 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1016 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
-
Hau mal bidde einen Breakpoint nach nQuizState++; rein und guck mal was die Variable fürn Value hat...
-
das haut genau hin nach dem ersten aufruf habe ich 1 nach dem zweiten aufruf 2 usw.
-
gut problem erledigt habe zwar ein rebuild gemacht hatte aber vergessen mal ein clean durchzuführen. nach dem Clean funktioniert es perfekt