首頁 > 易卦

IContextMenu第九部分:新增自定義選單

作者:由 漫漫開發路 發表于 易卦日期:2023-01-03

如何新增自定義選單裡面的內容

我們先具體來看看IContextMenu::QueryContextMenu裡的幾個引數。其中有三個引數(indexMenu, idCmdFirst和idCmdLast)可以用來控制上下文選單新增的目標位置。為了演示這個概念,我們會嘗試在我們的上下文選單中新增兩條自定義的選單專案,就讓我們稱它們為”Top”和”Bottom”吧。

首先,我們需要為這兩個自定義選單定義識別符號,如下圖所示:

IContextMenu第九部分:新增自定義選單

在上面的程式碼中,我們修改了SCRATCH_QCM_LAST值以為我們的兩個自定義選單空出位置,然後我們分別定義了IDM_TOP和IDM_BOTTOM作為自定義選單的標識。

透過和之前的程式碼進行比較,你就會發現,我們為自定義選單保留了一段大小為0x1000的空間,同時IContextMenu可以使用剩餘的0x0001到0x6FFF之間的空間作為系統選單識別符號。

當然,我們也可以透過增加SCRATCH_QCM_FIRST的值,而不是減小SCRATCH_QCM_LAST的值,這是同樣的道理。增加SCRATCH_QCM_FIRST的值是保留低位空間,減小SCRATCH_QCM_LAST的值則是保留高位空間。

下圖是經過修改之後的程式碼:

IContextMenu第九部分:新增自定義選單

IContextMenu第九部分:新增自定義選單

程式碼解析

在我們呼叫

IContextMenu::QueryContextMenu之前,我們添加了我們的自定義選單。因為我們在定義識別符號時特意規避了可能存在的識別符號衝突,所以這裡不會有任何意外發生。再次需要注意,這裡呼叫QueryContextMenu時,我們傳遞了插入位置引數1,而不是0。

當我們傳遞上下文選單給

IContextMenu::QueryContextMenu時,建立的選單如下圖所示:

IContextMenu第九部分:新增自定義選單

由於我們選擇1為插入位置,這就是說,我們要求上下文選單處理器在位置1處新增它自己的選單,同時會將當前在位置1上的選單項依次下推,如下圖所示:

IContextMenu第九部分:新增自定義選單

當我們點選選單時,我們這裡做了一次判斷,如果使用者點選的是我們的自定義選單,則我們直接進行處理,如果點選的是系統的上下文選單,則我們將點選事件傳送給系統處理器進行後續處理。

總結

今天的內容十分具有實戰意義,在需要新增自定義選單的場景下,特別有用。

最後

Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。

本文來自:《How to host an IContextMenu, part 9 – Adding custom commands》

最近我寫了個東西

正如你們所知道的,拓撲梅爾智慧辦公平臺(Topomel Box)是一款綠色軟體,主要面向經常使用電腦的朋友。它提供了各種提升辦公效率的小功能,同時操作上儘可能地簡單方便。

我想:你值得擁有。

IContextMenu第九部分:新增自定義選單