HOWTO: Find the Edge of a Task Bar

ID: Q179908

The information in this article applies to:

SUMMARY

When you use the SHAppBarMessage() function to retrieve information about a task bar, you do not receive a message that indicates where the AppBar position is relative to the edges of the screen. You use ABE_LEFT, ABE_RIGHT, ABE_TOP, and ABE_BOTTOM to create the task bar, but you do not get a message call that returns the edge position after the task bar is created. This article shows how to find the edge of a task bar.

MORE INFORMATION

The following function called GetEdge() uses the message ABM_GETTASKBARPOS to get the bounding rectangle coordinates to determine where the task bar appears.

Sample Code

   void CMainFrame::OnGetTaskbarPos()  // Message handler.
      {
         // Get a pointer to the Windows task manager.
      CWnd *pwnd = FindWindow("Shell_TrayWnd", NULL);

      if (pwnd != NULL)
      {
         APPBARDATA abd;

         abd.cbSize = sizeof(APPBARDATA);
         abd.hWnd = phwnd->m_hWnd;

         SHAppBarMessage(ABM_GETTASKBARPOS, &abd);

         UINT uEdge = GetEdge(abd.rc);

         switch(uEdge)
         {
         case ABE_LEFT:
            break;
         case ABE_RIGHT:
            break;
         case ABE_TOP:
            break;
         case ABE_BOTTOM:
            break;
         default:
            AfxMessageBox("abd.uEdge not found");
                     return;
            }
         }
      }

      UINT CMainFrame::GetEdge(CRect rc)
      {
      UINT uEdge = -1;

      if (rc.top == rc.left && rc.bottom > rc.right)
      {
          uEdge = ABE_LEFT;
      }
      else if (rc.top == rc.left && rc.bottom < rc.right)
      {
          uEdge = ABE_TOP;
      }
      else if (rc.top > rc.left )
      {
          uEdge = ABE_BOTTOM;
      }
      else
      {
          uEdge = ABE_RIGHT;
      }

         return uEdge;
      }

Additional query words:
Keywords          : kbcode kbAppToolBar kbNTOS400 kbWinOS2000 kbWinOS95 kbWinOS98 kbGrpShell 
Issue type        : kbhowto

Last Reviewed: December 17, 1998