/ 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
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Radio button
Fra : Søren Jensen


Dato : 27-10-03 17:55

jeg skal bare kunne disablede og enablede en radio buttom inde fra
programmet.
det er nok noget med BM_SETCHECK, men jeg kan ikke lige se hvordan,
der findes sikkert en nem løsning, jeg kan bare ikke finde den.

på forhånd tak.
Søren



 
 
Bertel Brander (27-10-2003)
Kommentar
Fra : Bertel Brander


Dato : 27-10-03 20:38

Søren Jensen wrote:
> jeg skal bare kunne disablede og enablede en radio buttom inde fra
> programmet.
> det er nok noget med BM_SETCHECK, men jeg kan ikke lige se hvordan,
> der findes sikkert en nem løsning, jeg kan bare ikke finde den.
>

Du kan bruge BM_SETCHECK hvis din radio-button har enten BS_3STATE
eller BS_AUTO3STATE style.

Du kan sende beskeden vha. SendDlgItemMessage(...).

Ellers kan du bruge SetWindowLong(...) til at sætte/fjerne WS_DISABLED.

Hvilken kompiler?

/b


Søren Jensen (27-10-2003)
Kommentar
Fra : Søren Jensen


Dato : 27-10-03 22:05

Visual C++

jeg kan bare ikke se hvordan BM_SETCHECK bruges, jeg mener at der skulle
være en "identifier", men jeg er nok forkert på den, det er nok mere et
grundlæggende problem. Det skal lige siges at jeg kun har programmeret
Visual i 2 måneder.

Tak Søren

PS. Hvis der er nogen der kender en side med små eksempler, må de gerne
smide et link. Tak



Bertel Brander (28-10-2003)
Kommentar
Fra : Bertel Brander


Dato : 28-10-03 00:22

Søren Jensen wrote:

> Visual C++
>
> jeg kan bare ikke se hvordan BM_SETCHECK bruges, jeg mener at der skulle
> være en "identifier", men jeg er nok forkert på den, det er nok mere et
> grundlæggende problem. Det skal lige siges at jeg kun har programmeret
> Visual i 2 måneder.
>
> Tak Søren
>
> PS. Hvis der er nogen der kender en side med små eksempler, må de gerne
> smide et link. Tak
>

Hvis du bruger MFC, er din radio button en CButton. Du bruger
GetDlgItem(...) til at få fat i din button, f.ex:

CButton *RadioButton = (CButton *)GetDlgItem(IDC_RADIO1);

IDC_RADIO1 er ID'en på din button. Du kan finde den ved at højre
klikke på knappen i resource editoren (eller ved at kikke i .rc filen).
Derefter checker du om du nu også fik fat i knappen:

ASSERT(RadioButton);

Så kan du disable og enable radio button'en:

if(Enable)
RadioButton->SetCheck(1);
else
RadioButton->SetCheck(2);

Det forudsætter at den linie i .rc-filen der definerer radio button'en
ser ca sådan ud:

RADIOBUTTON "Radio1",IDC_RADIO1,72,145,116,16, BS_3STATE, 0

Jeg kan ikke se hvordan man får sat "BS_3STATE" vha. resource editoren.
Så du er nødt til at åbne .rc filen som en text fil.

/b


Kasper Bo Larsen (29-10-2003)
Kommentar
Fra : Kasper Bo Larsen


Dato : 29-10-03 08:31

Nu er jeg vokset op med Borland C++ produkter så MFC er ikke lige mit
speciale, men jeg mener at have hørt at ASSERT macro'en kun "ses"
under _DEBUG så hvis du ønsker at være helt sikker skal koden vist se
sådan ud :

CButton *RadioButton = (CButton *)GetDlgItem(IDC_RADIO1);
if ( RadioButton)
{
if(Enable)
RadioButton->SetCheck(1);
else
RadioButton->SetCheck(2);
}

Med venlig hilsen

Kasper

Bertel Brander <bertel@post4.tele.dk> wrote in message news:<3f9da7c3$0$29358$edfadb0f@dread15.news.tele.dk>...
> Søren Jensen wrote:
>
> Hvis du bruger MFC, er din radio button en CButton. Du bruger
> GetDlgItem(...) til at få fat i din button, f.ex:
>
> CButton *RadioButton = (CButton *)GetDlgItem(IDC_RADIO1);
>
> IDC_RADIO1 er ID'en på din button. Du kan finde den ved at højre
> klikke på knappen i resource editoren (eller ved at kikke i .rc filen).
> Derefter checker du om du nu også fik fat i knappen:
>
> ASSERT(RadioButton);
>
> Så kan du disable og enable radio button'en:
>
> if(Enable)
> RadioButton->SetCheck(1);
> else
> RadioButton->SetCheck(2);

Bertel Brander (29-10-2003)
Kommentar
Fra : Bertel Brander


Dato : 29-10-03 20:46

Kasper Bo Larsen wrote:
> Nu er jeg vokset op med Borland C++ produkter så MFC er ikke lige mit
> speciale, men jeg mener at have hørt at ASSERT macro'en kun "ses"
> under _DEBUG så hvis du ønsker at være helt sikker skal koden vist se
> sådan ud :
>
> CButton *RadioButton = (CButton *)GetDlgItem(IDC_RADIO1);
> if ( RadioButton)
> {
> if(Enable)
> RadioButton->SetCheck(1);
> else
> RadioButton->SetCheck(2);
> }
>

Jeg tror at grunden til at man bruger ASSERT(...), som ganske rigtigt
kun checker i debug builds, er, at hvis man kan få fat i radiobutton'en
i debug builds kan man (sansynligvis) også i release builds, så der er
ingen grund til at checke i release builds.


/b


Byrial Jensen (29-10-2003)
Kommentar
Fra : Byrial Jensen


Dato : 29-10-03 17:34

Kasper Bo Larsen wrote:
> Nu er jeg vokset op med Borland C++ produkter så MFC er ikke lige mit
> speciale, men jeg mener at have hørt at ASSERT macro'en kun "ses"
> under _DEBUG så hvis du ønsker at være helt sikker skal koden vist se
> sådan ud :

Man kunne også bruge C's standardiserede assert-makro som er defineret i
standard-headerfilen <assert.h>. Så bliver programmet mere portabelt, og
man behøver ikke beskæftige sig med forskellige produkters varianter.


Bertel Brander (29-10-2003)
Kommentar
Fra : Bertel Brander


Dato : 29-10-03 23:10

Byrial Jensen wrote:
> Kasper Bo Larsen wrote:
>
>> Nu er jeg vokset op med Borland C++ produkter så MFC er ikke lige mit
>> speciale, men jeg mener at have hørt at ASSERT macro'en kun "ses"
>> under _DEBUG så hvis du ønsker at være helt sikker skal koden vist se
>> sådan ud :
>
>
> Man kunne også bruge C's standardiserede assert-makro som er defineret i
> standard-headerfilen <assert.h>. Så bliver programmet mere portabelt, og
> man behøver ikke beskæftige sig med forskellige produkters varianter.
>

Man kan jo også anlægge den betragtning at hvis man alligevel laver MFC
programmer på Windows platformen, er det lidt ligegyldigt om man bruger
den standardiserede metode eller Microsoft's variant. Koden kan
alligevel ikke porteres til ret meget andet.

Skulle man ønsker at portere til en anden kompiler kan man blot lave en
define i stil med:

#define ASSERT(x) assert(x)

eller:

#define ASSERT(x) std::assert(x)

eller en template funktion med ca. samme effekt.

/b


Per Abrahamsen (30-10-2003)
Kommentar
Fra : Per Abrahamsen


Dato : 30-10-03 09:54

Bertel Brander <bertel@post4.tele.dk> writes:

> Man kan jo også anlægge den betragtning at hvis man alligevel laver MFC
> programmer på Windows platformen, er det lidt ligegyldigt om man bruger
> den standardiserede metode eller Microsoft's variant.

Jeg syntes generelt det er en god vane at bruge standard-fasciliteter
når de er tilgængelige, også selvom man er afhængig af andre
ikke-standard biblioteker.

Der gør livet lidt lettere hvis man engang skal programmere til andre
omgivelser.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste