Tworzenie programu dla Windows (w c++)
-
- Piegowaty Guziec
- Posty: 13
- Rejestracja: 11 maja 2007, 18:31
- Płeć: Mężczyzna
- Wersja Ubuntu: 11.04
- Środowisko graficzne: Xfce
- Architektura: x86_64
Tworzenie programu dla Windows (w c++)
Czy jest możliwe aby w linuksie skompilować program, który będzie uruchamiał się w Windowsie?
Chodzi o c++.
Chodzi o c++.
- Semutachi
- Piegowaty Guziec
- Posty: 22
- Rejestracja: 04 lip 2011, 11:01
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Fluxbox
- Architektura: x86_64
Re: Tworzenie programu dla Windows (w c++)
Tak, jest to możliwe.
Plik mingwtest.cpp
Kod skopiowany z http://darkcult.nazwa.pl/wiki/index.php/Podstawy_WinAPI
Kompilacja
Uruchomienie
Rezultat

Kod: Zaznacz cały
apt-get install mingw32 gcc-mingw32
Kod: Zaznacz cały
#include <windows.h>
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
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, 240, 120, NULL, 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;
}
Kompilacja
Kod: Zaznacz cały
i586-mingw32msvc-g++ mingwtest.cpp -o mingwtest.exe
Kod: Zaznacz cały
wine mingwtest.exe

Linux Akihabara 2.6.38-bpo.2-amd64 x86_64 GNU/Linux
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Tworzenie programu dla Windows (w c++)
to nie lepiej użyć wxwidgets?
- Semutachi
- Piegowaty Guziec
- Posty: 22
- Rejestracja: 04 lip 2011, 11:01
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Fluxbox
- Architektura: x86_64
Re: Tworzenie programu dla Windows (w c++)
@ethanak
Przykład, który podawałem miał na celu udowodnienie, że da się kompilować programy dla Windowsa na Linuksie. Wybrałem kod z WinAPI ponieważ najbardziej kojarzy się z Windowsem i C++.
Przykład, który podawałem miał na celu udowodnienie, że da się kompilować programy dla Windowsa na Linuksie. Wybrałem kod z WinAPI ponieważ najbardziej kojarzy się z Windowsem i C++.
Linux Akihabara 2.6.38-bpo.2-amd64 x86_64 GNU/Linux
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Tworzenie programu dla Windows (w c++)
E... że co?
Pisałem parę programów pod Windowsa używając wxWidgets choćby z tego powodu, że nie musiałem zajmować się WinAPI. I nie bardzo rozumiem dlaczego przykład z WinAPI miałby być lepszy od takiego samego z wxWidgets. Możesz jakoś rozwinąć tę lepszość? Czy może ja czegoś ważnego nie wiem?
Pisałem parę programów pod Windowsa używając wxWidgets choćby z tego powodu, że nie musiałem zajmować się WinAPI. I nie bardzo rozumiem dlaczego przykład z WinAPI miałby być lepszy od takiego samego z wxWidgets. Możesz jakoś rozwinąć tę lepszość? Czy może ja czegoś ważnego nie wiem?
-
- Wytworny Kaczor
- Posty: 264
- Rejestracja: 19 lis 2008, 11:42
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: KDE Plasma
- Architektura: x86_64
Re: Tworzenie programu dla Windows (w c++)
Dlatego, że to był test czy kompiluje się na Windowsa, a WinAPI jest jak sama nazwa wskazuje Windows Only - wxWidgets jest niezależny od platformy podobnie jak Qt i taka kompilacja niczego by autorowi wątku nie pokazywała (bo kod równie dobrze można skompilować gcc linuksowym i odpalić).ethanak pisze:E... że co?
Pisałem parę programów pod Windowsa używając wxWidgets choćby z tego powodu, że nie musiałem zajmować się WinAPI. I nie bardzo rozumiem dlaczego przykład z WinAPI miałby być lepszy od takiego samego z wxWidgets. Możesz jakoś rozwinąć tę lepszość? Czy może ja czegoś ważnego nie wiem?
Ogólnie z WinAPI to jest tak jak z Xlib - nikt poważny nie chce tego używać (poza grami, ale tam tworzy się najprostsze okienko, i więcej z WinAPI się nie bawi) i wykorzystuje się MFC/Qt/Wx , ale tu do pokazania, że da się kompilować pod windowsa z linuksa (czyli robić crosskompilację), WinAPI jak najbardziej się nadaje (do wielu więcej rzeczy nie podobnie jak Xlib ;p).
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości