Tartalomjegyzék

< CPP

Cpp Windows asztali környezet linuxon

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

main.cpp
#include <windows.h>
 
#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:

Makefile
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