/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Brug af WM_COMMAND o.a.
Fra : Søren Badstue


Dato : 15-10-05 19:04

Hej Gruppe,

Jeg sidder og lærer mig selv lidt C++ programmering i visual studio 6.0.
Jeg
har fundet ud af at hvis jeg har et menupunkt med en tilknyttet OnCommand
funktion, kan jeg kontrollere om denne er blevet trykket på med
PeekMessage
WM_COMMAND mens jeg er i en anden funktion, således:

PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
if(msg.message == WM_COMMAND && LOWORD(msg.wParam)== ID_VIEW_SETTINGS)
{
MessageBox("TEST");
}

Men hvis jeg har en toolbar knap med samme OnCommand funktion bliver det
ikke fanget hvis jeg trykker på den. Hvad gør jeg forkert?
Hvordan kan jeg få besked uanset om jeg vælger at trykke på menuen eller

toolbar knappen for at opnå den samme ting?

På forhånd tak,

--
Søren B.


----------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12751 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent gratis SPAMfighter her: www.spamfighter.dk



 
 
Kent Friis (15-10-2005)
Kommentar
Fra : Kent Friis


Dato : 15-10-05 19:17

Den Sat, 15 Oct 2005 20:04:07 +0200 skrev Søren Badstue:
> Hej Gruppe,
>
> Jeg sidder og lærer mig selv lidt C++ programmering i visual studio 6.0.
> Jeg
> har fundet ud af at hvis jeg har et menupunkt med en tilknyttet OnCommand
> funktion, kan jeg kontrollere om denne er blevet trykket på med
> PeekMessage
> WM_COMMAND mens jeg er i en anden funktion, således:
>
> PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
> if(msg.message == WM_COMMAND && LOWORD(msg.wParam)== ID_VIEW_SETTINGS)
> {
> MessageBox("TEST");
> }
>
> Men hvis jeg har en toolbar knap med samme OnCommand funktion bliver det
> ikke fanget hvis jeg trykker på den. Hvad gør jeg forkert?
> Hvordan kan jeg få besked uanset om jeg vælger at trykke på menuen eller
> på
> toolbar knappen for at opnå den samme ting?

Jeg ved ikke om der gælder det samme ved Win32-programmering, men
i .NET er det ikke toolbar-knappen der får event'en, men toolbar'en.

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Søren Badstue (15-10-2005)
Kommentar
Fra : Søren Badstue


Dato : 15-10-05 19:29


"Kent Friis" <nospam@nospam.invalid> skrev i en meddelelse
news:4351478b$0$18640$14726298@news.sunsite.dk...
>
> Jeg ved ikke om der gælder det samme ved Win32-programmering, men
> i .NET er det ikke toolbar-knappen der får event'en, men toolbar'en.
>

Okay, Dvs. at jeg i stedet for WM_COMMAND muligvis skal bruge en eller
anden
ting som hedder noget med TB_... eller TBN..... ?
Har prøvet TB_PRESSBUTTON, men det virker heller ikke

--
SB


----------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12751 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent gratis SPAMfighter her: www.spamfighter.dk



Kent Friis (15-10-2005)
Kommentar
Fra : Kent Friis


Dato : 15-10-05 19:36

Den Sat, 15 Oct 2005 20:29:19 +0200 skrev Søren Badstue:
>
> "Kent Friis" <nospam@nospam.invalid> skrev i en meddelelse
> news:4351478b$0$18640$14726298@news.sunsite.dk...
>>
>> Jeg ved ikke om der gælder det samme ved Win32-programmering, men
>> i .NET er det ikke toolbar-knappen der får event'en, men toolbar'en.
>>
>
> Okay, Dvs. at jeg i stedet for WM_COMMAND muligvis skal bruge en eller
> anden
> ting som hedder noget med TB_... eller TBN..... ?
> Har prøvet TB_PRESSBUTTON, men det virker heller ikke

Jeg har ingen anelse om hvad event-typen hedder i Win32, det var
mere id'en på kontrol'en jeg tænkte på.

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Søren Badstue (15-10-2005)
Kommentar
Fra : Søren Badstue


Dato : 15-10-05 19:41


"Kent Friis" <nospam@nospam.invalid> skrev i en meddelelse
news:43514c17$0$25880$14726298@news.sunsite.dk...
>>
>> Okay, Dvs. at jeg i stedet for WM_COMMAND muligvis skal bruge en eller
>> anden
>> ting som hedder noget med TB_... eller TBN..... ?
>> Har prøvet TB_PRESSBUTTON, men det virker heller ikke
>
> Jeg har ingen anelse om hvad event-typen hedder i Win32, det var
> mere id'en på kontrol'en jeg tænkte på.
>

Ok, takker for inputtet, det vil jeg prøve at rode lidt mere med

--
SB



Bertel Brander (15-10-2005)
Kommentar
Fra : Bertel Brander


Dato : 15-10-05 20:47

Søren Badstue wrote:
> Hej Gruppe,
>
> Jeg sidder og lærer mig selv lidt C++ programmering i visual studio 6.0.
> Jeg
> har fundet ud af at hvis jeg har et menupunkt med en tilknyttet OnCommand
> funktion, kan jeg kontrollere om denne er blevet trykket på med
> PeekMessage
> WM_COMMAND mens jeg er i en anden funktion, således:
>
> PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
> if(msg.message == WM_COMMAND && LOWORD(msg.wParam)== ID_VIEW_SETTINGS)
> {
> MessageBox("TEST");
> }
>
> Men hvis jeg har en toolbar knap med samme OnCommand funktion bliver det
> ikke fanget hvis jeg trykker på den. Hvad gør jeg forkert?

Det burde virke med toolbars også, se f.ex:
http://home20.inet.tele.dk/midgaard/snip/simplewin3.html

Måske skal du poste lidt mere kode.

Det er ikke helt klart for mig om du bruger MFC, så vidt jeg
kan se er den version af MessageBox en MFC version. Med MFC
vil man normalt ikke lave PeekMessage.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Søren Badstue (15-10-2005)
Kommentar
Fra : Søren Badstue


Dato : 15-10-05 21:19


"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:43515cc0$0$168$edfadb0f@dread11.news.tele.dk...
>
> Det burde virke med toolbars også, se f.ex:
> http://home20.inet.tele.dk/midgaard/snip/simplewin3.html
>
> Måske skal du poste lidt mere kode.
>
> Det er ikke helt klart for mig om du bruger MFC, så vidt jeg
> kan se er den version af MessageBox en MFC version. Med MFC
> vil man normalt ikke lave PeekMessage.
>

Hmm... Okay, jeg er ikke så dygtig til at det her endnu, men jeg skal
prøve
at komme med lidt mere info
Til at starte med kan jeg jo lige sige at stort set alt hvad jeg kender
til
Windowsprogrammering har jeg læst mig frem til i "Teach Yourself Visual
C++
6.0 in 21 days".

Ja, jeg bruger MFC via MFC AppWizard. Jeg har alvet et program der læser
nogle punkter fra en fil, scalerer dem efter skærmstørrelsen, og så i et
roligt tempo plotter dem på skærmen. Jeg ville så gerne have mulighed for
at
stoppe plotningen midletidigt for senere at kunne genoptage den. Til det
lavede jeg et menupunkt med ID: "ID_SHOW_PAUSE" og en Toolbar knap med
samme
ID, begge med samme OnCommand-funktion.
Derudover har jeg ligeledes lavet et menupunkt og en knap med ID:
"ID_SHOW_PLAY".
Det der så er meningen er at jeg, i den funktion der plotter mine punkter,
tjekker om der kommer en message om at der er blevet klikket en ef de to
Pause-muligheder. Hvis der er det, skal den bare køre i en while(1) løkke
indtil der modtages en message om at der er blevet klikket på en af
play-mulighederne.

Alt dette ser således ud i min kode:

PeekMessage( &msg, 0, 0, 0, PM_REMOVE );

if(msg.message== WM_COMMAND &&
LOWORD(msg.wParam)== ID_SHOW_PAUSE)
{
while (1)
{
PeekMessage( &msg, NULL, 0, 0, PM_REMOVE );

if(msg.message== WM_COMMAND && LOWORD(msg.wParam)==
ID_SHOW_PLAY)
break;
else
DispatchMessage(&msg);
}
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Dette virker hvis jeg bruger Menu-kommandoerne, men ikke hvis jeg bruger
ToolBar-kommandoerne.

Jeg har ved lidt søgning på nettet fundet ud af at der måske skal være
noget
med ToolBar Control Class et sted, men ved en søgning i mit projet er der
kun en CToolBar i MainFrame header filen.

Jeg håber det var lidt bedre infomationer, ellers må du endelig sige til,

prøver jeg at finde lidt mere.


--
Søren


----------------------------------------
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12752 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent gratis SPAMfighter her: www.spamfighter.dk



Bertel Brander (15-10-2005)
Kommentar
Fra : Bertel Brander


Dato : 15-10-05 22:43

Søren Badstue wrote:
> Jeg håber det var lidt bedre infomationer, ellers må du endelig sige til,
> så
> prøver jeg at finde lidt mere.

Det hedder CToolBar i MFC.

Det er ikke nogen god idé at have en længerevarende loop
i en windows app, det er bedre at bruge en timer.

I din .rc fil har sansynligvis en linie i stil med:
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15

Under den defineres ID for hver knap på toolbaren, check om de
er rigtige. De står i samme rækkefølge som på baren.

Men det er muligt at du ikke kan få beskeder fra toolbaren
når du står i din while loop, toolbaren er et andet Window.

Prøv at checke om du kan få beskeder fra toolbaren hvis
ikke programmet kører i loopen.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407950
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste