• Windows 编程[19] 改变菜单项的状态: GetMenuState、EnableMenuItem


    本例效果图:



    本例使用的资源文件(TestRes.rc):
    MyMenu1 MENUEX
    BEGIN
      MENUITEM "菜单"                   ,101
      MENUITEM "改变我的禁止与非禁止状态" ,102
      MENUITEM "改变"                   ,103
    END
    
    本例代码文件:
    program Project1;
    
    {$R 'TestRes.res' 'TestRes.rc'}
    
    uses
      Windows, Messages;
    
    {收到 WM_COMMAND 消息时需要做的工作}
    procedure OnCommand(h: HWND; wParam: Integer);
    var
      uState: UINT;
      hm: HMENU;
    const
      IDM_2 = 102; {102 和下面的103 都是在资源文件中指定的菜单标识}
    begin
      case LoWord(wParam) of
        103: begin  
               hm := GetMenu(h);
               uState := GetMenuState(hm, IDM_2, 0);
               if (uState and MFS_GRAYED) = 0 then
                 EnableMenuItem(hm, IDM_2, MFS_GRAYED)
               else
                 EnableMenuItem(hm, IDM_2, MFS_ENABLED);
               DrawMenuBar(h);
             end; 
      end;
    end;
    
    function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
    begin
      Result := 0;
      case msg of
        WM_COMMAND : OnCommand(wnd, wParam); {收到 WM_COMMAND 消息后调用 OnCommand 过程}
        WM_DESTROY : PostQuitMessage(0);
      else
        Result := DefWindowProc(wnd, msg, wParam, lParam);
      end;
    end;
    
    function RegMyWndClass: Boolean;
    var
      cls: TWndClass;
    begin
      cls.style         := CS_HREDRAW or CS_VREDRAW;
      cls.lpfnWndProc   := @WndProc;
      cls.cbClsExtra    := 0;
      cls.cbWndExtra    := 0;
      cls.hInstance     := HInstance;
      cls.hIcon         := 0;
      cls.hCursor       := LoadCursor(0, IDC_ARROW);
      cls.hbrBackground := HBRUSH(COLOR_WINDOW + 1);
      cls.lpszMenuName  := 'MyMenu1';
      cls.lpszClassName := 'MyWnd';
      Result := RegisterClass(cls) <> 0;
    end;
    
    {程序入口}
    const
      tit = 'New Form';
      ws = WS_OVERLAPPEDWINDOW;
      x = 100; y = 100; w = 300; h = 180;
    var
      hWnd: THandle;
      Msg : TMsg;
    begin
      RegMyWndClass;
      hWnd := CreateWindow('MyWnd', tit, ws, x, y, w, h, 0, 0, HInstance, nil);
      ShowWindow(hWnd, SW_SHOWNORMAL);
      UpdateWindow(hWnd);
    
      while(GetMessage(Msg, 0, 0, 0)) do
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
    end.
    
  • 相关阅读:
    spring学习总结009 --- 重复id或name的bean定义允许覆盖allowBeanDefinitionOverriding
    spring学习总结008 --- IOC流程图
    spring学习总结007 --- IOC容器级生命周期接口
    spring学习总结006 --- Bean级生命周期接口
    spring学习总结005 --- IOC容器启动源码(事件机制)
    字体图标
    pycharm永久激活
    Linux常用命令
    Android Studio 更新后导入旧项目Bug解决
    Ubuntu更新源
  • 原文地址:https://www.cnblogs.com/del/p/1166620.html
Copyright © 2020-2023  润新知