Skocz do zawartości

Problem z Menu w VC++


Savant

Recommended Posts

Mam problem z menu w programiku ktory tworze w VC++. Tworze sobie menu tak jak jest to pokazane w książce Petzold'a Programnomwanie Windows - program sie kompiluje ale wyswietla mi sie samo okno bez menu...
menu zapisuje sobie w pliku zasobow...potem przy wywolaniu CreateWindow jako dziewiaty argument podaje MAKEINTRESOURCE(id_mojego menu) ale to i tak jest zle!! :(
Próbowalem tez z szMenuName oraz pobierajac uchwyt menu ... niestety to samo... :ph34r:
gdy kompiluje przykladowe programy sciagniete z sieci robi sie to samo... czy jest to wina zlych ustawien kompilatora...
uzywam Visual C++ 6.0 i Borland Builder C++ 6.0

Link do komentarza
Udostępnij na innych stronach

A weź sobie spróbuj w Visualu utworzyc nowy projekt (Win32 Application), tylko nie pusty, ale zeby to bylo "Typical "Hello World" Project" dla VC++ 6.0, lub nie "Empty Project" dla VC++ .NET . One maja już szkielet gotowej aplikacji razem z menu.
Możesz też wkleić tu kod swojego programu - może problem polega na czym innym.

Link do komentarza
Udostępnij na innych stronach

A weź sobie spróbuj w Visualu utworzyc nowy projekt (Win32 Application), tylko nie pusty, ale zeby to bylo "Typical "Hello World" Project" dla VC++ 6.0, lub nie "Empty Project" dla VC++ .NET . One maja już szkielet gotowej aplikacji razem z menu.
Możesz też wkleić tu kod swojego programu - może problem polega na czym innym.

tak , w ten sposob dziala!!!

Link do komentarza
Udostępnij na innych stronach

Najzabawniejsze jest to, ze ptaku wysłał mi wczoraj (no właściwie to już dzisiaj bo ok 2:00) ten kod, ja go wkleiłem do siebie i niby jest wszystko dobrze, ale menu sie nie wyswietla. Pewno jest jakiś mały błąd, i trzeba się dokładnie wgłębić w kod.

ptaku wklej tutaj ten kod może inni coś znajdą (ja niestety wiadomość od Ciebie skasowałem (ale nei wiem jakim cudem) bo dziś już jej nie mam, w związku z czym nie mam też tego kodu i nie moge wkleić).

Ps. To na pewnio nie jest wina tego, że masz WinXP.

Link do komentarza
Udostępnij na innych stronach

oto pliki zrodlowe:
menu.cpp

#include<windows.h>
#include"resource.h"


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

TCHAR szAppName[] = TEXT ("Program z Menu") ;


int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     HWND     hwnd ;
     MSG      msg ;
     WNDCLASS wndclass ;
     //HMENU hMenu;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = MAKEINTRESOURCE(101);
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("Program wymaga Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     //hMenu = LoadMenu(hInstance,"IDM_MENU");    //lub MAKEINTRESOURCE(101)
     hwnd = CreateWindow (szAppName, TEXT ("Program wyświetlający menu"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;

     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      switch (message)
     {
     case WM_COMMAND:
          //TUTAJ BEDA ZNAJDOWALY SIE INSTRUKCJE ODNOSNIE POL MENU
          return 0;

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

resource.h:

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by zasoby.rc
//
#define IDM_MENU                        101
#define IDM_OTWORZ_PLIK                 40001
#define IDM_SPAKUJ                      40002
#define IDM_ROZPAKUJ                    40003
#define IDM_USTAWIENIA                  40004
#define IDM_WLASCIWOSCI                 40005
#define IDM_KONIEC                      40006
#define IDM_KOPIUJ                      40007
#define IDM_WYTNIJ                      40008
#define IDM_WKLEJ                       40009
#define IDM_POLSKI                      40011
#define IDM_ANGIELSKI                   40012
#define IDM_INFO                        40013
#define IDM_ABOUT                       40014

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40015
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

zasoby.rc

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Polish resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PLK)
#ifdef _WIN32
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
#pragma code_page(1250)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDM_MENU MENU DISCARDABLE 
BEGIN
    POPUP "&Akcja"
    BEGIN
        MENUITEM "&Otwórz Plik ...",            IDM_OTWORZ_PLIK
        MENUITEM "&Spakuj",                     IDM_SPAKUJ
        MENUITEM "&Rozpakuj",                   IDM_ROZPAKUJ
        MENUITEM SEPARATOR
        MENUITEM "&Ustawienia",                 IDM_USTAWIENIA
        MENUITEM "&Właściwości Pliku ...",      IDM_WLASCIWOSCI
        MENUITEM SEPARATOR
        MENUITEM "&Koniec",                     IDM_KONIEC
    END
    POPUP "&Edycja"
    BEGIN
        MENUITEM "&Kopiuj",                     IDM_KOPIUJ
        MENUITEM "&Wytnij",                     IDM_WYTNIJ
        MENUITEM "&Wklej",                      IDM_WKLEJ
    END
    POPUP "&Pomoc"
    BEGIN
        POPUP "&Język Programu"
        BEGIN
            MENUITEM "&Polski",                     IDM_POLSKI, CHECKED
            MENUITEM "&Angielski",                  IDM_ANGIELSKI
        END
        MENUITEM "&Informacje o Autorze",       IDM_INFO
        MENUITEM "&About ...",                  IDM_ABOUT
    END
END


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // Polish resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

Link do komentarza
Udostępnij na innych stronach

Ja skopiowalem to do siebie, odpalilem i wszystko jest w porzadku. Program sie odpala i pokazuje menu. Wszystko jest OK. Moze pomyliles cos przy tworzeniu projektu. Ja tez uzywam XP. Ja bym nie szukal bledow w kodzie, a w projekcie.

Bez tej linijki tez bedzie dzialac:
// hMenu = LoadMenu(hInstance, "IDM_MENU");

Mozesz rowniez zamiast linijki:
wndclass.lpszMenuName = MAKEINTRESOURCE(101);

wspisać:
wndclass.lpszMenuName = (LPCSTR)IDM_MENU;

good luck! :) 

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...