A CheckMenuItem

本文介绍了一个使用Windows API创建可交互菜单与状态栏的例子。通过动态显示与隐藏状态栏来响应菜单项的选择,展示了如何在Windows应用程序中实现基本的用户界面元素及其交互功能。
#include <windows.h>
#include <commctrl.h>

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

#define IDM_VIEW_STB 1

HWND ghSb;
HMENU ghMenu;


int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PWSTR lpCmdLine, int nCmdShow)
{
  MSG  msg;    
  WNDCLASSW wc = {0};
  wc.lpszClassName = L"Menu";
  wc.hInstance     = hInstance;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  wc.lpfnWndProc   = WndProc;
  wc.hCursor       = LoadCursor(0, IDC_ARROW);

  RegisterClassW(&wc);
  CreateWindowW(wc.lpszClassName, L"CheckMenu",
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                100, 100, 350, 250, 0, 0, hInstance, 0);

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

  return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
    WPARAM wParam, LPARAM lParam)
{   
  UINT state;

  switch(msg)  
  {
      case WM_CREATE:
          AddMenus(hwnd);
          
          InitCommonControls();//初始化标准控件


          // This code creates a statusbar,创建状态bar 也就是一个窗口
          ghSb = CreateWindowExW(0, STATUSCLASSNAMEW, NULL, 
              WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, 
              (HMENU) 1, GetModuleHandle(NULL), NULL);

          break;

      case WM_COMMAND:
          
          switch(LOWORD(wParam)) {
              case IDM_VIEW_STB:                                    
                  
                  state = GetMenuState(ghMenu, IDM_VIEW_STB, MF_BYCOMMAND); 

                  if (state == SW_SHOWNA) {
                    ShowWindow(ghSb, SW_HIDE); // 显示ghsb,即状态栏bar.
                    CheckMenuItem(ghMenu, IDM_VIEW_STB, MF_UNCHECKED);  
                  } else {
                    ShowWindow(ghSb, SW_SHOWNA);
                    CheckMenuItem(ghMenu, IDM_VIEW_STB, MF_CHECKED);  
                  }
                  
                  break;
          }
          break;

      case WM_SIZE:
          SendMessage(ghSb, WM_SIZE, wParam, lParam);          
          break;

      case WM_DESTROY:
          PostQuitMessage(0);
          break;
  }

  return DefWindowProcW(hwnd, msg, wParam, lParam);
}


void AddMenus(HWND hwnd) 
{
  HMENU hMenubar;

  hMenubar = CreateMenu();
   ghMenu = CreateMenu();

  AppendMenuW(ghMenu, MF_STRING, IDM_VIEW_STB, L"&Statusbar");
  CheckMenuItem(ghMenu, IDM_VIEW_STB, MF_CHECKED);  

  AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR) ghMenu, L"&View");
  
  SetMenu(hwnd, hMenubar);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值