[[oktatas:programozás:cpp|< CPP]] ====== Cpp Windows asztali környezet linuxon ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== Írjunk programot Linuxon Windowsra. A teendőket Debian GNU/Linuxon mutatom be. Természetesen nem ez a legüdvözítőbb módja Linuxon programot írni Windowsra. Ha valaki ilyet szeretne akkor a wxWidgets programozói könyvtárakat ajánlom. ===== Telepítések ===== Szükségünk van egy olyan fordítóra, amely Windowsra fordít programot: apt-get install mingw32-runtime Szükségünk van a wine nevű programra a programok kipróbálására: apt-get install wine A program elkészítéséhez a Geany fejlesztőeszközt ajánlom: apt-get install geany ===== Nyomógomb eseménykezeléssel ===== #include #define IDC_MAIN_BUTTON 101 char *AppTitle=(char*) "Ablak"; LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); int WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int nCmdShow) { WNDCLASS wc; HWND hwnd; MSG msg; wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WindowProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInst; wc.hIcon=LoadIcon(NULL,IDI_WINLOGO); wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.hbrBackground=(HBRUSH)COLOR_WINDOWFRAME; wc.lpszMenuName=NULL; wc.lpszClassName=AppTitle; if (!RegisterClass(&wc)) return 0; hwnd = CreateWindow(AppTitle,AppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,400,300, NULL,NULL,hInst,NULL); if (!hwnd) return 0; ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg,NULL,0,0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } } LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_CREATE: { HWND hWndButton=CreateWindowEx(NULL, "BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 100, 100, 100, 24, hwnd, (HMENU)IDC_MAIN_BUTTON, GetModuleHandle(NULL), NULL); break; } case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: { switch(LOWORD(wparam)) { case IDC_MAIN_BUTTON: { MessageBox(NULL, "Árvíztűrő tükörfúrógép", "Információ", MB_ICONINFORMATION); break; } } break; } default: return DefWindowProc(hwnd, msg, wparam, lparam); } return 0; } ===== Program fordítás ===== A programokat ugyanúgy készítjük mint Windowson, csak a fordítás lesz más. A fordítás a következő paranccsal történik: i586-mingw32msvc-g++ -finput-charset=utf-8 -fexec-charset=iso-8859-2 -mwindows main.cpp -o main A kimenetnek "main"-t adtunk meg a szokásos main.exe helyett. Ez csak azért van mert a Scite futtatáskor .exe kiterjesztés nélkül keresi. Ha áttesszük Windowsra, természetesen át kell nevezni. A rugalmas munkavégzéshez készítünk egy Makefilet: CC=i586-mingw32msvc-g++ CFLAGS=-finput-charset=utf-8 -fexec-charset=iso-8859-2 -mwindows main: main.cpp $(CC) $(CFLAGS) main.cpp -o main A scite nevű programban ezek után a fordítás: F7 Futtatás: F5 ===== Link ===== * http://silmor.de/qtstuff.cross.php (Qt-vel) * http://forums.codeblocks.org/index.php?topic=3343.0 * http://mrbook.org/tutorials/make/