Environment   /   Windows 7

ホーム   C/C++チュートリアル   wxWidgetsへ戻る

Windows 7

Parallels Desktop にいろいろな OS を入れて楽しんでいます。今回は Windows 7 に C / C++ のコンパイラをインストールして、Windows API、wxWidgets、GTK プログラミングをする方法を説明します。
バージョンは Windows 7 Home Premium SP1 32bit です。

Emacs

まずエディタですが、お好きなものを使ってください。Emacs が良ければ最新のバージョン 26.3 が使えます。次のリンクから emacs-26.3-i686.zip をダウンロードしてください。

Index of /gnu/emacs/windows/emacs-26

ダウロードした zip ファイルをお好きな場所に展開してください。私は C:\ に展開しました。実際に使うのは、emacs-26\bin\runemacs.exe になります。



C / C++

今回も Msys2 を介して MinGW をインストールします。

次のリンクから msys2-i686-20190524.exe をダウンロードしてください。32bit用としてはこれが最新版になるみたいです。

Index of /distrib/i686/

インストールする場所はデフォルトの C:\msys32 にします。

インストールすると、Msys2 のコンソールが自動的に開きます。もしコンソールが開いていなかったら、C:\msys32 の中の msys2_shell.bat をダブルクリックしてコンソールを開いてください。そしてコンソールに次のようにコマンドして、C / C++ をインストールします。


pacman -S mingw-w64-i686-toolchain
    

pacman は Msys2 のパッケージマネージャです。C と C++ は、C:\msys32\mingw32\bin にインストールされます。インストールが終わりましたらコンソールを閉じてください。
そして今度は、C:\msys32 の中の mingw32_shell.bat をダブルクリックしてコンソールを開きます。


// インストールされた C バージョンを確認します。
$ gcc --version
gcc.exe (Rev1, Built by MSYS2 project) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

// インストールされた C++ のバージョンを確認します。
$ g++ --version
g++.exe (Rev1, Built by MSYS2 project) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

msys2_shell.bat と mingw32_shell.bat は役割が違います。

  1. pacman を使う場合は、msys2_shell.batを使います。
  2. その他の作業をする場合は、mingw32_shell.bat を使います。
  3. migw64_shell.bat は、32bit コンピュータでも、開くことはできますが、正常には動作しません。

msys2_shell.bat を使うのは、何かのパッケージをインストールする時だけです。
よく使う mingw32_shell.bat の方をスタートメニューに登録するか、ショートカットをデスクトップなどに作っておくと良いでしょう。
新しいバージョンの Msys2 では、すべての作業を mingw32_shell.bat で行えるようになっているという話もありますが、一応上記のことを守って作業していきます。

なお、Msys2 の新しいバージョンでは、Msys2 に emacs をインストールすることができます。msys2_shell.bat を開いて次のようにコマンドしてください。


pacman -S emacs
    

emacs で何かの作業をする場合は、mingw32_shell.bat を開きます。


// emacs で *~ とか #* というバックアップファイルを作らない方法
// ホームディレクトリに .emacs というファイルを作ります。
// mingw32_shell.bat を開いだ場所がホームディレクトリです。
emacs .emacs

// そのファイルに次のように記述します。
(setq make-backup-files nil)
(setq auto-save-default nil)
    

Windows API

これで、Windows API プログラミングをする準備が整いました。
次のコードを記述して、C:\msys32\home\ユーザー名 に保存してください。

hello.c


#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int     WINAPI   WinMain(HINSTANCE hInstance,
			 HINSTANCE hPrevInstance,
			 LPSTR     lpCmdLine,
			 int       nCmdShow)
{
  WNDCLASS wc;
  HWND     hwnd;
  MSG      msg;

  wc.style         = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc   = WndProc;
  wc.cbClsExtra    = 0;
  wc.cbWndExtra    = 0;
  wc.hInstance     = hInstance;
  wc.hIcon         = NULL;
  wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
  wc.lpszMenuName  = NULL;
  wc.lpszClassName = TEXT("WINDOW");

  RegisterClass(&wc);

  hwnd             = CreateWindow(TEXT("WINDOW"),
				  TEXT("Hello Windows API!"),
				  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
				  CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
				  NULL, NULL, hInstance, NULL);

  while (GetMessage(&msg, NULL, 0, 0))
    {
      DispatchMessage(&msg);
    }

  return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
    {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    }

  return DefWindowProc(hwnd, msg, wParam, lParam);
}
    


コンパイルと実行

mingw32_shell.bat を開きます。コンソールが開いた場所が C:\msys32\home\ユーザー名 になっています。


// コンパイル
gcc hello.c -o hello -mwindows

// 実行
./hello
    

出来上がった hello.exe をダブルクリックしても実行できます。hello.exe をデスクトップなどに移動してダブルクリックしても実行できます。


実行結果



コマンドプロンプトでのコンパイルと実行

次のパスを環境変数に登録すると、コマンドプロンプトでもコンパイルと実行ができるようになります。また、wxWidgets や GTK で作成した exe ファイルをダブルクリックで実行する場合にも次のパスの登録が必要になりますので、ぜひ登録してください。
C:\msys32\mingw32\bin;

パスの登録が終わりましたら、先ほどの hello.c をお好きな場所に保存してください。そしてコマンドプロントを起動して、hello.c を保存したディレクトリに移動し、次のようにコマンドして、コンパイルと実行をします。


// コンパイル
gcc hello.c -o hello -mwindows

// 実行
hello
    

出来上がった hello.exe をダブルクリックしても実行できます。hello.exe をデスクトップなどに移動してダブルクリックしても実行できます。



wxWidgets

wxWidgets も、Msys2 を使ってインストールします。

まず make というコマンドをインストールしておきます。msys2_shell.bat を開いて、次のようにコマンドしてください。


pacman -S make
    

インストールが終わりましたらコンソールを閉じてください。

そして、次のリンクから Latest Stable Release: 3.0.5 の Windows Installer をダウンロードします。

Downloads - wxWidgets

ダウンロードされた wxMSW-3.0.5-Setup.exe は、実際にはインストールを行わず、必要なファイルを展開するだけです。デフォルトのまま C:\wxWidgets-3.0.5 に展開します。そして今度は、mingw32_shell.bat を開いて次のようにコマンドします。


// wxWidgets のディレクトリに移動します
cd C:/wxWidgets-3.0.5

// wxWidgets をコンフィギュア(環境設定)します
./configure --disable-shared --enable-unicode

    

次のように表示されればコンフィギュアは成功です。


Configured wxWidgets 3.0.5 for `i686-w64-mingw32´

  Which GUI toolkit should wxWidgets use?                 msw
  Should wxWidgets be compiled into single library?       no
  Should wxWidgets be linked as a shared library?         no
  Should wxWidgets support Unicode?                       yes (using wchar_t)
  What level of wxWidgets compatibility should be enabled?
                                       wxWidgets 2.6      no
                                       wxWidgets 2.8      yes
  Which libraries should wxWidgets use?
                                       STL                no
                                       jpeg               builtin
                                       png                builtin
                                       regex              builtin
                                       tiff               builtin
                                       zlib               sys
                                       expat              sys
                                       libmspack          no
                                       sdl                no
    

続いて make と make install をします。


// make します。make は時間がかかります。
make

// make[1]: ディレクトリ '/c/wxWidgets-3.0.5/utils/wxrc' から出ます。と表示されれば make は成功しています。続けてインストールします。

make install

// 次のように表示されればインストール成功です
 ------------------------------------------------------

 The installation of wxWidgets is finished.  On certain
 platforms (e.g. Linux) you'll now have to run ldconfig
 if you installed a shared library and also modify the
 LD_LIBRARY_PATH (or equivalent) environment variable.

 wxWidgets comes with no guarantees and doesn't claim
 to be suitable for any purpose.

 Read the wxWindows Licence on licencing conditions.

 ------------------------------------------------------

// ホームディレクトに戻ります。
cd

// バージョンを確認します
wx-config --version
3.0.5
    


これで、wxWidgets プログラミンができるようになりました。次のコードを記述して、C:\msys32\home\ユーザー名 に保存してください。

hello.cpp


#include <wx/wx.h>

class Hello : public wxFrame
{
public:
    Hello();
};

class App : public wxApp
{
public:
    virtual bool OnInit();
};

Hello::Hello() : wxFrame(NULL, -1, wxT("Hello wxWidgets!"),
                         wxDefaultPosition, wxSize(300, 200))
{
    Center();
}

IMPLEMENT_APP(App)

bool App::OnInit()
{
    Hello *hello = new Hello();
    hello->Show();
    
    return true;
}
    


コンパイルと実行

mingw32_shell.bat のコンソールを開いて、次のようにコマンドしてコンパイルします。


// コンパイル
g++ hello.cpp `wx-config --cppflags --libs` -o hello -mwindows

// 実行
 ./hello
    

C:\msys32\home\ユーザー名 を開いて hello.exe をダブルクリックして実行することができます。hello.exe をデスクトップなどへ移動してもダブルクリックで実行できます。


実行結果


wxWidgets の削除

インストールした wxWidgets を削除します。

Msys2 でインストールした wxWidgets は Msys2 の中にコピーされています。 C: にインストールした wxWidgets はなくても大丈夫です。というか、今後もし Code Blocks などを使って wxWidgets プログラミングをする場合には、wxWidgets をもう一つインストールし直す必要があります。wxWidges のディレクトリ名を別の名前にしてもう一つインストールすることもできますが、間違えやすいので思い切って削除します。

コントロールパネルを使って wxWidgets-3.0.5 を削除してください。そして、手動でも C:\ のwxWidgets-3.0.5 を削除してください。

hello.exe も削除して、Msys2 で hello.cpp をコンパイルし直してください。正常にコンパイルできることでしょう。



GTK

GTK も Msys2 を使ってインストールします。

msys2_shell.bat を起動して、次のようにコマンドして GTK をインストールします。GTK は C:\msys32\mingw32\bin にインストールされます。


// gtk2 のインストール
pacman -S mingw-w64-i686-gtk2

// gtk3 のインストール
pacman -S mingw-w64-i686-gtk3
    

これで GTK プログラミンができるようになりました。次のコードを記述して\msys32\home\ユーザー名 に保存してください。

hello.c


#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget * window;
    
    gtk_init(&argc, &argv);
    
    window = gtk_window_new    (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title       (GTK_WINDOW(window), "Hello GTK!");
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
    gtk_window_set_position    (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
    gtk_widget_show(window);
    gtk_main();
    return 0;
}
    


コンパイルと実行

mingw32_shell.bat を開いて次のようにコマンドします。


// gtk2 でのコンパイル
gcc hello.c `pkg-config --cflags --libs gtk+-2.0` -o hello -mwindows

// gtk3 でのコンパイル
gcc hello.c `pkg-config --cflags --libs gtk+-3.0` -o hello -mwindows

// 実行
./hello
    

出来上がった hello.exe をダブルクリックしても実行できます。hello.exe をデスクトップなどに移動してダブルクリックしても実行できます。


実行結果

gtk2 gtk3


37446 visits
Posted: Jun. 19, 2020
Update: Jun. 20, 2020

ホーム   C/C++チュートリアル   wxWidgetsへ戻る   目次