ホームに戻る
 フルスクリーン

#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;
}

inserted by FC2 system