• 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ą

VPS Starter Arubacloud
0 głosów
200 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,367 wizyt
0 głosów
2 odpowiedzi 358 wizyt
pytanie zadane 17 października 2016 w C i C++ przez maciek221 Początkujący (300 p.)
0 głosów
1 odpowiedź 948 wizyt
pytanie zadane 16 października 2015 w C i C++ przez Wojtek Sala Początkujący (480 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...