ホームに戻る
フルスクリーン
#include <windows.h>
// ウィンドウプロシージャの宣言(ウィンドウの動作を規定)
LRESULT CALLBACK WndProc(
HWND hwnd, //ウィンドウハンドル(void型ポインタ)
UINT message, //メッセージ識別番号(unsigned int)
WPARAM wParam, //(32ビットlong)
LPARAM lParam); //(32ビットlong)
void GetClientPos(HWND, POINT *);
//グラフィック描画用の関数
//メイン関数
int APIENTRY WinMain(
HINSTANCE hInstance, //インスタンスのハンドル
HINSTANCE hPreInstance, //以前のインスタンスハンドル
LPSTR cmdLine, //コマンド行の文字列
int cmdShow) //ウィンドウの表示状態
{
//ウィンドウクラスの宣言
WNDCLASS wd;
//ウィンドウクラス名
char *wdName = "window00";
//ウィンドウ登録のためのループ
if (!hPreInstance) {
//ウィンドウスタイル
wd.style = CS_HREDRAW | CS_VREDRAW; //幅、高さの変化に対し再描画する
//ウィンドウプロシージャ
wd.lpfnWndProc = (WNDPROC)WndProc;
//クラスの予備のメモリ領域
wd.cbClsExtra = 0;
//ウィンドウの予備のメモリ領域
wd.cbWndExtra = 0;
//プログラムのインスタンスハンドル
wd.hInstance = hInstance;
//アイコンのハンドル
wd.hIcon = NULL;
//カーソルのハンドル
wd.hCursor = LoadCursor(NULL, IDC_ARROW);
//バックグラウンドのブラシのハンドル
wd.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
//メニュー名
wd.lpszMenuName = NULL;
//クラス名
wd.lpszClassName = wdName;
//ウィンドウの登録(成功 非0、失敗 0)
if (!RegisterClass(&wd))
return FALSE;
}
//ウィンドウの生成(ハンドルを form00 とする)
HWND form00 = CreateWindowEx(
NULL, //拡張スタイル(なし)
wdName, //ウィンドウクラス名
"window", //ウィンドウの名前
WS_POPUP, //
0, //ウィンドウのX座標(ディフォルト)
0, //ウィンドウのY座標(ディフォルト)
10, //ウィンドウの幅(ディフォルト)
10, //ウィンドウの高さ(ディフォルト)
NULL, //親ウィンドウ(この場合自身が親)
NULL, //メニュー(なし)
hInstance, //プログラムのハンドル
NULL); //予備パラメータ
//ウィンドウの表示
ShowWindow(form00, cmdShow);
//ウィンドウの更新
UpdateWindow(form00);
//イベントのループ
MSG msg;
while (GetMessage(&msg, NULL, NULL, NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
// ウィンドウプロシージャ(ウィンドウの動作を規定)
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
static HRGN hRgn;
switch (message) {
//ウィンドウを生成する時の処理
case WM_CREATE:
{
POINT point;
RECT rect;
HDC hDC;
int scr_width, scr_height;
hDC = GetDC(GetActiveWindow());
scr_width = GetDeviceCaps(hDC, HORZRES);
scr_height = GetDeviceCaps(hDC, VERTRES);
ReleaseDC(GetActiveWindow(), hDC);
rect.left = 0;
rect.top = 0;
rect.right = GetSystemMetrics(SM_CXSCREEN);
rect.bottom = GetSystemMetrics(SM_CYSCREEN);
AdjustWindowRect(&rect, WS_POPUP, FALSE);
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
GetClientPos(hwnd, &point);
// リージョンの作成
GetClientRect(hwnd, &rect);
hRgn = CreateRectRgn(point.x, point.y, rect.right, rect.bottom);
// ウィンドウリージョンの設定
SetWindowRgn(hwnd, hRgn, TRUE);
break;
}
break;
//ウィンドウを描画するとき処理
case WM_PAINT:
{
RECT rt;
//表示する文字列
char *s = "Alt+F4 で終了";
//描画の準備
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HPEN hPen, hOldPen;
GetClientRect(hwnd, &rt);
//四角を描く
hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
hOldPen = (HPEN)SelectObject(hdc, (HPEN)hPen);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
Rectangle(hdc, 0, 0, rt.right, rt.bottom);
SelectObject(hdc, hOldPen);
DeleteObject(hPen);
//文字列の描画
TextOut(hdc, 0, 0, s, strlen(s));
//描画の終了
EndPaint(hwnd, &ps);
}
break;
//ウィンドウを破壊する時の処理
case WM_DESTROY:
//リージョンの破棄
DeleteObject(hRgn);
//メイン関数のループを終了
PostQuitMessage(0);
break;
//デフォルトの処理に対してデフォルトの処理を返す
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return NULL;
}
void GetClientPos(HWND hwnd, POINT *point){
RECT rect;
GetWindowRect(hwnd, &rect);
point->x = rect.left;
point->y = rect.top;
ScreenToClient(hwnd, point);
point->x *= -1;
point->y *= -1;
}