ホームに戻る
 8、(コードサンプル)ダイアログボックス

#include <windows.h>

#define ID_B1 1
#define ID_B2 2

#define WINDOW_CLASS_NAME "WinClassName"
#define DIALOG_CLASS_NAME "DlgClassName"
#define WINDOW_NAME "WinName"

static HINSTANCE g_hInst;

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
  MSG msg;
  WNDCLASS wc, dc;
  HWND hWnd, hDlgwnd;

  // Register Class
  if(hPrevInst == NULL)
  {
    ZeroMemory(&wc, sizeof(wc));
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon((HINSTANCE)NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor((HINSTANCE)NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    wc.lpszClassName = WINDOW_CLASS_NAME;
    if(RegisterClass(&wc) == 0){
      return 0;
    }
  }

  if(hPrevInst == NULL)
  {
    ZeroMemory(&dc, sizeof(dc));
    dc.lpfnWndProc = (WNDPROC)DlgProc;
    dc.hInstance = hInst;
    dc.hIcon = LoadIcon((HINSTANCE)NULL, IDI_APPLICATION);
    dc.hCursor = LoadCursor((HINSTANCE)NULL, IDC_ARROW);
    dc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    dc.lpszClassName = DIALOG_CLASS_NAME;
    if(RegisterClass(&dc) == 0){
      return 0;
    }
  }

  g_hInst = hInst;
  
  // CreateWindow
  hWnd = CreateWindow(WINDOW_CLASS_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    (HWND)NULL, (HMENU)NULL, hInst, (LPVOID)NULL);
  if(hWnd == NULL){
    return 0;
  }

  // ShowWindow, UpdateWindow
  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);

  // Message Loop
  while(GetMessage(&msg, (HWND)NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
  static HWND hButton1, hDlgwnd;

  switch(uMsg){
    case WM_CREATE:
      hButton1 = CreateWindow("BUTTON", "Button1",
        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
        10, 10, 80, 20,
        hWnd, (HMENU)ID_B1, g_hInst ,NULL);
      hDlgwnd = CreateWindow(DIALOG_CLASS_NAME, "Dialog",
        WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,
        0, 0, 400, 300,
        hWnd, (HMENU)NULL, g_hInst, (LPVOID)NULL);
      return 0;
    case WM_SIZE:
      MoveWindow(hButton1, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
      return 0;
    case WM_COMMAND:
      switch(LOWORD(wParam)){
        case ID_B1:
          ShowWindow(hDlgwnd, SW_SHOW);
          return 0;
      }
      return DefWindowProc(hWnd, uMsg, wParam, lParam);
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }

  return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK DlgProc(HWND hDlgwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
  static HWND hButton2;

  switch(uMsg){
    case WM_CREATE:
      hButton2 = CreateWindow("BUTTON", "Button2",
        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
        0, 0, 0, 0,
        hDlgwnd, (HMENU)ID_B2, g_hInst ,NULL);
      return 0;
    case WM_SIZE:
      MoveWindow(hButton2, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
      return 0;
    case WM_COMMAND:
      switch(LOWORD(wParam)){
        case ID_B2:
          ShowWindow(hDlgwnd, SW_HIDE);
          return 0;
      }
      return DefWindowProc(hDlgwnd, uMsg, wParam, lParam);
    case WM_CLOSE:
      ShowWindow(hDlgwnd, SW_HIDE);
      return 0;
  }

  return DefWindowProc(hDlgwnd, uMsg, wParam, lParam);
}

inserted by FC2 system