PolyBezierToで、ベジェ曲線を描画できる。
PolyBezierTo function (wingdi.h) | Microsoft Docs
ベジェ曲線
ベジェ曲線を手で描いてみる - にせねこメモ
ベジェ曲線の描き方とか理論とかはちょっと難しいので上の記事を参照。
PolyBezierTo.cppにおいて、WindowProcのWM_CREATE時に、
// スタティック変数の宣言 static POINT pt[3]; // ベジェ曲線の描画に必要な制御点pt.(要素数3.) // ウィンドウメッセージに対する処理. switch (uMsg) { // switch-casa文でuMsgの値ごとに処理を振り分ける. // ウィンドウの作成が開始された時. case WM_CREATE: // ウィンドウの作成が開始された時.(uMsgがWM_CREATEの時.) // WM_CREATEブロック { // ベジェ曲線の描画に必要な制御点の初期値をセット. pt[0].x = 200; // pt[0]のX座標は200. pt[0].y = 150; // pt[0]のY座標は150. pt[1].x = 300; // pt[1]のX座標は300. pt[1].y = 200; // pt[1]のY座標は200. pt[2].x = 400; // pt[2]のX座標は400. pt[2].y = 250; // pt[2]のY座標は250. // ウィンドウ作成成功 return 0; // return文で0を返して, ウィンドウ作成成功とする. } // 既定の処理へ向かう. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
まずは、こんな感じで1つの直線上に制御点が通るようにセットしておく。
WM_PAINTで、
開始の制御点も(100, 100)で、これで(100, 100)-(400, 250)の直線上を通るようになっている。
これで実行すると、
ベジェ曲線どころか直線になってしまう。
そこで、
pt[0]の座標がより左下、pt[1]の座標がより右上に来るように、制御点を修正すると、
S字に曲がるようになった。
ベジェ曲線っぽいね。
Sample/winapi/PolyBezierTo/PolyBezierTo/src/PolyBezierTo at master · bg1bgst333/Sample · GitHub