Focus - DialogBox unbeabsichtig bestättigen

Hallo Experten,

im Hintergrund läuft ein C-Programm,
das die Funktion MessageBox() (ein DialogBox) aufgerufen.

Mein Problem ist, wenn ich zum Bsp. mit Word irgendwas eintippen
und in dem Moment mein Hintergrund-Programm diesen DialogBox aufrufe,
bestättige ich damit UNBEABSICHTIG den OK-Button.

Kann man irgendwie den Focus von diesen BUTTON weg nehmen?
Sodaß ich diesen DialogBox nicht UNBEASICHTIG bestättigen kann.

Hi Mirrow,

wenn Du mit der Funktion MessageBox (bzw. AfxMessageBox) arbeitest, kannst Du, soviel ich weiß, nicht verhindern, daß einer der Buttons den Focus hat und somit ausversehen geschlossen werden kann.

Lösungsvorschlag:
Bau Dir einen kleinen Dialog, in dem Du Deine Nachricht anzeigst, und sorg dafür, daß es keinen Standardbutton gibt und die Nachricht IDOK abgefangen wird.

Wenn Du genauere Infos brauchst, laß es mich wissen.

Gruß
Uwe

Hi Uwe,

Mit MB_DEFBUTTON3 habe ich den Focus auf HELP Button gesetzt,
sodass der User nicht unbeabsichtlich auf Button YES oder NO drücken können.
MessageBox(hWnd,…,…, MB_DEFBUTTON3 | MB_YESNO | MB_HELP);

Jetzt weiß ich aber nicht, wie ich diese HELP-Button auswerten sollen.
Der User fragt sich natürlich, was diese diese Hilfe-Butotn sein sollte?
Da es sich nichts tut, wenn man drauf klicken.

Vielleicht kannst du mir ja weiter helfen.

Hi mirrow,

sorry, hat ein wenig länger gedauert. War etwas im Stress…

Wenn Du auf den Help-Button klickst, sieht es so aus, als würde erst mal gar nichts passieren. Dem ist aber nicht so: Im Hintergrund wird die Nachricht WM_HELPINFO and das Fenster geschickt, das durch hWnd festgelget ist. Um auf den Help-Button zu reagieren, mußt Du also in diesem Fenster die WM_HELPINFO-Nachricht abfangen. Dort könntest Du z.B. eine weiter Message-Box anzeigen, in der Du die genauere Bedeutung der Nachricht erklärst.

Wenn Dir das zu kompliziert ist, wie wär’s denn damit:

CString strText= "Das Ereignis ist eingetreten.\nKlicken Sie auf OK, um diese Nachricht zu bestätigen";
CString strCaption= "Nachricht";
INT nResult;
INT bFirst=TRUE;
do
{
 nResult=::MessageBox(hWnd, strText, strCaption, MB\_ICONINFORMATION | MB\_OKCANCEL | MB\_DEFBUTTON2);
 if (bFirst)
 {
 strText+="\n\nHinweis: Abbrechen bringt gar nichts :wink:";
 bFirst=FALSE;
 }
} while (nResult!=IDOK);

Auf diese Weise zwingst Du den Anwender, auf OK zu klicken. Bei „Enter“ würde einfach ein etwas erweiterter Text angezeigt.

Vielleicht reicht es Dir auf diese Art? Wenn nicht, mußt Du eben doch die WM_HELPINFO abfangen oder einen kleinen Dialog programmieren.

Gruß
Uwe