设置Appbar大小和位置

【勇芳软件工作室】汉化HomePreviousNext

应用程序应在注册应用程序之后设置应用程序的大小和位置,用户用户移动或调整应用程序大小后,以及每当应用程序栏收到ABN_POSCHANGED通知消息时。在设置应用程序栏的大小和位置之前,应用程序通过发送ABM_QUERYPOS消息向系统查询批准的边界矩形。系统返回一个不影响任务栏或任何其他应用程序的边界矩形。系统通过矩形减法纯粹调整矩形;它不会保留矩形的初始大小。因此,应用程序应在发送ABM_QUERYPOS后根据需要重新调整矩形。

接下来,应用程序使用ABM_SETPOS消息将边界矩形传递回系统。然后它调用MoveWindow函数将appbar移动到位。

以下示例显示如何设置应用程序的大小和位置。

// AppBarQuerySetPos - 设置应用程序的大小和位置。

// uEdge - 应用栏所锚定的屏幕边

// lprc - 应用程序的当前边界矩形

// pabd - 具有hWnd和的APPBARDATA结构的地址

// cbSize成员填充

void PASCAL AppBarQuerySetPos(UINT uEdge,LPRECT lprc,PAPPBARDATA pabd)

{

int iHeight = 0;

int iWidth = 0;

pabd->rc = *lprc;

pabd->uEdge = uEdge;

//复制应用程序边界的屏幕坐标

//矩形进入APPBARDATA结构。

if ((uEdge == ABE_LEFT) ||

(uEdge == ABE_RIGHT)) {

iWidth = pabd->rc.right - pabd->rc.left;

pabd->rc.top = 0;

pabd->rc.bottom = GetSystemMetrics(SM_CYSCREEN);

} else {

iHeight = pabd->rc.bottom - pabd->rc.top;

pabd->rc.left = 0;

pabd->rc.right = GetSystemMetrics(SM_CXSCREEN);

}

//查询系统的批准大小和位置。

SHAppBarMessage(ABM_QUERYPOS, pabd);

//调整矩形,取决于它的边缘

// appbar被锚定

switch(uEdge){

case ABE_LEFT:

pabd->rc.right = pabd->rc.left + iWidth;

break;

case ABE_RIGHT:

pabd->rc.left = pabd->rc.right - iWidth;

break;

case ABE_TOP:

pabd->rc.bottom = pabd->rc.top + iHeight;

break;

case ABE_BOTTOM:

pabd->rc.top = pabd->rc.bottom - iHeight;

break;

}

//将最终的边界矩形传递给系统。

SHAppBarMessage(ABM_SETPOS, pabd);

//移动并调整应用程序的大小,使其符合

//传递给系统的边界矩形。

MoveWindow(pabd- > hWnd,pabd- > rc.left,pabd- > rc.top,

pabd- > rc.right - pabd- > rc.left,

pabd->rc.bottom - pabd->rc.top, TRUE);

}