zoukankan      html  css  js  c++  java
  • 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.
    
  • 相关阅读:
    ado.net的基本特性
    The relationship's type
    the relationship's cardinality
    复杂心情中。。。
    the relationship's existence.
    ORACLE中国的短视
    ADO.net连接数据库
    虚拟基类的初始化
    递归实现全排列
    Factory Methods
  • 原文地址:https://www.cnblogs.com/del/p/1166620.html
Copyright © 2011-2022 走看看