接觸MFC時間也不短了,對設(shè)備上下文的認識還是模糊的. 以下是輸入法編程要用到的"輸入法上下文"的一個口語化解釋, 由此有利于對設(shè)備上下文的理解. 輸入法上下文(HIMC):HIMC是什么?在輸入法編程時必然要接觸到輸入法上下文這個術(shù)語,剛接觸時聽起來實在是半懂不懂。由于輸入法是一個插件,它需要和調(diào)用它的應(yīng)用程序通訊,在輸入法中生成的編碼及重碼信息保存在哪里應(yīng)用程序才能正確的讀取呢?答案就在于輸入法上下文。輸入法上下文是由User.exe(一個系統(tǒng)進程)為應(yīng)用程序分配的內(nèi)存句柄,在應(yīng)用程序中啟動的輸入法在這塊內(nèi)存中寫入數(shù)據(jù),User.exe再將數(shù)據(jù)傳遞到應(yīng)用程序。 設(shè)備上下文(DC)我們不妨這樣理解: 兩個實體: 1. 一個窗口對象, 2. 要顯示此窗口的設(shè)備(顯示器,打印機等). 三個問題: 1. 這兩個對象怎么通訊呢? 2.假設(shè)要在窗口上(100,200)位置顯示的"ABCXXX", 這個字符串和坐標信息存放在哪里,怎樣傳給設(shè)備呢? 3. 假設(shè)要知道設(shè)備上顯示的字體大小或背景色,那么窗口對象從哪里去得到呢? 答案就在于設(shè)備上下文^-^ 。一個窗口對象創(chuàng)建時就會被分配一塊專門用于設(shè)備的內(nèi)存,窗口要顯示的內(nèi)容就寫到這里,要獲取設(shè)備的屬性也從這里拿(不知道能不能把設(shè)備上下文理解為窗口對象和設(shè)備之間的一塊共享內(nèi)存呢, 我想大概就是這樣.). 而我們對這塊內(nèi)容的合法訪問方式就是, 建一個CDC對象,把對象和這塊內(nèi)存關(guān)聯(lián)起來,通過CDC的方法進行通訊. 所以,兼容DC的理解就是: 生成這塊內(nèi)存的一個拷貝,在拷貝中做好顯示內(nèi)容處理,再把內(nèi)容復(fù)制到原DC. 轉(zhuǎn)自 sodickbird的Blog
本文來自CSDN博客,
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。