[翻譯]-Windows CE 程式設計 (3rd 版)–5.2 公用控制項(八)

來源:互聯網
上載者:User

儲存帶區布局                                             翻譯:tellmenow

命令帶控制項的可配置能力給程式員帶來一個問題。使用者重新排列帶區後,希望定製的布局在應用程式下一次啟動的時候能夠恢複。通過使用下面的函數,可以輕易的達到目的:
BOOL CommandBans_GetRestoreInformation (HWND hwndCmdBands, UINT uBand, LPCOMMANDBANDSRESTOREINFO pcbr);
該函數將單個帶區的資訊儲存到COMMANDBANDSRESTOREINFO結構中。該函數有兩個參數,一個是命令帶控制項控制代碼,一個是將要查詢的帶區的索引值。下面的程式碼片段展示了如何查詢命令帶控制項中每個帶區的資訊。
// Get the handle of the command bands control.
hwndCB = GetDlgItem (hWnd, IDC_CMDBAND);
  
// Get information for each band.
for (i = 0; i < NUMBANDS; i++) {
    // Get band index from ID value.
    nBand = SendMessage (hwndCB, RB_IDTOINDEX, IDB_CMDBAND+i, 0);
  
    // Initialize the size field, and get the restore information.
    cbr[i].cbSize = sizeof (COMMANDBANDSRESTOREINFO);
    CommandBands_GetRestoreInformation (hwndCB, nBand, &cbr[i]);
}

上面的代碼使用RB_IDTOINDEX訊息,將帶區ID轉化成帶區索引,以用於CommandBands_GetRestoreInformation。結構中的資料通常儲存在系統註冊表中。我將在第8章“檔案和註冊表”中講解如何讀寫註冊表資料。

當應用程式恢複的時候,應該從註冊表中讀取恢複資訊,並在建立命令帶控制項的時候使用。
// Restore configuration to a command band.
COMMANDBANDSRESTOREINFO cbr[NUMBANDS];
REBARBANDINFO rbi;
  
// Initialize size field.
rbi.cbSize = sizeof (REBARBANDINFO);
  
// Set only style and size fields.
rbi.fMask = RBBIM_STYLE | RBBIM_SIZE;
  
// Set the size and style for all bands.
for (i = 0; i < NUMBANDS; i++) {
    rbi.cx = cbr[i].cxRestored;
    rbi.fStyle = cbr[i].fStyle;
  
    nBand = SendMessage (hwndCB, RB_IDTOINDEX, cbr[i].wID, 0);
    SendMessage (hwndCB, RB_SETBANDINFO, nBand, (LPARAM)&rbi);
}
  
// Only after the size is set for all bands can the bands
// needing maximizing be maximized.
for (i = 0; i < NUMBANDS; i++) {
    if (cbr[i].fMaximized) {
        nBand = SendMessage (hwndCB, RB_IDTOINDEX, cbr[i].wID, 0);
        SendMessage (hwndCB, RB_MAXIMIZEBAND, nBand, TRUE);
    }
}

上面的代碼假設命令帶控制項已經按照預設配置建立。在實際應用中,尺寸和風格的恢複資訊用於最初建立控制項的時候。在那種情況下,剩餘的將根據COMMANDBANDSRESTOREINFO結構中fMaximized域的狀態來決定是否最大化帶區。只有在所有的帶區被建立和適當的調整尺寸後,才做上面代碼中的最後一步。

該系統對儲存和恢複帶區的布局有一個限制,就是您沒有辦法判斷帶區在控制項中的順序。帶區索引不能提供可靠的資訊,因為經過使用者幾次重新安排帶區後,索引值既不連續也不是按任何定義的順序。解決該問題的唯一方式是強制排列帶區,這樣使用者就不能重新排列帶區。通過設定RBS_FIXEDORDER風格,可以達到這個目的。這樣可以解決這個問題,但如果使用者想要一個不同的順序,就不能夠給使用者提供協助了。在本節最後的例子程式中,我使用帶區索引值來猜測順序。但這個方法不能保證一定能有效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.