国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

VC中CDC、HDC、pDC區別與聯系及相互轉換

2020-01-26 14:49:38
字體:
來源:轉載
供稿:網友

1.CDC *pDC和HDC hdc有什么不同,類似的有CWnd *pWnd和HWnd?

pDC是類指針
HDC是windows句柄
通過pDC獲得hdc:
HDC hdc=pDC->GetSafeHdc();
通過hdc獲得pDC:
CDC *pDC=new CDC;
pDC->Attach(hdc);

2.hDC和CDC有本質區別

HDC是WINDOWS的一種數據類型,是設備描述句柄。而CDC是MFC里的一個類,它封裝了幾乎所有的關于HDC的操作。也可以這樣說,HDC定義的變量指向一塊內存,這內存用來描述一個設備的相關的內容,所以也可以認為HDC定義的是一個指針;而CDC類定義一個對象,這個對象擁有HDC定義的一個設備描述表,同時也包含與HDC相關的操作的函數。這與HPEN和CPen,POINT與CPoint之間的差別是一樣的。

CDC是對hDC的相關操作進行封裝,例如CDC的一個TextOut函數隱去其錯誤檢測,完全可以簡化到這樣程度CDC:TextOut( int x, int y, const CString& str )
{
   TextOut( m_hDC, x, y, (LPCTSTR)str, str.GetLength() );
}

m_hDC就是CDC的成員變量HDC m_hDC;
CDC有一個operator HDC() const { return m_hDC; }  
你可以把它當成一個HDC使用

3.this是dc輸出目標窗口的指針,通過它可以得到窗口句柄,對象帶參構造這有什么奇怪的呢?  

   CPaintDC        無效區dc,相當于BeginPaint,    EndPaint  
   CClientDC       客戶區dc,相當于GetDC,         ReleaseDC  
   CWindowDC       整窗口dc, 相當于GetWindowDC,   ReleaseDC  
   CDC             任何dc,   相當于CreateDC,      DeleteDC

四、區別與聯系

HDC是句柄;CDC是MFC封裝的Windows   設備相關的一個類;CClientDC是CDC的衍生類,產生對應于Windows客戶區的對象
HDC是WINDOWS的一種數據類型,是設備描述句柄。
而CDC是MFC里的一個類,它封裝了幾乎所有的關于HDC的操作。  
也可以這樣說,HDC定義的變量指向一塊內存,這塊 內存用來描述一個設備的相關的內容,所以也可以   認為HDC定義的是一個指針;而CDC類定義一個對象,   這個對象擁有HDC定義的一個設備描述表,同時也包   含與HDC相關的操作的函數。  
這與HPEN和CPen,POINT與CPoint之間的差別是一樣的。

五、獲得CDC *

CDC* pDC
pDC=GetDC();

六、獲得hdc

HDC hDC;
1,hDC=GetDC(pCxp->hWnd);
2,pDC->m_hDC;
3,
MEMDCXP Mdcxp;
GetMemDCXP(&Mdcxp);
hDC = Mdcxp.hMemDC;
4,hDC=::GetDC(HWND handle)

七、轉換

CDC* pDC
HDC hDC;
pDC=Attach(hDC);
hDC=GetSafeHDC(pDC);
pDC->m_hDC==hDC

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 通海县| 资兴市| 云林县| 建湖县| 江永县| 通道| 彰武县| 肇源县| 田阳县| 奉节县| 甘德县| 县级市| 九寨沟县| 漳浦县| 阿合奇县| 株洲市| 尼木县| 灵寿县| 贵港市| 萍乡市| 溧水县| 辽宁省| 珠海市| 太仆寺旗| 论坛| 苍溪县| 建瓯市| 郓城县| 南陵县| 威远县| 博罗县| 忻州市| 鄄城县| 老河口市| 临城县| 黄浦区| 汉沽区| 周口市| 五河县| 保康县| 青浦区|