当然可以实现拉.不过,在桌面的每个边缘,你只能有一个自动隐藏的appbar;不过你的代码中有重复.
BOOL CTryDlgDlg::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; abd.uEdge = ABE_RIGHT;
// 消息ABM_SETAUTOHIDEBAR本身就有注册的意思.所以你不能注册两回
BOOL RET = SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd); 
    //    g_uSide = ABE_TOP;      // default edge 
    } 
else 

        // Unregister the appbar. 
        SHAppBarMessage(ABM_REMOVE, &abd); 
    } 
    return TRUE; 
}

解决方案 »

  1.   

    smallfool(smallfool):
    不行嘛!还是隐藏不掉。你能不能把你做过的贴出来。
    或者email给我[email protected],谢谢啦!
      

  2.   

    窗口不能自动隐藏。
    SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd);
    的作用只是通知桌面自己是个隐藏栏,要桌面对此作出调整。
    要真正隐藏只能自己实现,一般来说是将自己MoveWindow缩到边界上去。
    SHAppBarMessage的其他消息也只有通知的义务,而不对窗口本身进行操作。
     
        
      

  3.   

    楼上的哥们,我实在不明白您所说的隐藏栏是啥东东?难道它不是窗口?其实从MSDN中相关资料中可以得知:桌面的任务条就是一个AppBar,当然或许我的理解有错,
      

  4.   

    隐藏栏是说 你的窗口向桌面声明自己是个可以隐藏的AppBar,这样桌面就可以占用窗口所在的位置,否则桌面将留出你的窗口所占位置,直接效果是桌面图标及其他应用窗口将自动避开你的窗口区域。SHAppBarMessage的作用只是 在“你的声明为AppBar的窗口” 与 “桌面和其他窗口”之间进行位置协商,以避免相互的冲突,但不对窗口的位置进行作用。即SHAppBarMessage只是个协议,
    协议的遵守要靠你自己完成,你可以遵守也可以不遵守,总之窗口是你自己的。MSDN里有大大小小的错误和模糊的地方,实际的情况自己编过才知道。
    哦,下班啰...