1. 程式人生 > >GDI程式設計需要注意的地方(控制代碼洩漏)

GDI程式設計需要注意的地方(控制代碼洩漏)

寫GDI的時候,我們經常會由於粗心大意,忘記釋放GDI資源,導致GDI控制代碼洩露。再加上如果單元測試做的不好,就會在產品釋出以後發生問題。

眾所周知,Windows上對於一個程序允許的最大GDI控制代碼數量為9999,如果程式有大量的GDI控制代碼沒有被及時回收,那麼程式就會表現的不正常。如果這種問題發生在以前的WINDOWS 98年代,甚至會造成系統崩潰。


所以,這裡我將陸續記錄一些GDI程式設計需要注意的地方,作為今後單元測試中的一部分來進行:

1、Create()必須Delete(),包括CreateCompatibleDC

2、SelectObject()必須是成對出現

3、"H"打頭的一些GDI控制代碼,在使用完後要及時釋放。如::DeleteObject(HBITMAP),::DeleteDC(HDC)等

4、記住一個原則:自己建立的東西要自己釋放,如GetDC 要 ReleaseDC

5、MFC的GDI有很多問題,使用的時候要非常小心。建議最好直接用SDK寫。使用WTL中的GDI也是一個不錯的選擇。WTL中有些GDI物件在宣告的時候就可以決定是由解構函式來幫你釋放,還是由你自己釋放,非常方便。

相關推薦

GDI程式設計需要注意地方(控制洩漏)

寫GDI的時候,我們經常會由於粗心大意,忘記釋放GDI資源,導致GDI控制代碼洩露。再加上如果單元測試做的不好,就會在產品釋出以後發生問題。 眾所周知,Windows上對於一個程序允許的最大GDI控制代碼數量為9999,如果程式有大量的GDI控制代碼沒有被及時回收,那麼

Android異常一、非同步任務導致的視窗控制洩漏問題(記憶體洩漏

首先來看一下報錯日誌: 05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window [email protected] that was orig

利用windbg分析崩潰,控制洩漏,死鎖,CPU高,記憶體洩漏

Windbg的一些簡單使用命令 一、崩潰 1、  輸入.ecxr;kbn得到崩潰的堆疊 其中原始碼如下 2、  檢視堆疊和原始碼,發現第0幀導致崩潰,程式碼也是原生代碼 輸入.frame  0,切到第0幀如下 3、  輸入 dv 檢視當前幀的一些變數資訊       

emWin介面庫注意事項之自定義回撥函式之後,控制為0

        由於在嵌入式裝置上可供使用的介面庫很少,專案當中所使用的介面庫為德國SEGGER公司開發的emWin介面庫。使用上和windows的GDI大致類似,也提供了豐富的API介面。如果我們需要對控制元件進行自繪的話,一定要進行的一個操作是通過設定回撥

windows核心程式設計-程序的控制和如何獲得

程序控制代碼不同於程序核心物件的控制代碼 程序核心物件控制代碼:代表整個程序的 程序控制代碼:exe或者dll裝入某個程序的地址空間,有唯一的例項控制代碼,也可以叫做模組控制代碼 程序控制代碼的本質是程序模組在程序地址空間中的首地址! 一:GetModuleFileName

[windows程式設計] 如何利用控制操作其他windows窗體(1)

如何利用控制代碼操作其他windows窗體? 首先你需要獲得需要操作窗體(A)的控制代碼。 第二需要你獲得窗體(A)中控制元件的ID號,比如文字框(Edit)控制元件的ID 第三需要根據控制元件的ID獲得控制元件的控制代碼(hwnd) 第四根據hwnd對控制元件進行操作 明

寫網站經常需要用到的匯總

log false setfont 初始 設置 chrome 布局 兼容 name 常用視口 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0

[轉]開發者需要的 9 款比較工具

不同 http 工具 ubun upload .net 程序員 6.4 運行 轉載地址:https://blog.csdn.net/tzhuwb/article/details/77790830 對於經常寫代碼,又改代碼的程序員來說,如果之前寫的代碼,過了很久又需要改,那麽

imp匯入備份時報:無法轉換為環境字符集控制 ...

imp匯入備份時報:無法轉換為環境字符集控制代碼 ... 在imp 還原資料庫的時候出現問題如下; 這個問題是 你用 expdp匯出的 卻用客戶端的 imp 匯入;換成impdp匯入即可。   當用impdp 匯入 (impdp EMMS/EMMS12

WPF 視窗控制獲取和設定

WPF 視窗控制代碼設定和獲取 1、控制代碼類 WHwnd.cs public class WHwnd { /// <summary> /// 主窗體控制代碼 /// </summar

如何獲取視窗內文字框的控制

一  背景   某種情況下,需要從某窗體獲取該窗體文字框內的內容,發現文字框並沒有標題名,無法獲取文字框控制元件的控制代碼。接下來,我將介紹我獲取所需文字框控制元件控制代碼方法。 二  使用Spy++獲取   如圖,開啟Spy++可以直接獲取到

伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制數(轉)

原文連結:http://www.cnblogs.com/personnel/p/4583038.html 最近一二個月以來,我發現伺服器的記憶體佔用正按著每天60M的速度增加。 一臺windows 2003的伺服器(2G記憶體),剛剛啟起時佔用記憶體:600M左右。 執行20天后,記憶體佔用(PF使用)

伺服器記憶體線性增長,根據控制數查詢問題程序 伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制數(轉)

伺服器修改成nignx+xxfm之後 訪問速度變快了很多。但是伺服器記憶體每天線性增長30M左右。 網上找了很多資料都不行。根據這篇文章伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼數(轉) 檢視所有程序的控制代碼數,發現xxfm.exe程序的控制代碼數有3萬多,

MFC中獲取各個視窗之間的控制或者指標物件的方法

轉載:https://www.cnblogs.com/gavanwanggw/p/6743774.html MFC中獲取各個視窗之間的控制代碼或者指標物件的方法 MFC在非常多的對話方塊操作中,我們常常要用到在一個對話方塊中呼叫還有一個對話方塊的函式或變數.能夠用例如以下方法來解決.

[MFC] HWND(獲取控制元件或窗體控制) [大三TJB_708]

1 C++窗體物件和HWND 窗體物件是一個繼承於CWnd類的C++類的 物件。咱們可以用建構函式生成一個windows窗體,此windows窗體被一個 "window handle" (HWND)唯一標識,當一個窗體被建立後,此視窗的視窗控制代碼也響應的被建立。此視窗的視窗控制代碼被儲存在窗體

MFC 獲取當前視窗控制,或者父子視窗控制

父子視窗 在子視窗中,需要用到父視窗的控制代碼: AfxGetMainWnd()->m_hWnd 注:在父視窗中,也可以這麼用來呼叫自己視窗的控制代碼 在子視窗中,需要用到自己視窗的控制代碼 ChildDlg *pChildDlg ; pChildDlg->m_h

視窗與控制

視窗概念 視窗是windows應用程式中一個非常重要的元素,一個windows應用程式至少要有一個視窗,稱為主視窗。視窗就是螢幕上的矩形區域,是windows應用程式與使用者進行互動的介面。 一個應用程式視窗通常都包含標題欄、選單欄、系統選單欄、最小化框、最大化框、可調邊框,有的還有滾動條,

Dev_GridView獲取所選行的控制

這是官方幫助文件上的一句話: 此示例演示如何獲取所選行,然後更改其欄位值。 GetSelectedRows方法檢索所選行的控制代碼。 由於行控制代碼反映了在View中顯示行的順序,因此修改單行可 能會影響其他行的控制代碼(例如,如果對資料進行排序和/或過濾)。 為了防止可能的

1106Selenium web自動化測試經驗分享-開啟多個視窗,切換控制

在web自動化測試中,好像很少會出現多視窗和切換控制代碼的情景。我之前曾想過一個情景:如果我開啟多個視窗,該怎樣更快更好的切換控制代碼呢?今天做個小分享。 一)切換控制代碼(handle)(1) 首先說明下情景:百度搜索Python,在搜尋的結果中點選一個‘官網’的超連結,打開了一個

【虛擬機器】關於VMware 提示“無法獲得VMCI驅動程式的版本:控制無效”的解決方案

一、問題的出現     在VMware進行完虛擬機器安裝嚮導之後,剛要開啟虛擬機器進行作業系統的安裝時,會出現“無法獲得VMCI驅動程式的版本:控制代碼無效”的錯誤提示,如圖1 所示。(本人執行環境為Windows 10,VMware 12) &