Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Tworzenie menu

Ostatnio zmodyfikowano 2013-12-24 19:19
Autor Wiadomość
dawid
Temat założony przez niniejszego użytkownika
[C++] Tworzenie menu
» 2013-12-18 20:18:14
Cześć,
mam taki kod(w pliku okienko.cpp)

C/C++
#include <windows.h>
#include "menu.h"

//Zmienne
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
HWND g_hPrzycisk;

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
   
    // WYPE£NIANIE STRUKTURY
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    // TWORZENIE OKNA
    HWND hwnd;
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL );
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE, 100, 100, 150, 30, hwnd, NULL, hInstance, NULL );
   
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Okno odmówi³o przyjœcia na œwiat!", "Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    ShowWindow( hwnd, nCmdShow ); // Poka¿ okienko...
    UpdateWindow( hwnd );
   
    // Pêtla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
}

// OBS£UGA ZDARZEÑ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    return 0;
}
I w pliku menu.h tak:

C/C++
#ifndef ID_MENU
#define ID_MENU 200
#define ID_1 201
#define ID_2 202
#define ID_3 203
200 MENU
{
    POPUP "Plik"
    {
        MENUITEM "Plik", 201
        MENUITEM "Edycja", 202
        MENUITEM "Pomoc", 203
    }
}
#endif

I gdy chcę skompilować w pliku okienko.cpp przenosi mnie do pliku menu.h zaznaczając linijkę [code[200 MENU[/code] jako błąd.
I w logach tak:


Compiling: C:\Users\Dawid\Desktop\C++\Okienko\okienko.cpp
In file included from C:\Users\Dawid\Desktop\C++\Okienko\okienko.cpp:2:0:
C:\Users\Dawid\Desktop\C++\Okienko\menu.h:6:1: error: expected unqualified-id before numeric constant
 200 MENU
 ^
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings

Tak to wygląda na screenie: http://iv.pl/images​/82730133936754345479.png

Może mi ktoś pomóc w rozwiązaniu tego problemu?
P-99600
pekfos
» 2013-12-18 20:47:53
Nie możesz tak dołączyć skryptu zasobów.
P-99604
dawid
Temat założony przez niniejszego użytkownika
» 2013-12-19 10:38:21
Tzn? A jak mogę?
P-99637
Adik80
» 2013-12-19 10:58:48
w visual studio jest edytor i kompilator zasobow: http://msdn.microsoft.com​/en-us/library/windows/desktop​/aa381042%28v=vs.85%29.aspx
Ale mozna to tez recznie zamienic na wywolania WinApi: [a = href="http://msdn.microsoft.com/en-us/library/windows/desktop/ff468865%28v=vs.85%29.aspx"]
P-99639
dawid
Temat założony przez niniejszego użytkownika
» 2013-12-19 16:57:31
Ale ja używam Code::Blocks a nie Visual Basic.
P-99649
Monika90
» 2013-12-19 20:05:54
Definicje zasobów umieść w pliku *.rc
P-99660
dawid
Temat założony przez niniejszego użytkownika
» 2013-12-19 21:47:58
Mam w pliku .rc. Już nawet zmieniłem z C::B na Dev-C++(lepiej nawiasem mówiąc mi się na nim cokolwiek robi). Nic to nie działa. Plik mam dołączony do projektu, dodaję go za pomocą dyrektywy poprawnie, pojawiają się tylko błędy:


Kompilator: MinGW GCC 4.7.2 32-bit Release
Building Makefile "C:\Users\Dawid\Desktop\C++\Projekty\Makefile.win"
Wykonywanie  make...
mingw32-make.exe -f "C:\Users\Dawid\Desktop\C++\Projekty\Makefile.win" all
g++.exe -c program.cpp -o program.o -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include/c++" -g3

In file included from program.cpp:2:0:
menu.rc:1:1: error: expected unqualified-id before numeric constant

C:\Users\Dawid\Desktop\C++\Projekty\Makefile.win:29: recipe for target 'program.o' failed
mingw32-make.exe: *** [program.o] Error 1

Compilation failed after 0,48 seconds with errors

A plik menu.rc wygląda tak:


200 MENU
{
    POPUP "&Plik"
    {
        MENUITEM "&Nowy", 100
        MENUITEM "&Otwórz", 101
        MENUITEM "&Zapisz", 102
        MENUITEM SEPARATOR
        POPUP "&Importuj"
        {
            MENUITEM "&Tekst", 103
            POPUP "O&braz"
            {
                MENUITEM "Bit&mapa", 104
                MENUITEM "&JPEG", 105
            }
        }
        MENUITEM SEPARATOR
        MENUITEM "&Koniec", 106
    }
    MENUITEM "&Edycja", 108
}
P-99672
Monika90
» 2013-12-19 21:53:13
Plików rc nie dołącza sie za pomocą dyrektywy include (ani w żaden inny sposób) do plików cpp. Pliki rc kompiluje się osobno za pomocą kompilatora zasobów, a nie kompilatora C++.
P-99674
« 1 » 2
  Strona 1 z 2 Następna strona