Avatar billede nubi19 Nybegynder
29. juli 2002 - 12:31 Der er 20 kommentarer og
1 løsning

MessageBox always on top & Setfocus, hvordan ?

Jeg bruger Borland Builder 4.0 og vil gerne lave en MessageBox som så popper op over alle andre vinduer, og bliver der. Dvs. den skal have focus & sættes til always on top. Selve koden til de ting har jeg, men hvordan får jeg et handle til MessageBoxen mens den kører ?
Jeg har prøvet at lave messagebox'en, og så fyre koden af lige efter, men den kode bliver åbenbart ikke eksekveret før messagebox'en er lukket igen.
Koden så sådan her ud:

void MsgBox(char* sztext)
{
MessageBox(NULL, sztext, "Information", MB_OK);
if (FindWindow(NULL, "Information") != NULL)
{
MessageBox(NULL, "Det duer", "blah", MB_OK);
}
}

Den sidste messagebox kommer aldrig frem, og altså må jeg jo udlede at den ikke får noget handle til den første. Er dette ikke korrekt ?

Og hvordan gør jeg så ?

PS. Har desværre ikke ret mange point, beklager.
Avatar billede jpk Nybegynder
29. juli 2002 - 12:39 #1
Message boxen er jo modal og dit programmer fortsætter ikke udførelsen før den er lukket!
Du skal lave en modeless dialog istedet...
Avatar billede jpk Nybegynder
29. juli 2002 - 12:40 #2
Men hvorfor vil du egentlig bruge FindWindow til få fat i et handle..?
Avatar billede nubi19 Nybegynder
29. juli 2002 - 13:04 #3
Ehm er der andre metoder ?
Og hvordan laver jeg en modeless dialog ?
Jeg har prøvet med MessageDlg, men så opretter den jo boxen "indenfor" mit program, og det ligger typisk i systray, og så kan jeg da slet ikke se hvordan jeg skulle få den always on top osv. ?
Avatar billede jpk Nybegynder
29. juli 2002 - 13:10 #4
En message box er netop beregnet til at vise en besked og evt. lade brugeren foretage et valg. Hverken mere eller mindre!
Er det det du vil..?
Avatar billede jpk Nybegynder
29. juli 2002 - 13:16 #5
Hvis du vil lave en modeless dialog, kan du bruge CreateDialog
Avatar billede nubi19 Nybegynder
29. juli 2002 - 13:47 #6
Jeg vil informere brugeren om at klokken nu er X, fordi brugeren selv via mit program, har bedt om en påmindelse.
Denne påmindelse skal, såfremt man kører et fullscreen program, have focus så det program minimeres, f.eks. Counter-Strike eller Warcraft III (som jeg selv spiller af og til). Windows sørger selv for at minimere såfremt programmet får fokus (så vidt jeg husker).
Jeg prøver lige at lege lidt med CreateDialog.
Avatar billede nubi19 Nybegynder
29. juli 2002 - 13:50 #7
Hmmm CreateDialog virker lidt mystisk på mig, det virker som om den ligesom MessageDlg opretter vinduet indeni Programmet, dvs. sådan at der ikke dukker en ny op nede i taskbaren (som jeg jo meget gerne vil have at der gør).
Avatar billede jpk Nybegynder
29. juli 2002 - 13:55 #8
Men hvorfor har du brug for et handle til message boxen/dialogen?
Avatar billede jpk Nybegynder
29. juli 2002 - 14:01 #9
Du kan evt prøve at lave en messagebox med attributten MB_SYSTEMMODAL

Lige en bemærkning dog! Sådanne programmer er MEGET irriterende for spiludviklere, da fullscreen, exclusive mode netop er beregnet til at der IKKE skal forstyrres fra andre programmer...
Avatar billede nubi19 Nybegynder
30. juli 2002 - 11:07 #10
Hmmm jamen ideen i at man bliver mindet om at klokken er X, er jo ligesom væk, hvis det kun virker i nogle situationer.
Men jo f.eks. Half-life mister lyden, hvis det bliver minimeret.
Og grunden til at jeg vil have et handle, er at så kan jeg give den fokus & sætte den til always-on-top, via følgende:
SetFocus(Handle);
SetWindowPos(Handle, TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
Avatar billede jpk Nybegynder
30. juli 2002 - 11:15 #11
SWP_NOMOVE + SWP_NOSIZE ???
mener du ikke SWP_NOMOVE | SWP_NOSIZE ?
Avatar billede jpk Nybegynder
30. juli 2002 - 11:21 #12
Du kan jo også kalde Messagebox med MB_TOPMOST...
Avatar billede nubi19 Nybegynder
30. juli 2002 - 11:32 #13
Hmmm i Borland duer det da for mig kun med et + tegn ??
Har prøvet systemmodal & topmost, samt setforeground, det virker ikke helt som det skal, idet den bare popper op midt i Half-Life, altså HL minimeres ikke :(

Kan man lave noget minimer alle, eller noget ?
Avatar billede nubi19 Nybegynder
30. juli 2002 - 11:33 #14
Hmmm har lige tjekket, | duer også til den der, mystisk.
Avatar billede nubi19 Nybegynder
30. juli 2002 - 12:25 #15
Der er ikke en måde hvorpå jeg kan minimere et program der kører såfremt det er fullscreen ?
Avatar billede jpk Nybegynder
30. juli 2002 - 12:34 #16
Det kommer nok an på programmet...
Hvorfor vil du minimere programmet?
Avatar billede nubi19 Nybegynder
30. juli 2002 - 13:22 #17
Fordi det er lidt ufedt at spille f.eks. CS med et vindue midt i sigtekornet, eller faktisk fylder vinduet jo en del mere.
Avatar billede jpk Nybegynder
30. juli 2002 - 13:25 #18
Det er da lige så ufedt lige at skulle til at skyde og så bliver spillet minimeret..!
Avatar billede nubi19 Nybegynder
30. juli 2002 - 14:12 #19
Nåja, men hvis man nu skulle noget vigtigt, så er det vel godt nok at spillet bliver minimeret.
Altså man sætter jo ikke den timer der for sjov, og den popper aldrig op af sig selv, så jeg synes da det er smart nok, men du er uenig kan jeg forstå ?
Avatar billede jpk Nybegynder
30. juli 2002 - 14:24 #20
Jamen kan du ikke se det?
Hvis du skal noget vigtigt er det da absolut lige meget om der kommer et vindue midt i sigtekornet eller om programmet bliver minimeret..!
Avatar billede nubi19 Nybegynder
30. juli 2002 - 14:47 #21
Jeg synes bare det ser så ufedt ud at den dukker op midt i, men ok jeg lader det være som det er.
Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester