Windows C プログラミング

Windows C プログラムスケルトン

#include<windows.h>
#include<stdlib.h>

#define WINDOW_CLASSNAME "SampleWindow1"
#define WINDOW_TITLE  "SampleWindow1"
#define BUTTON_CLASSNAME "BUTTON"
#define BUTTON1_ID 0
#define BUTTON1_TEXT  "Button1"
#define BUTTON2_ID 1
#define BUTTON2_TEXT  "Button2"

/*
* メッセージ表示サンプル
*/
int ShowMessage(HWND hwnd, LPCTSTR lpText, LPCTSTR lpCaption)
{
// return MessageBox(hwnd, lpText, lpCaption, MB_ICONINFORMATION);
return MessageBox(hwnd, lpText, lpCaption, MB_YESNO | MB_ICONQUESTION);
}

/*
* ウィンドウ生成初期化処理
*/
int Win32Sample_Create(HWND hwnd, LPARAM lp)
{
return 0;
/*
int nYesNo;
LPCREATESTRUCT lpcsWnd;

lpcsWnd = (LPCREATESTRUCT)lp;
nYesNo = MessageBox(hwnd, TEXT("ウィンドウを生成しますか?"),
   (LPCTSTR)lpcsWnd->lpszName, MB_YESNO | MB_ICONQUESTION);
if (nYesNo == IDYES) return 0;
else return -1;
*/
}

/*
* ウィンドウ描画処理
*/
int Win32Sample_Paint(HWND hwnd, LPARAM lp)
{
return 0;
/*
HDC hdc;
PAINTSTRUCT ps;
LPTSTR lptStr = TEXT("<Draw text>");

hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 10, 10, lptStr, lstrlen(lptStr));
EndPaint(hwnd, &ps);
return 0;
*/
}

/*
* ウィンドウプロシージャ
*/
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {

  /*
   * ウィンドウクローズで、ウィンドウを閉じなくする
   * 代替終了手段として、ウィンドウ右クリックで終了する。
  case WM_CLOSE:
   return 0;
  case WM_RBUTTONUP:
   DestroyWindow(hwnd);
   PostQuitMessage(0);
   return 0;
  */

  case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
  case WM_CREATE:
   return Win32Sample_Create(hwnd, lp);
  case WM_PAINT:
   Win32Sample_Paint(hwnd, lp);
   break;
  case WM_COMMAND:
   switch(LOWORD(wp)) {
   case BUTTON1_ID:
    MessageBox(hwnd, TEXT("Clicked!"), TEXT(BUTTON1_TEXT), MB_OK);
    break;
   case BUTTON2_ID:
    MessageBox(hwnd, TEXT("Clicked!"), TEXT(BUTTON2_TEXT), MB_OK);
    break;
   }
   return 0;
}

return DefWindowProc(hwnd, msg, wp, lp);
}

/*
* ウィンドウメイン処理
*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
HWND hButton1;
HWND hButton2;
HFONT hFont;
MSG msg;
WNDCLASS winc;

// ウィンドウクラスの定義
winc.style   = CS_HREDRAW | CS_VREDRAW;    // ウィンドウクラスの基本スタイル
winc.lpfnWndProc = WndProc;        // ウィンドウプロシージャ
winc.cbClsExtra  = 0;         // クラス構造体追加領域(通常0)
winc.cbWndExtra  = 0;         // ウィンドウ構造体追加領域(通常0)
winc.hInstance  = hInstance;       // インスタンスハンドル(WinMain引数
                // のインスタンスハンドルを指定)
winc.hIcon   = LoadIcon(NULL, IDI_APPLICATION);  // ウィンドウアイコンハンドル
winc.hCursor  = LoadCursor(NULL, IDC_ARROW);   // カーソルハンドル
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景色
winc.lpszMenuName = NULL;         // メニュー名
winc.lpszClassName = TEXT(WINDOW_CLASSNAME);    // ウィンドウクラス名

// ウィンドウクラスの登録
if (!RegisterClass(&winc)) return 0;

// ウィンドウの生成
hwnd = CreateWindow(
   TEXT(WINDOW_CLASSNAME),    // ウィンドウクラス名
   TEXT(WINDOW_TITLE),     // ウィンドウタイトル
   WS_OVERLAPPEDWINDOW | WS_VISIBLE, // ウィンドウスタイル
   CW_USEDEFAULT,      // ウィンドウ左上X座標
   CW_USEDEFAULT,      // ウィンドウ左上Y座標
   200,        // ウィンドウ幅
   200,        // ウィンドウ高さ
   NULL,        // 親ウィンドウのハンドル(メインウィンドウはNULL)
   NULL,        // メニューハンドル
   hInstance,       // インスタンスハンドル(WinMain引数のインスタンスハンドルを指定)
   NULL        // メッセージパラメータ
);
if (hwnd == NULL) return 0;

hFont = CreateFont(10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, TEXT("Courier"));
if (hFont == NULL) return 0;

hButton1 = CreateWindow(
  TEXT(BUTTON_CLASSNAME), TEXT(BUTTON1_TEXT),
  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
  0, 0, 100, 50,
  hwnd, (HMENU)BUTTON1_ID, hInstance, NULL
);
if (hButton1 == NULL){
  DeleteObject(hFont);
  return 0;
}

SendMessage(hButton1, WM_SETFONT, (WPARAM)hFont, 0);

hButton2 = CreateWindow(
  TEXT(BUTTON_CLASSNAME), TEXT(BUTTON2_TEXT),
  WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
  0, 50, 100, 50,
  hwnd, (HMENU)BUTTON2_ID, hInstance, NULL
);
if (hButton2 == NULL){
  DeleteObject(hFont);
  return 0;
}

SendMessage(hButton2, WM_SETFONT, (WPARAM)hFont, 0);

// ウィンドウの表示 -> ウィンドウ生成時に
// ShowWindow(hwnd, SW_SHOW);

// メッセージループ
while (GetMessage(&msg, NULL, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

DeleteObject(hFont);

return msg.wParam;
}

| | コメント (0) | トラックバック (0)