Avatar billede yates Nybegynder
06. marts 2007 - 13:36 Der er 3 kommentarer

Controls under Windows - chekclist - ren C

Hej,

jeg vil gerne lave et static lib i ren C som kan give mig en checklist med N checkboxes (fx N=5 eller hvadsomhelst). Bare den helt basale funktionalitet, ikke noget fancy (behøver fx ikke være indrammet eller tilknyttet en group).

Mit problem er at oprette og navnlig accesse disse N checkboxes på simlest mulig vis. Jeg lave godt godt lave en eneste funktion i mit lib som i et for-loop kreerer N checkboxes ovenpå hinanden, men med mindre min caller selv leverer N handles kan jeg ikke finde ud af at accesse disse N checkboxes. Er der en løsning på dette?

Måske formulerer jeg mig uklart her?! Bare protestér så laver jeg en ommer.

Y.
Avatar billede bertelbrander Novice
06. marts 2007 - 19:45 #1
Opretter man dem ikke bare med CreateWindow og accesser dem med GetDlgItem?

Er der nogen grund til at det skal være C og ikke C++?
Avatar billede yates Nybegynder
07. marts 2007 - 08:33 #2
Hej BB,

jeg tror du har ret, men jeg vil gerne lige forstå lidt bedre.
Er følgende strategi en levedygtig løsning?
1: Jeg opretter N kontroller i en funktion der som return-argument giver handle til den første af disse.
2: Handle til den første Check omsætter jeg til et ID (lad os kalde den ID0) med GetDlgCtrlID (som er en integer)
3: Nu stoler jeg på at ID for den i'te kontrol oprettet under (1) har IDi=ID0+i (er dette garanteret?)
4. Nu bruger jeg GetDlgItem til at få et handle til den i'the kontrol oprettet under (1)
5. osv osv
Går dette, tror du? Særligt trin 3 ser suspekt ud da det beror på en antagelse om succession?!


Grunden til C og ikke C++ er mine ringe evner udi den svære kunst at programmere. C++ kan sikkert mange ting meget smartere, men ham der sidder ved tasterne har desværre moderate evner.
OK, til næste år holder jeg op med at ryge, drikke, spille poker, tager al opvask, støvsuger dagligt, og begynder at lære C++.

Y.
Avatar billede bertelbrander Novice
07. marts 2007 - 19:50 #3
Det letteste er at bruge ID for kontrollerne, i stedet for handle.
Du har selv fuld kontrol over ID, du bestemmer dem når du opretter kontrollerne.
Det letteste er at give dem fortløbende numre.

Så du kan lave en funktion til at oprette dem:
void CreateCheckList(HWND aParent, unsigned aFirstId, unsigned aNum)

Denne funktion giver så kontrollerne ID (aFirstId + 0) -> (aFirstId + aNum - 1);

Du kan derpå lave en funktion:
void SetCheck(HWND aParent, unsigned aId)

Og i denne bruge GetDlgItem til at få handlen på kotrollen.

Du kan ikke regne med værdien af en handle eller nogen form for sammenhæng mellem disse.
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