Cプログラミンの一環として始めた Windos API ですが、やってみたら面白かったので、もっと詳しく、かつ簡単に、ステップバイステップで学習するコーナーも作りました。
Windows API Primer
Primer は、入門書という意味です。
macOSやLinuxなどでWindowsアプリケーションを実行するにはWineというソフトウェアを使います。 Wineは、Parallels Desktopなどとは違い、OS自体を仮想化するのではなく、あくまでもmacOSやLinux上でWindowsアプリケーションを実行できます。
この章では、macOS上でWindows実行ファイルをコンパイルして、その .exe をWineを使って実行する方法を説明します。macOS上でWindows実行ファイルをコンパイルするにはmingw-w64というソフトウェアを使います。
macOS用のWineは2020年5月15日現在では、まだmacOS 10.14 Mojaveまでの対応となっています。macOS 10.15 Catalinaではまだ使えません。なお、Linux用Wineは、Ubuntu 20.04でも使えます。
今回インストールするソフトウェアは次のとおりです。
Home brew のインストールは、ターミナルを起動して次のように入力します。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
表示される指示に従ってください。HomebrewをインストールするとApple Command Line Toolsが自動でインストールされます。またJavaのインストールを促されたら、その指示に従ってください。
上記のスクリプトで上手くインストールできない場合は、スクリプトが変更されている可能性があります。下記オフィシャルサイトでスクリプトを確認してください。
macOS用のパッケージマネージャー
mingw-w64をインストールするには、ターミナルに次のように入力して、エンターキーを押します。
brew install mingw-w64
インストールが終わりましたら、次のコードをwindow.cという名前のファイルに保存してください。Windowsアプリケーションの場合、コメント以外の部分で日本語が含まれている場合は、Unicodeではなく、日本語(Windows、Dos)などのフォーマットで保存してください。
#include <windows.h>
/* メイン関数 */
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
/* ローカル変数 */
WNDCLASS wc;
HWND hwnd;
/* WNDCLASSの作成 */
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = DefWindowProc;
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_APPWORKSPACE + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("MainWindow");
/* WNDCLASSの登録 */
RegisterClass(&wc);
/* ウィンドウの作成 */
hwnd = CreateWindow (TEXT("MainWindow"),
TEXT("メインウィンドウ"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
/* ウィンドウの表示 */
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
/* メッセージボックス */
MessageBox (hwnd,
TEXT("OKボタンをクリックすると、\nアプリケーションが終了します。"),
TEXT("はじめの一歩"),
MB_OK);
/* アプリケーションの終了 */
return 0;
}
ソースコードをコンパイルするには、ターミナルで、window.cを保存したディレクトリに移動して、次のように入力してください。
x86_64-w64-mingw32-gcc window.c -o window
なお、次のコマンドで、C、C++、32bit、64bitをそれぞれコンパイルできます。
i686-w64-mingw32-gcc
x86_64-w64-mingw32-gcc
i686-w64-mingw32-g++
x86_64-w64-mingw32-g++
コンパイルはすぐに終わります。コンパイルが終わると同じディレクトリにwindow.exeというWindows実行ファイルが出来上がります。
mingw-w64では、ストック(Stock)と呼ばれる、フォント、アイコン、グラフィックなどのオブジェクトにはアクセスできません。具体的には、コントロールとダイアログの章で使っているDEFAULT_GUI_FONTにはアクセスできずコンパイルできません。またグラフィックに関するものはほぼすべてがストックオブジェクトとなっているため、グラフィックの章のサンプルはコンパイルできません。
Wineをインストールする前に、XQuartzをインストールしなければなりません。
XQuartz 2.7.11をインストールするにはターミナルに次のように入力してエンターキーを押します。ディレクトリはどこでも構いません。
brew cask install xquartz
インストール後は必ず、ログアウトして再ログインするか、macOSを再起動してください。
次のページからwinhq-stable-4.0.3.pkgをダウンロードしてください。このページにはかなりの数のファイルが掲載されています。根気よく探してください。
Index of /wine-builds/macosx/pool
ダウンロードしたwinehq-stable-4.0.3.pkgをダブルクリックしてインストールを始めます。注意するのは「64bit support (optional)」にチェックをつけることだけです。後はデフォルトのままで大丈夫です。
Wineのインストールが終わると、お使いの環境によっては、先ほどコンパイルしたwindow.exeにWineのアイコンがつきます。Wineのアイコンが付かない場合もありますが問題はありません。
window.exeをダブルクリックするとwindow.exeがWineで実行されます。初めてWineを実行する時は、次の2つのソフトウェアのインストールをうながすダイアログが表示されますので、「インストール」ボタンをクリックしてください。