代码改变世界

[视频监控]任务栏装拖拽处理

2013-08-26 16:22  鉴于  阅读(467)  评论(0编辑  收藏  举报

在windows系统中,任务栏通常位于桌面底部,可以隐藏或者不隐藏,其实任务栏可以被拖动到桌面的顶部或者左侧和右侧。

对于视频监控客户端来说,首先需要判断任务栏是否隐藏,如果用户设置为隐藏任务栏,则不需要考虑任务栏在上下左右的哪个位置,反正都是全屏覆盖。但是如果任务栏不隐藏,则需要获取任务栏的位置,然后计算除任务栏其他区域,将主窗体Move到该位置。

使用::FindWindow(_T("Shell_TrayWnd"), NULL); 获取任务栏句柄,

使用 SHAppBarMessage(ABM_GETSTATE, &apBar); 判断任务栏是否隐藏,如果返回值为ABS_AUTOHIDE,则用户设置任务栏为隐藏。

对于设置为隐藏任务栏的系统,直接计算出桌面的范围,直接MoveWindow主窗体,让主窗体覆盖桌面。再Return。

对于非隐藏桌面的系统需要获取任务栏位置。

使用SHAppBarMessage(ABM_GETTASKBARPOS, &apBar) 获取任务栏所在方位(上下左右)及高度宽度。

switch(uEdge) {
    case ABE_LEFT:   //任务栏在左侧

        ……
        break;
    case ABE_TOP:   //任务栏在顶部
        ……
        break;
    case ABE_RIGHT:    //任务栏在右侧
        ……
        break;
    case ABE_BOTTOM:
        ……
        break;
    default:
        ……
        break;
}

首先获取桌面的RECT,然后依据任务栏位置不同以及高度宽度不同,计算出剩余区域的范围,将主窗体MoveWindow到该位置就OK。一个好的应用软件,应该能在细节上考虑到广大用户的特点。