What's the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071025-00/?p=24693
Raymond Chen?2007年10月25日
簡要
文章討論了
EM_SETHILITE
和EM_GETHILITE
消息在文檔中顯示為“未實現”的原因。這些消息最初在2002年為面包屑欄設計,但隨著面包屑欄設計的變更,這些消息的功能被移除,消息編號被保留以避免構建失敗。文章強調了同時開發庫及其客戶端時的現實問題,即在進行重大更改時需要分階段進行,以確保所有客戶端能順利過渡。盡管這些消息現在沒有效果,但它們仍然存在于公共頭文件中,因為公共頭文件不允許更改。
正文
????????如果你查閱EM_SETHILITE
和EM_GETHILITE
消息的文檔,它們只會顯示“未實現”。這是怎么回事?
????????EM_SETHILITE
和EM_GETHILITE
消息是在2002年為面包屑欄添加的。在那個時代,面包屑欄并不是你在Windows Vista中看到的樣子,一系列帶有下拉箭頭的按鈕,每個按鈕代表層次結構中的一個級別。那時候的面包屑欄只是一個外觀華麗的地址欄(即,一個編輯控件)。面包屑欄不會為層次結構中的每個級別都有一個按鈕,而是如果你將鼠標懸停在路徑組件上(或使用鍵盤選擇它),它就會高亮顯示該路徑組件。面包屑欄沒有下拉箭頭,而是等待你將鼠標懸停,高亮的路徑會自動展開以顯示同級項目的菜單。
????????面包屑欄的設計改變了,那個“外觀華麗的地址欄”設計被放棄了。EM_SETHILITE
和EM_GETHILITE
消息的功能被移除,但是為了避免在有人使用這些消息的情況下造成構建失敗,消息編號被保留了下來。當然這些消息現在沒有任何效果了,但至少產品仍然可以構建。使用這些消息的人可以按照自己的時間表逐漸放棄它們。
????????這是同時開發庫及其客戶端的一個現實問題。如果你是負責庫的人,并且你打算進行重大更改,你必須分階段進行,以便所有的客戶端都能順利過渡。你不能自己更改所有的客戶端,因為它們不屬于你更改的范圍,你可能也無法訪問源代碼。客戶端屬于其他團隊,甚至其他公司。你必須與這些其他團隊協調,并讓他們知道你的過渡計劃,以便他們可以將其納入自己的時間表。
????????EM_GETHILITE
和EM_SETHILITE
消息仍然存在的事實只是從未被清理的遺留污垢。現在頭文件中的內容是過渡計劃的倒數第二階段。最后階段本應是完全從頭文件中移除這些消息,但是“不允許對公共頭文件進行更改”的截止日期在最后階段執行之前就到了,現在這些消息在一個公共頭文件中,它們必須永遠保留在那里。即使它們什么也不做。