Cプログラミンの一環として始めた Windos API ですが、やってみたら面白かったので、もっと詳しく、かつ簡単に、ステップバイステップで学習するコーナーも作りました。
Windows API Primer
Primer は、入門書という意味です。
macOSやLinuxなどでWindowsアプリケーションを実行するにはWineというソフトウェアを使います。 Wineは、Parallels Desktopなどとは違い、OS自体を仮想化するのではなく、あくまでもmacOSやLinux上でWindowsアプリケーションを実行できます。
この章では、Ubuntu 20.04でWindows実行ファイルをコンパイルして、その .exe をWineを使って実行する方法を説明します。Ubuntu上でWindows実行ファイルをコンパイルするにはmingw-w64というソフトウェアを使います。
今回インストールするソフトウェアは次のとおりです。
mingw-w64をインストールするには、ターミナルに次のように入力して、エンターキーを押します。
sudo apt install mingw-w64
インストールが終わりましたら、次のコードをwindow.cという名前のファイルに保存してください。Windowsアプリケーションの場合、コメント以外の部分で日本語が含まれている場合は、Unicodeではなく、日本語(PC932)などのフォーマットで保存してください。
#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にはアクセスできずコンパイルできません。またグラフィックに関するものはほぼすべてがストックオブジェクトとなっているため、グラフィックの章のサンプルはコンパイルできません。
UbuntuにWineをインストールするにはターミナルに次のように入力してエンターキーを押します。ディレクトリはどこで行っても構いません。
sudo apt install wine
先ほどコンパイルした window.exe を実行するには、ターミナルでwindow.exeを保存したディレクトリに移動して、次のように入力してエンターキーを押します。
wine window