• 过虑窗体最小化消息


    很久没写随笔,今天在写一个托盘程序的时候,要捕获窗口最小化的消息,在WndProc里面没有捕获到,后面在TWinControl找到实现WM_SYSCOMMAND的过程。重写就可以了,其实WndProc里面也是可以的,刚开始写错了。

    WndProc
    procedure TfrmMain.WndProc(var aMsg: TMessage);
    begin
    if aMsg.Msg = WM_COMMAND then
    begin
    Memo1.Lines.Add('WM_Command');
    inherited;
    end
    else
    if aMsg.Msg = WM_SYSCOMMAND then
    begin
    Memo1.Lines.Add('WM_SysCommand');
    inherited;
    end
    else
    inherited;
    end;
    WMCommand WMSysCommand
      procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
    procedure WMSysCommand(var aMsg: TWMSysCommand); message WM_SYSCOMMAND;

    procedure TfrmMain.WMCommand(var Message: TWMCommand);
    begin
    Memo1.Lines.Add(Format('ID:%d',[Message.ItemID ]));
    inherited;
    end;

    procedure TfrmMain.WMSysCommand(var aMsg: TWMSysCommand);
    begin
    if aMsg.CmdType and $FFF0 = SC_MINIMIZE then
    begin
    Self.Hide;
    Shell_NotifyIcon(NIM_ADD, @FTrayICONData)
    end
    else
    inherited;
    end;

    WMSysCommand用来响应最大最小化以及关闭的消息,点击主菜单的时候也会响应,点击菜单项的时候响应的是WMCommand,消息里面包括有菜单的ID,大概是这样没深入研究。


  • 相关阅读:
    POJ 1315 Don't Get Rooked
    POJ 2051 Argus
    POJ 1942 Paths on a Grid
    POJ 2151 Check the difficulty of problems
    POJ 3349 Snowflake Snow Snowflakes
    POJ 1753 Flip Game
    POJ 2392 Space Elevator
    POJ 2385 Apple Catching
    POJ 2356 Find a multiple
    POJ 2355 Railway tickets
  • 原文地址:https://www.cnblogs.com/Jekhn/p/2319880.html
Copyright © 2020-2023  润新知