c ++ - Sådan registreres en Windows klasse og Find vinduet ved hjælp af registrerede klasse

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg laver en MFC-applikation, som vil blive lanceret på klik på Explorer Context (Rightclick) menuen.


Men jeg skal kun starte en enkelt forekomst af ansøgningen. For det skal jeg bruge FindWindow og AfxRegisterClass [3] [4]


Jeg forsøgte at tilmelde klassen i min MFC-app som nedenfor:


BOOL CNDSClientDlg::InitInstance()
{
    //Register Window Updated on 16th Nov 2010, @Subhen
    // Register our unique class name that we wish to use
    WNDCLASS wndcls;
    memset(&wndcls, 0, sizeof(WNDCLASS));
    //Class name for using FindWindow later
    wndcls.lpszClassName = \_T("NDSApp");
    // Register new class and exit if it fails

    if(!AfxRegisterClass(&wndcls)) // [C]

    {
        return FALSE;
    }
}


og kaldte metoden i konstruktøren af ​​MFC-klassen. Jeg bekræftede at klassen bliver registreret, mens jeg starter ansøgningen.


Nu i min shell Extension forsøger jeg at finde den klasse, der er registreret i min MFC som nedenfor:


CWnd *pWndPrev = NULL;
 pWndPrev = CWnd::FindWindow(\_T("NDSApp"),NULL);
         if(pWndPrev != NULL)
            pWndPrev->BringWindowToTop();


Men jeg kan ikke få CWnd til vinduet. Ikke i stand til at finde ud af det. Lad mig vide, om jeg mangler noget eller gør noget forkert.

Bedste reference


FindWindow finder vindue forekomster ikke vindue klasser . I din app, der registrerer klassen, skal du faktisk oprette et vindue, så udvidelsen kan finde vinduet.


(Find vinduet efter klassenavn er fint; problemet er, at du ikke har skabt noget for at finde.)


Jeg formoder også, at hvis du forsøger at oprette et vindue baseret på vinduesklassen du har registreret, vil det mislykkes, fordi du har forladt det meste af WNDCLASS-strukturen null. Se eksemplet du linkede til for bedre standardværdier. (fx Du skal give en wndproc og hinstance.)