アイコンを描画


アイコンファイルの表示

以前、アプリケーションにアイコンを設定する方法はリソースの説明で行った
しかし、アイコンは一つの画像ファイルと考えることもできるだろう
そういう意味では、クライアント領域に描画したいと考えることもある

アイコンは、指定したデバイスコンテキストに描画することができます
ビットマップを扱うほどのものでない場合には、便利でしょう
アイコンの描画には DrawIcon() 関数を使います

BOOL DrawIcon(HDC hDC , int X , int Y , HICON hIcon);

hDC には、デバイスコンテキストのハンドルを
X にはアイコンの左隅の X座標、Yは同様に Y座標を指定します
hIcon は、描画するアイコンのハンドルです
関数が成功すると 0 以外、失敗すると 0 が返ります
//リソーススクリプト
KITTY ICON "test.ico"
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
	HDC hdc;
	PAINTSTRUCT ps;
	static HICON hIcon;

	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_CREATE:
		hIcon = LoadIcon(
			((LPCREATESTRUCT)(lp))->hInstance ,
			TEXT("KITTY")
		);
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hwnd , &ps);
		DrawIcon(hdc , 10 , 10 , hIcon);
		EndPaint(hwnd , &ps);
		return 0;
	}
	return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
			PSTR lpCmdLine , int nCmdShow ) {
	HWND hwnd;
	MSG msg;
	WNDCLASS winc;

	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= winc.cbWndExtra	= 0;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName	= NULL;
	winc.lpszClassName	= TEXT("KITTY");

	if (!RegisterClass(&winc)) return -1;

	hwnd = CreateWindow(
			TEXT("KITTY") , TEXT("Kitty on your lap") ,
			WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL ,
			hInstance , NULL
	);

	if (hwnd == NULL) return -1;

	while(GetMessage(&msg , NULL , 0 , 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}


リソーススクリプトをコンパイルし、あらかじめアイコンを実行ファイルに埋めこみ
これをメモリに読みこんで、描画しています


DrawIcon()

BOOL DrawIcon(HDC hDC , int X , int Y , HICON hIcon);

アイコンを描画します

hDC - デバイスコンテキストのハンドルを指定します
X - アイコンの左上隅のX座標を指定します
Y - アイコンの左上隅のY座標を指定します
hIcon - 描画するアイコンのハンドルを指定します

戻り値 - 成功すると 0 以外、失敗すると 0



前のページへ戻る次のページへ