c++ GDI 中SelectObject使用方法和注意事项
<span editable-title"="" data-edit-id="1080552:1080552:2" style="line-height: 1.5; font-size: 12px; float: right; display: block; margin: 10px 0px 0px; color: rgb(51, 102, 204); font-weight: normal;">編輯本段示例
HDC hdc=GetDC(hwnd); HDC memdc=CreateCompatibleDC(hdc); RECT rc; BITMAP bmp; HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//從資源加載位圖 holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//這里把hbmp的位圖選擇到兼容DC memdc,之后這個兼容DC就擁有和 //hbmp同樣大小的繪圖區域,注意超出位圖返回的GDI輸出都是無效的. GetObject(hbmp,sizeof(BITMAP),&bmp);//這里獲取位圖的大小信息,事實上也是兼容DC繪圖輸出的范圍 SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight); DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中間位置輸出字符串 //這樣以來我們就相當于把hbmp這個位圖加上了文字標注,我們可以把這個增加了文字標注的位圖保存起來.一個簡單的圖像處理基本就OK了. SelectObject(memdc,holdbmp);//復原兼容DC數據.DeleteDC(memdc);
CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObject( CFont* pFont ); CBitmap* SelectObject( CBitmap* pBitmap ); int SelectObject( CRgn* pRgn ); CGdiObject* SelectObject( CGdiObject* pObject ); Selects an object into the device context. 把以對象選入設備環境 誰是設備環境??? DC? 謝謝啊。
回答
在GDI中,DC(Device context)是一個非常重要的概念。 有的書中,將DC翻譯為設備描述表(《Windows 程序設計 第五版》作者Charles Petzold), 也有的書將DC翻譯為設備上下文。 到底什么是DC? 用現實中的例子來理解可能更容易些。 如果你喜歡畫畫,你得先準備了畫布,畫筆,顏料…… 畫畫的環境搭建好了,你就可以畫畫了。 這個畫畫的環境,就是DC。 在圖形環境下,一切都是畫出來的,所以,你要準備好一個DC,才能在屏幕上畫畫。——寫字也是畫畫。 在畫畫的環境中,有哪些對象呢? 畫布——GDI對象之一:區域 畫筆——GDI對象之一:畫筆 顏料盒——GDI對象之一:調色板 如果要在畫筆上寫字的話,寫什么樣的字體呢?方正字體?徐靜蕾字體?——字體也是GDI對象之一。 有的畫筆比較粗,專用來刷大面積背景色的,這是刷子——GDI對象之一:刷子 如果你不想畫了,只想把別人畫好的畫,貼到你的畫布上,這也是可以的。——GDI對象之一:位圖。 所以,這里就有6種GDI對象可以用于DC。 現在開始畫畫了,你拿起了一只筆。——在Windows環境里,這叫選擇了一個畫筆對象:使用SelectOBject函數。當然,如果你沒帶筆也沒關系,Windows為你準備了幾只畫筆,你可以這樣申請系統提供的缺省畫筆:hPen = GetStockObject(WHITE_PEN); 如果你畫著畫著,覺得手中的筆用著不爽,可以換一只啊,沒關系的。——依舊是SelectObject()換筆。 當然,如果你走出了畫室,別完了把你的畫筆清除掉,要不畫室里全是筆啊,刷子啊,太亂了。——DeleteObject()
總結
以上是生活随笔為你收集整理的c++ GDI 中SelectObject使用方法和注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电路分析第一章 电路及其基本概念
- 下一篇: FFmpeg:视频转码、剪切、合并、播放