共用方式為


如何使用清單檢視工作區域

本主題示範如何使用清單檢視工作區域。 工作區是矩形的虛擬區域,可用來排列清單檢視控件中的專案。 工作區不是視窗,而且不能有可見的框線。 根據預設,清單檢視控件沒有工作區域。 藉由建立工作區,您可以在專案的左、上或右方建立空白框線,或導致水準滾動條在通常不會顯示時顯示。

您需要知道的事項

技術

必要條件

  • C/C++
  • Windows 使用者介面程序設計

指示

建立工作區

下列 C++ 程式代碼範例示範如何在其頂端、左方和右側建立具有 25 像素空白框線的工作區域。

void SetWorkAreas1(HWND hWndListView)
{
    #define  EMPTY_SPACE   25
    
    RECT  rcClient;
    
    GetClientRect(hWndListView, &rcClient);
    
    rcClient.left  +=  EMPTY_SPACE;
    rcClient.top   +=  EMPTY_SPACE;
    rcClient.right -= (EMPTY_SPACE * 2);
    
    SendMessage(hWndListView, LVM_SETWORKAREAS, 1, (LPARAM)&rcClient);

    return;
}

建立多個工作區域

下列 C++ 程式代碼範例示範如何在 控件中建立兩個工作區域。 每個工作區會使用大約一半的工作區,並以 25 像素的空白框線括住。

void SetWorkAreas2(HWND hWndListView)
{
    #define  EMPTY_SPACE   25
    
    RECT  rcClient;
    RECT  rcWork[2];
    
    GetClientRect(hWndListView, &rcClient);
    
    rcWork[0].left   = rcClient.left +      EMPTY_SPACE;
    rcWork[0].top    = rcClient.top +       EMPTY_SPACE;
    rcWork[0].right  = (rcClient.right/2) - EMPTY_SPACE;
    rcWork[0].bottom = rcClient.bottom;
    
    rcWork[1].left   = (rcClient.right/2) + EMPTY_SPACE;
    rcWork[1].top    = rcClient.top +       EMPTY_SPACE;
    rcWork[1].right  = rcClient.right -     EMPTY_SPACE;
    rcWork[1].bottom = rcClient.bottom;
    
    SendMessage(hWndListView, LVM_SETWORKAREAS, 2, (LPARAM)rcWork);

    return;
}

判斷專案所屬的工作區域

判斷項目所屬工作區的其中一種方法是執行下列動作:

  • 擷取清單檢視控件中所有工作區域的座標清單。
  • 擷取專案的座標。
  • 判斷專案座標是否位於其中一個工作區域的座標內。

下列 C++ 程式代碼範例中的應用程式定義函式會傳回項目所屬工作區域的索引。 如果函式失敗,則會傳回 –1。 如果函式成功,但專案不在任何工作區域內,則函式會傳回 0,因為不在工作區域內的所有專案都會自動成為工作區域零的成員。

int GetItemWorkingArea(HWND hWndListView, int iItem)
{
    UINT     uWorkAreas = 0;
    int      nReturn = -1;
    LPRECT   pRects;
    POINT    pt;
    
    if(!ListView_GetItemPosition(hWndListView, iItem, &pt))
        return nReturn;
    
    ListView_GetNumberOfWorkAreas(hWndListView, &uWorkAreas);
    
    if(uWorkAreas)
    {
        pRects = (LPRECT)GlobalAlloc(GPTR, sizeof(RECT) * uWorkAreas);
        
        if(pRects)
        {
            UINT  i;
            nReturn = 0;
    
            ListView_GetWorkAreas(hWndListView, uWorkAreas, pRects);
          
            for(i = 0; i < uWorkAreas; i++)
            {
                if(PtInRect((pRects + i), pt))
                {
                    nReturn = i;
                    break;
                }
            }
            GlobalFree((HGLOBAL)pRects);
        }
    }
    return nReturn;
}

清單檢視控件參考

關於清單檢視控件

使用清單檢視控件