c ++ - Windows LoadMenu-fejl: 'Det angivne ressourcenavn kan ikke findes i billedfilen.'

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver et program, der blandt andet skal vise en kontekstmenu ved at højreklikke. Jeg er fangst WM\_NOTIFY, identifikatoren for kontrollen, der klikkes på, og NM\_RCLICK. At alt fungerer fint.


Problemet kommer ind, når jeg behandler det højreklik:


case NM\_RCLICK:
{
    HMENU Popup = LoadMenu(0, MAKEINTRESOURCE(IDR\_NED\_MENU));
    if ( !Popup ) {
        DWORD err = GetLastError();
        char* buf;
        FormatMessage(FORMAT\_MESSAGE\_FROM\_SYSTEM|FORMAT\_MESSAGE\_ALLOCATE\_BUFFER, 0, err, 0, buf, 1<<19, 0);
        \_ERROR("LoadMenu(0, MAKEINTRESOURCE(IDR\_NED\_MENU)); Error '\%s' thrown; no menu loaded.", buf);
        delete [] buf;
    }
    Popup = GetSubMenu(Popup, 0);
    CheckMenuItem(Popup, 1, MF\_CHECKED|MF\_BYPOSITION);

    POINT Point;
    GetCursorPos(&Point);

    switch (TrackPopupMenu(Popup, TPM\_LEFTALIGN | TPM\_LEFTBUTTON | TPM\_RETURNCMD, Point.x, Point.y, 0, GetActiveWindow(), NULL)) {
        // ...


Primært LoadMenu(0, MAKEINTRESOURCE(IDR\_NED\_MENU)); vender tilbage NULL, og jeg får en fejlmeddelelse, der hedder, at 'Det angivne ressourcenavn kan ikke findes i billedfilen.'


Nu er IDR\_NED\_MENU ID'et til en menu, jeg har i filen .rc, og jeg har inkluderet den tilsvarende .rc.h fil i denne .cpp fil. De faktiske dialogvindue-id'er indeholdt i den samme .rc fil fungerer perfekt. Denne kode kopieres og indsættes yderligere fra et andet projekt, hvor LoadMenu opkaldet fungerede perfekt: Jeg lavede igen IDR\_NED\_MENU fra bunden og ID'erne er noget forskellige (men de matcher mellem .rc filen og filen .cpp, der har kodestykket jeg har indsat her); Oprindeligt oprettede jeg uheldigvis menuen i en separat .rc fil, så jeg søgte at rette op på det her. Jeg bemærkede, at i Visual Studio 's ressourcevisning er dialogerne indeholdt i dialogmappen, mens dette er indeholdt i Menu-mappen (fornuftig), men jeg er ikke sikker på, hvad der er, hvis der er nogen forskel.


Hvorfor får jeg denne fejl? Hvorfor kan det ikke finde IDR\_NED\_MENU?


Jeg bruger Visual Studio 2010, og dette er ikke et MFC-projekt. Jeg er ikke sikker på, hvad der er andre relevante detaljer, jeg bør medtage; lad mig vide i kommentarer og jeg vil redigere opdatering.


Tak.

Bedste reference


Den første parameter til LoadMenu skal være et håndtag til dit eksekverbare billede, hvor ressourcen findes. Håndtaget er den første HINSTANCE, du får i WinMain. Alternativt kan du få det ved et opkald til GetModuleHandle(0).