20. september 2001 - 09:22Der er
12 kommentarer og 1 løsning
Overførsel af argumenter ved vinduebeskeder
Jeg er løbet ind i et problem:
Jeg kan ikke få overført en streng som argument lParam til et vindue.
Jeg har oprettet et MDI-framework, hvor jeg har et Childvindue, som jeg har givet en IDM_PUTSTRING under hovedbeskeden WM_COMMAND. Når childvinduet modtager denne kommando sendes en msg til childvinuets listbox, med LB_ADDSTRING.
Problemet er så at jeg ikke kan få min streng til at komme med igennem msg sendingerne.
Jeg starter med følgende (Fra et hvilketsomhelst vindue):
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg har fundet ud af at problemet drejer sig om MDIvinduets lokale variable, dvs. handle til Listboxen. Compileren siger den ikke er initaliseret, selvom jeg ville mene det da den bliver initaliseret i WM_CREATE
Handle til listboksen er gemt i childvinduets private variable. Problemet er at childvinduet er et MDI vindue, hvilket betyder at de private variable er placeret i en struct for enden af en longpointer.
Ved WM_CREATE genereres denne og gemmes i \"pLogData\". Jeg kan sagtens anvende denne lige efter at jeg har genereret den, men ikke i min \"IDM_LB_ADDSTR\" rutine. Den siger at jeg refererer til uninitialized variable.
Jeg vil mene at WM_CREATE bliver kørt før IDM_LB_ADDSTR???
Her er kilden til structen og messagehandleren for logvinduet..
Tak for interessen by the way :)
//Struct defines typedef struct tagLOGDATA //Private data for Log { short cxClient ; short cyClient ; int iLinebuffer; HWND myLog; }LOGDATA, * PLOGDATA ;
Man skal huske at når man arbejder med MDIvinduer at hente hver instans\'es lokale variable frem når man skal bruge dem, da MDI anvender samme messagehandler for alle vinduer af en instans.
Som regel gemmes de lokale variable i en struct, som man kan indhente via en windowpointer som følger med hvert MDI vindue.
Det tænkte jeg ikke lige på, men følgende kommando hjalp en hel del på problemet.
myStruct = (MYSTRUCT) GetWindowLong (hwnd, 0) ;
:) Over and out
Synes godt om
Ny brugerNybegynder
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.