Windows API Primer   ポップアップメニュー

ホーム   目次

ポップアップメニュー

popupmenu.c


#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#define MINIMIZE 1
#define QUIT     2

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

  wc.style         = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc   = WndProc;
  wc.cbClsExtra    = 0;
  wc.cbWndExtra    = 0;
  wc.hInstance     = hInstance;
  wc.hIcon         = NULL;
  wc.hCursor       = NULL;
  wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
  wc.lpszMenuName  = NULL;
  wc.lpszClassName = TEXT("POPUP");

  RegisterClass(&wc);

  hwnd             = CreateWindow(TEXT("POPUP"),
				  TEXT("Windows API Primer"),
				  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
				  CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
				  NULL, NULL, hInstance, NULL);

  while (GetMessage(&msg, NULL, 0, 0))
    {
      DispatchMessage(&msg);
    }

  return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  HMENU hMenu;
  POINT point;

  switch (msg)
    {
    case WM_COMMAND:
      switch(wParam)
	{
	case MINIMIZE:
	  ShowWindow(hwnd, SW_MINIMIZE);
	  break;
	case QUIT:
	  SendMessage(hwnd, WM_CLOSE, 0, 0);
	  break;
	}
      break;
    case WM_RBUTTONUP:
      point.x = LOWORD(lParam);
      point.y = HIWORD(lParam);
      hMenu   = CreatePopupMenu();
      ClientToScreen(hwnd, &point);
      AppendMenu(hMenu, MF_STRING, MINIMIZE, TEXT("&Minimize"));
      AppendMenu(hMenu, MF_STRING, QUIT    , TEXT("&Quit"));
      TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
      DestroyMenu(hMenu);
      break;
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}
    


実行結果


ウィンドウを右クリックすると、ポップアップメニューが表示されます。そして Minimize 項目をクリックすると、ウィンドウが最小化されます。



39257 visits
Posted: Jun. 02, 2020
Update: Jun. 05, 2020

ホーム   目次