Google桌面在启动后会自动改变桌面大小,把自己嵌入到桌面的左边或右边,使任何窗体最大化之后都不会覆盖它,这是如何实现的?

解决方案 »

  1.   

    当我拖动非最大化窗体的时候还是会和Google桌面重叠 
    有可能是枚举窗体并捕获相应的鼠标消息键盘消息,然后再改变窗体的尺寸
      

  2.   

    是可以改变窗体大小,dahai9825 的思路应该是对的。但是对新打开的窗体都要修改他的窗体大小不是要用钩子?
      

  3.   

    一个Width属性就能改变窗体大小 你自己试下看procedure TForm1.Button1Click(Sender: TObject);
    begin
      self.WindowState:=wsMaximized
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      self.Width:=300;
    end;
      

  4.   

    现在测试又发现,如果我在任务栏关闭google 桌面程序,那在原来显示google的地方右键鼠标不能弹出菜单,而且我拉动窗体大小时拉不到google程序的地方,好像桌面大小被改变了一样。
      

  5.   

    托动是可以,但是拉动窗体大小时不能重叠到google desktop的面积,我想知道他是如何实现的(google desktop已经关闭的情况也是一样的)
      

  6.   

    是这样的,在最大化状态下是不能重叠的!如果非最大化状态在拉动窗体改变窗体大小时,是不能拉动到google 程序所占那块地方的(google程序被非法关闭后还有这种效果)
      

  7.   

    被我从msdn挖到了 http://msdn.microsoft.com/en-us/library/cc144177(VS.85).aspx
    楼主你搜一下 SHAppBarMessage ,有用delphi做的例子
      

  8.   

    只要这段代码吗?
    BOOL RegisterAccessBar(HWND hwndAccessBar, BOOL fRegister) 

        APPBARDATA abd;     // Specify the structure size and handle to the appbar. 
        abd.cbSize = sizeof(APPBARDATA); 
        abd.hWnd = hwndAccessBar;     if (fRegister) {         // Provide an identifier for notification messages. 
            abd.uCallbackMessage = APPBAR_CALLBACK;         // Register the appbar. 
            if (!SHAppBarMessage(ABM_NEW, &abd)) 
                return FALSE;         g_uSide = ABE_TOP;       // default edge 
            g_fAppRegistered = TRUE;     } else {         // Unregister the appbar. 
            SHAppBarMessage(ABM_REMOVE, &abd); 
            g_fAppRegistered = FALSE; 
        }     return TRUE; }