読者です 読者をやめる 読者になる 読者になる

GUIでHello, World

いろんなGUIライブラリで、「Hello, World」ていうタイトルのウィンドウを表示するサンプル。
環境はVista/VC2008Express。

GTK+

#include <gtk/gtk.h>
#include <windows.h>

int main(int argc, char *argv[])
{
	gtk_init(&argc, &argv);

	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title((GtkWindow *)window, "Hello, World");

	g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

	gtk_widget_show_all(window);
	gtk_main();

	return 0;
}

gtkmm

#include <gtkmm.h>
#include <windows.h>

int main(int argc, char *argv[])
{
	Gtk::Main kit(argc, argv);

	Gtk::Window window;
	window.set_title("Hello, World");
	Gtk::Main::run(window);

	return 0;
}

Qt

#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <windows.h>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QWidget window;
	window.setWindowTitle("Hello, World");
	window.show();

	return app.exec();
}

wxWidgets

#include <wx/wx.h>

class MyApp: public wxApp
{
	virtual bool OnInit()
	{
		wxFrame *frame = new wxFrame(NULL, -1, wxT("Hello, World"));
		frame->Show();
		SetTopWindow(frame);

		return true;
	}
};

IMPLEMENT_APP(MyApp);

WTL

#include <atlbase.h>
#include <atlapp.h>
CAppModule _Module;
#include <atlwin.h>

class CMyWindow: public CWindowImpl<CMyWindow>
{
public:
	DECLARE_WND_CLASS(_T("Hello"));

private:
	BEGIN_MSG_MAP(CMyWindow)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
	END_MSG_MAP()

	LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL &)
	{
		PostQuitMessage(0);
		return 0;
	}
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	_Module.Init(NULL, hInstance);

	CMessageLoop loop;
	_Module.AddMessageLoop(&loop);

	CMyWindow window;
	window.Create(NULL, CWindow::rcDefault, _T("Hello, World"), WS_OVERLAPPEDWINDOW | WS_VISIBLE);

	int ret = loop.Run();
	
	_Module.RemoveMessageLoop();
	_Module.Term();

	return ret;
}

ほかにeGUIを試そうとしたけど、リソースエディタ必須みたいな感じだったのでサンプルだけ動かして挫折。