G++ でコンパイルできるシンプルなウィンドウ

 G++でコンパイルできるサンプルコードです。実行するとシンプルなウィンドウが表示されます。ただこれだけですが、これがウィンドウプログラミングのはじめの一歩です。まずは、これをコンパイルできるようにしてください。

  1. #include <windows.h>
  2. /*************************************
  3. ただウィンドウを表示するだけのアプリです。以下のコマンドラインでアプリを作成できます。
  4. g++ -o 001_plainwindow.exe 001_plainwindow.cpp -mwindows -m64
  5. 注意点としては、001_plainwindow.cpp と言う名前でこのテキストファイルを保存してください。
  6. 保存するときは UTF-8 BOM無しで保存してください。Windows標準のメモ帳よりサクラエディタなどのコーディングするエディタを使う事をお勧めします。
  7. コメントにカスタマイズ方法を書いておきます。色々楽しんでみて下さい。
  8. **************************************/
  9. // ウィンドウプロシージャ(こういう名前の固有名称です覚えてください。)
  10. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  11.     switch (uMsg) {
  12.  
  13.         //ウィンドウが閉じられたときに呼ばれます
  14.         case WM_DESTROY:
  15.             // 終了時にメモリを解放
  16.             PostQuitMessage(0);
  17.             break;
  18.         default:
  19.             return DefWindowProcW(hwnd, uMsg, wParam, lParam);
  20.     }
  21.     return 0;
  22. }
  23. // 最初に呼ばれる関数です。エントリポイントとも言われます。これはほぼ作法です。
  24. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  25.     // ウィンドウクラスの登録
  26.     WNDCLASSW wc = {0};
  27.     wc.lpfnWndProc = WindowProc;
  28.     wc.hInstance = hInstance;
  29.     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  30.     wc.lpszClassName = L"SimpleEditWindowClass";
  31.     RegisterClassW(&wc);
  32.     // ウィンドウの作成 "シンプルなウィンドウ"と書かれている部分はタイトルバーの表示です。好きなものに変えてみて下さい。640,480と言う数字はウィンドウの大きさです。変えてみて下さい。
  33.     HWND hwnd = CreateWindowExW(0, L"SimpleEditWindowClass", L"シンプルなウィンドウ", WS_OVERLAPPEDWINDOW,
  34.                                 CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
  35.     
  36.     // ウィンドウ表示
  37.     ShowWindow(hwnd, nCmdShow);
  38.     UpdateWindow(hwnd);
  39.     // メッセージループ
  40.     MSG msg;
  41.     while (GetMessageW(&msg, NULL, 0, 0)) {
  42.         TranslateMessage(&msg);
  43.         DispatchMessageW(&msg);
  44.     }
  45.     return static_cast<int>(msg.wParam);
  46. }

まず、このプログラムには理屈はありません。こういう作法で組むと思ってください。まず、最初にWinMainという関数が呼び出されます。これはC言語の基礎で習うmain関数と同じです。ウィンドウプログラムの場合はこちらが呼び出されます。

次にウィンドウプロシージャーと呼ばれる関数が呼ばれます。このサンプルプログラムではWM_DESTROY というウィンドウが閉じられたときの処理だけが書かれていますが、Case文の要素としてウィンドウが開かれたときやマウスをクリックされたときなど多くの処理をここに追加して機能を増やしていきます。

それより、まずはこのプログラムをコンパイルして実行ファイルを作ることを最初に考えてください。コンパイルするためにはMinGWという開発環境が必要です。これはソースフォージから「x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z」と言うファイルをダウンロード解凍して、Cドライブにコピーしてください。そして、環境設定でPATHをBINに通してください。 これでコンパイルが可能です。

  1. g++ -o 001_plainwindow.exe 001_plainwindow.cpp -mwindows -m64

コマンドプロンプトをソースファイルのあるフォルダ(ディレクトリ)で実行し、上記コマンドを入力すればこんぱいる、ビルドが終了します。 そのあとは出来た実行ファイルを開いてください。 ソースファイルは必ずUTF-8のBOM無しで作成してください。

これで初めてのウィンドウプログラムが作成できたと考えます。

ウィンドウズアプリ入門 クリップボードにコピーされたらメッセージを受信する方法

 Windowsアプリでコピーされたときにイベントを取得できると便利です。例えばコピーされた内容を画面に表示したい場合などです。 もちろんタイマーイベントで定期的にポーリングをする方法もありますが、やや無駄な処理かもしれません。 Windowsとしてはコピーされたときのイベントを...