「Windows API/図形の描画」の版間の差分

ナビゲーションに移動 検索に移動
fix lint error (use script)
(fix lint error (use script))
Windows API でいう「ブラシ」とは、図形の塗りつぶしの色を設定するためのツールのことです。画像作成ソフトで例えるなら、Windows API でいうブラシとは、画像作成ソフトの「バケツ」ツールに近いです。世間一般の画材でいう「ブラシ」とは、意味が違います。
 
<sourcesyntaxhighlight lang=c>
HBRUSH brasi_buhin_1;
brasi_buhin_1 = CreateSolidBrush(RGB(255, 100, 100)); // ピンク色のブラシを作成
SelectObject(hdc, brasi_buhin_1); // ウィンドウhdcと、さきほど作成したブラシを関連づけ
Rectangle(hdc, 20, 30, 50, 70); // 図形の描画
</syntaxhighlight>
</source>
 
上記の2段階のブラシ作成の作業は、CreateSolidBrush はブラシの色作成のためのアドレス確保を意味し、もう片方 SelectObject は、どのウィンドウでどのブラシ色を使うかを定義するための情報を保存するアドレスの確保を意味しています。
 
つまり、下記のコードのようになります。
<sourcesyntaxhighlight lang=c>
case WM_PAINT:
{
}
break;
</syntaxhighlight>
</source>
 
 
 
Rectangle 命令の前に、あらかじめ
<sourcesyntaxhighlight lang=c>
HPEN pen_buhin_1;
pen_buhin_1 = CreatePen (PS_SOLID, 0, RGB(255, 100, 100));
SelectObject(hdc, pen_buhin_1);
</syntaxhighlight>
</source>
のように、ペンを指定します。 CreatePen 命令の第2引数の「0」は、ペン幅の追加の線幅です。「0」に指定しても、最低でも1ドットぶんの線幅はあります。
 
よって、今までの話をまとめると、
<sourcesyntaxhighlight lang=c>
HPEN pen_buhin_1; // ペンの設定用
pen_buhin_1 = CreatePen (PS_SOLID, 0, RGB(255, 100, 100));
 
Rectangle(hdc, 20, 30, 50, 70); // 図形の描画
</syntaxhighlight>
</source>
のように、なります。
 
 
;コード例
<sourcesyntaxhighlight lang=c>
case WM_PAINT:
{
}
break;
</syntaxhighlight>
</source>
 
 
一例として、三角関数のグラフは、たとえば次のようなコードで実際にグラフを書ける。( case WM_PAINT 部分の抜粋)
 
<sourcesyntaxhighlight lang=c>
case WM_PAINT:
{
}
break;
</syntaxhighlight>
</source>
 
なお、冒頭で math.h をインクルードしておくのを忘れないように。なお、説明の単純化のため、上記コードを実行しても座標軸などの描画は無く、描かれるのは三角関数の正弦波のグラフだけである。
ソースの冒頭で関数を宣言する際、通常の関数と同じように、
 
<sourcesyntaxhighlight lang=c>
void kansuu(HDC hdc){
// ここに描画命令を書く
}
</syntaxhighlight>
</source>
 
のように宣言する必要があります。引数の型と変数名が、単にハンドル型(HDC)とハンドル変数(hdc)になっただけです。通常のC言語の関数と同じです。
 
さて、また、呼び出し側(親側)で、
<sourcesyntaxhighlight lang=c>
kansuu(hdc);
</syntaxhighlight>
</source>
 
のように、hdcの値を渡す必要があります(通常のC言語の関数と同じです)。
 
当然、呼び出し側(親側)の関数のコードのある位置は、
<sourcesyntaxhighlight lang=c>
case WM_PAINT:
{
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: HDC を使用する描画コードをここに追加してください...
</syntaxhighlight>
</source>
// TODO: HDC を使用する描画コードをここに追加してください...
 
つまり、
<sourcesyntaxhighlight lang=c>
case WM_PAINT:
{
kansuu(hdc);
(中略)
</syntaxhighlight>
</source>
 
のように書かれます。
たとえば、5種類の違う作業の前に、共通する前段階の作業を5回呼び出したい場合、
 
<sourcesyntaxhighlight lang=c>
for (int j = 1; j <= 20; ++j) {
 
break;}
}
</syntaxhighlight>
</source>
のように書くのです。
 
733

回編集

案内メニュー