• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Visual studio 2015 problem z kompilacją

Object Storage Arubacloud
0 głosów
203 wizyt
pytanie zadane 8 października 2016 w C i C++ przez maciek221 Początkujący (300 p.)
Witam :) mam problem z skompilowaniem programu o to jego kod

 

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)

{

    MessageBox(NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);
    return 0;
}

Problem polega na tym że krzyczy o dodanie nagłówku stdafx.h ale gdy to zrobię wyskakuje kolejna masa błędów..

1 odpowiedź

0 głosów
odpowiedź 8 października 2016 przez obl Maniak (51,280 p.)

Uruchom Visual Studio, utwórz nowy czysty projekt c++ WinApi, dodaj do niego plik .cpp i wklej do niego twój kod. A i jeszcze jedno, domyślnie w ustawieniach kompilatora jest ustawione używanie funkcji przyjmujących WCHAR. A więc wywołanie funkcji MessageBox powinna wyglądać tak:

MessageBox(NULL, L"To jest komunikat", L"Okno komunikatu", MB_OK | MB_ICONINFORMATION);

Albo musisz wyłączyć opcję w ustawieniach kompilatora.

komentarz 8 października 2016 przez maciek221 Początkujący (300 p.)
Okej a pomożesz mi z tym kodem ??? Problem stanowi otwarta klamra przy funkcji swith tzn ta górna

 

 

 

#include <windows.h>
LPSTR NazwaKlasy = "Klasa123";
MSG Komunikat;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
    WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)

{

    WNDCLASS c;

    c.style = 0;
    c.lpfnWndProc = WndProc;
    c.cbClsExtra = 0;
    c.cbWndExtra = 0;
    c.hInstance = hInstance;
    c.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    c.hCursor = LoadCursor(NULL, IDC_ARROW);
    c.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    c.lpszMenuName = NULL;
    c.lpszClassName = NazwaKlasy;

    RegisterClass(&c);

    HWND hWnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        NazwaKlasy,
        "okienko",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        240, 120,
        NULL, NULL,
        hInstance, NULL);

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

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

{
    switch (msg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
        default;
        return DefWindowProc(hwnd, msg wParam, lParam);
    }
    return 0;
}
komentarz 8 października 2016 przez obl Maniak (51,280 p.)

Nagłówka funkcji ci brakuje, to nie dziwne, że się nie kompiluje:

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;
}

 

komentarz 8 października 2016 przez maciek221 Początkujący (300 p.)
edycja 8 października 2016 przez maciek221
Okej :) teraz postanowiłem dodać okienka informacyjne w którym po wyborze pojawi się moje stworzone okno :) ale ma mały problem...

 

 

#include <windows.h>

LPSTR Klasa = "Klasa Okienka";
MSG Komunikat;

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

int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)

{
    MessageBox(NULL, "Oto okienko informacyjne!",
        "Komunikat", NULL);
    if (UINT uDecyzja = MessageBox(NULL, "Czy chcesz zobaczyc okno Windows ?",
        "Wybor", MB_YESNO | MB_ICONQUESTION))
    {
        switch (uDecyzja)
        {
        case IDYES:
            // odpowied? pozytywna
            break;
        case IDNO:
            return 0;
            // odpowied? negatywna
            break;
        }
    }
    else
    {
{

    // WYPEŁNIANIE STRUKTURY
    WNDCLASSEX a;

    a.cbSize = sizeof(WNDCLASSEX);
    a.style = 0;
    a.lpfnWndProc = komunikaty;
    a.cbClsExtra = 0;
    a.cbWndExtra = 0;
    a.hInstance = hInstance;
    a.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    a.hCursor = LoadCursor(NULL, IDC_ARROW);
    a.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    a.lpszMenuName = NULL;
    a.lpszClassName = Klasa;
    a.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    // REJESTROWANIE KLASY OKNA
    RegisterClassEx(&a);
    

 

    // TWORZENIE OKNA
    HWND hwnd;

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, Klasa, "Okienko", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);

 

    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 komunikaty(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;
}

 

Nie mogę dodać okienek z informacjami które po wyborze spowoduję wyświetlenia się mojego okna..

Podobne pytania

0 głosów
2 odpowiedzi 1,377 wizyt
0 głosów
2 odpowiedzi 359 wizyt
pytanie zadane 17 października 2016 w C i C++ przez maciek221 Początkujący (300 p.)
0 głosów
1 odpowiedź 949 wizyt
pytanie zadane 16 października 2015 w C i C++ przez Wojtek Sala Początkujący (480 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...