vc中如何使用設(shè)備描述表
發(fā)布時間:2008/8/23 0:00:00 訪問次數(shù):919
windows 程序在屏幕、打印機或其它設(shè)備上畫圖時,它并不是將像素直接輸出到設(shè)備上,而是將圖繪制到由設(shè)備描述表表示的邏輯意義上的"顯示平面"上去。設(shè)備描述表(dc)是windows中的一種數(shù)據(jù)結(jié)構(gòu),它包含gdi需要的所有關(guān)于顯示界面情況的描述字段,包括相連的物理設(shè)備和各種各樣的狀態(tài)信息。在windows畫圖之前,windows程序從gdi獲取設(shè)備描述表句柄(hdc),并在每次調(diào)用完gdi輸出函數(shù)后將句柄返回給gdi。本文將對如何獲得和釋放 hdc以及 cdc及其派生類的使用方法進行演示說明。
下載示例工程 dcdemo 具體說明:
1、按鈕 idc_getdc_apinull的函數(shù)
void cdcdemodlg::ongetdcapinull()
{ hdc hdc=::getdc(null);
::movetoex(hdc,0,0,null);
lineto(hdc,200,20);
::releasedc(null,hdc); }
該段代碼具體演示了如何使用api 函數(shù)getdc(null),取得屏幕的hdc.并進行畫圖。 hdc getdc(hwnd hwnd); //功能:取得hwnd窗口的設(shè)備描述表句柄。當hwnd參數(shù)為null時,取得整個屏幕的設(shè)備描述表句柄。 movetoex和lineto演示在dc上畫一條直線記住,最后調(diào)用releasedc釋放hdc資源。 int releasedc ( hwnd hwnd,//你要控制的那個窗口的句柄,如果你在getdc函數(shù)傳遞的是null,現(xiàn)在還要傳遞null。 hdc hdc //dc的句柄 ); 編譯運行程序,按下按鈕,發(fā)現(xiàn)屏幕的左上角處畫了一條直線。
2、按鈕 idc_getdc_api的函數(shù)
void cdcdemodlg
::ongetdcapi()
{ hdc hdc=::getdc(m_hwnd);
::movetoex(hdc,0,0,null);
lineto(hdc,200,50);
::releasedc(m_hwnd,hdc); }
這段代碼與前一段代碼唯一的區(qū)別是getdc的參數(shù)不再是null,而改為cwnd的成員變量m_hwnd,即對話框窗口的句柄。對比兩段代碼運行結(jié)果,深入體會api函數(shù) getdc。
3、按鈕idc_getdc_cwnd的函數(shù)
void cdcdemodlg::ongetdccwnd()
{ cdc *pdc=getdc();
pdc->moveto(0,0);
pdc->lineto(200,100);
releasedc(pdc); }
該段代碼演示使用mfc cwnd類的 getdc函數(shù)和releasedc的方法,使用該方法在程序窗口中畫圖非常方便。為了避免獲取和釋放設(shè)備描述表所帶來的麻煩,mfc提供了一些cdc派生類,如cpaintdc,cclientdc,cwindowdc,這些類被設(shè)計為可直接進行實例化。各個類的構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用相應(yīng)的函數(shù)捕獲和釋放設(shè)備描述表,從而使得更加方便簡捷。
4、按鈕idc_cclientdc的函數(shù)
void cdcdemodlg::oncclientdc() {
cclientdc dc(this);
cbrush brush(rgb(255,0,0));
dc.fillrect(crect(0,0,100,100),&brush); }
該段代碼演示了 cclientdc的具體使用方法,通過測試可以看出和 cclientdc對象相對應(yīng)的設(shè)備描述表是窗口的客戶區(qū) 。 cpaintdc類是從cdc類派生出來的,在構(gòu)造時自動調(diào)用cwnd::beginpaint,析構(gòu)時調(diào)用cwnd::endpaint。通常cpaintdc用來響應(yīng)wm_paint消息,一般應(yīng)用在onpaint函數(shù),對窗口的客戶區(qū)進行操作。
5、按鈕idc_cwindowdc的函數(shù)
void cdcdemodlg::oncwindowdc()
{ cwindowdc dc(this);
cpen pen(ps_solid,3,rgb(0,255,0));
cpen *poldpen=dc.selectobject(&pen);
dc.moveto(0,0);
dc.lineto(200,200);
dc.selectobject(poldpen); }
運行并觀察畫線的起始位置?梢钥闯鯿windowdc對象和整個窗口相對應(yīng)。
6、按鈕idc_pointer的函數(shù)
void cdcdemodlg::onpointer()
{ cwindowdc *pdc;
pdc=new cwindowdc(this);
pdc->moveto(0,0);
pdc->lineto(200,250);
delete pdc; }
這段代碼演示了如何在堆中創(chuàng)建指向cdc派生類的指針,再利用該指針進行畫圖,最后請使用delete pdc; 釋放指針。
歡迎轉(zhuǎn)載,信息來自維庫電子市場網(wǎng)(www.dzsc.com)
windows 程序在屏幕、打印機或其它設(shè)備上畫圖時,它并不是將像素直接輸出到設(shè)備上,而是將圖繪制到由設(shè)備描述表表示的邏輯意義上的"顯示平面"上去。設(shè)備描述表(dc)是windows中的一種數(shù)據(jù)結(jié)構(gòu),它包含gdi需要的所有關(guān)于顯示界面情況的描述字段,包括相連的物理設(shè)備和各種各樣的狀態(tài)信息。在windows畫圖之前,windows程序從gdi獲取設(shè)備描述表句柄(hdc),并在每次調(diào)用完gdi輸出函數(shù)后將句柄返回給gdi。本文將對如何獲得和釋放 hdc以及 cdc及其派生類的使用方法進行演示說明。
下載示例工程 dcdemo 具體說明:
1、按鈕 idc_getdc_apinull的函數(shù)
void cdcdemodlg::ongetdcapinull()
{ hdc hdc=::getdc(null);
::movetoex(hdc,0,0,null);
lineto(hdc,200,20);
::releasedc(null,hdc); }
該段代碼具體演示了如何使用api 函數(shù)getdc(null),取得屏幕的hdc.并進行畫圖。 hdc getdc(hwnd hwnd); //功能:取得hwnd窗口的設(shè)備描述表句柄。當hwnd參數(shù)為null時,取得整個屏幕的設(shè)備描述表句柄。 movetoex和lineto演示在dc上畫一條直線記住,最后調(diào)用releasedc釋放hdc資源。 int releasedc ( hwnd hwnd,//你要控制的那個窗口的句柄,如果你在getdc函數(shù)傳遞的是null,現(xiàn)在還要傳遞null。 hdc hdc //dc的句柄 ); 編譯運行程序,按下按鈕,發(fā)現(xiàn)屏幕的左上角處畫了一條直線。
2、按鈕 idc_getdc_api的函數(shù)
void cdcdemodlg
::ongetdcapi()
{ hdc hdc=::getdc(m_hwnd);
::movetoex(hdc,0,0,null);
lineto(hdc,200,50);
::releasedc(m_hwnd,hdc); }
這段代碼與前一段代碼唯一的區(qū)別是getdc的參數(shù)不再是null,而改為cwnd的成員變量m_hwnd,即對話框窗口的句柄。對比兩段代碼運行結(jié)果,深入體會api函數(shù) getdc。
3、按鈕idc_getdc_cwnd的函數(shù)
void cdcdemodlg::ongetdccwnd()
{ cdc *pdc=getdc();
pdc->moveto(0,0);
pdc->lineto(200,100);
releasedc(pdc); }
該段代碼演示使用mfc cwnd類的 getdc函數(shù)和releasedc的方法,使用該方法在程序窗口中畫圖非常方便。為了避免獲取和釋放設(shè)備描述表所帶來的麻煩,mfc提供了一些cdc派生類,如cpaintdc,cclientdc,cwindowdc,這些類被設(shè)計為可直接進行實例化。各個類的構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用相應(yīng)的函數(shù)捕獲和釋放設(shè)備描述表,從而使得更加方便簡捷。
4、按鈕idc_cclientdc的函數(shù)
void cdcdemodlg::oncclientdc() {
cclientdc dc(this);
cbrush brush(rgb(255,0,0));
dc.fillrect(crect(0,0,100,100),&brush); }
該段代碼演示了 cclientdc的具體使用方法,通過測試可以看出和 cclientdc對象相對應(yīng)的設(shè)備描述表是窗口的客戶區(qū) 。 cpaintdc類是從cdc類派生出來的,在構(gòu)造時自動調(diào)用cwnd::beginpaint,析構(gòu)時調(diào)用cwnd::endpaint。通常cpaintdc用來響應(yīng)wm_paint消息,一般應(yīng)用在onpaint函數(shù),對窗口的客戶區(qū)進行操作。
5、按鈕idc_cwindowdc的函數(shù)
void cdcdemodlg::oncwindowdc()
{ cwindowdc dc(this);
cpen pen(ps_solid,3,rgb(0,255,0));
cpen *poldpen=dc.selectobject(&pen);
dc.moveto(0,0);
dc.lineto(200,200);
dc.selectobject(poldpen); }
運行并觀察畫線的起始位置?梢钥闯鯿windowdc對象和整個窗口相對應(yīng)。
6、按鈕idc_pointer的函數(shù)
void cdcdemodlg::onpointer()
{ cwindowdc *pdc;
pdc=new cwindowdc(this);
pdc->moveto(0,0);
pdc->lineto(200,250);
delete pdc; }
這段代碼演示了如何在堆中創(chuàng)建指向cdc派生類的指針,再利用該指針進行畫圖,最后請使用delete pdc; 釋放指針。
歡迎轉(zhuǎn)載,信息來自維庫電子市場網(wǎng)(www.dzsc.com)
熱門點擊
- CPLD開發(fā)板和FPGA開發(fā)板的區(qū)別
- 基于FPGA和AD1836的I2S接口設(shè)計
- vc中如何使用設(shè)備描述表
- Visual C++中調(diào)用DLL實現(xiàn)數(shù)據(jù)加密
- Visual C++6.0 API函數(shù)操作技
- JavaCard CPU的設(shè)計與FPGA實現(xiàn)
- VC++中進程與多進程管理的方法
- 如何用C語言開發(fā)DSP嵌入式系統(tǒng)
- C和C++ 字符串字面量的比較
- Xilinx針對Virtex-5 FXT F
推薦技術(shù)資料
- 聲道前級設(shè)計特點
- 與通常的Hi-Fi前級不同,EP9307-CRZ這臺分... [詳細]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準定位
- 高效先進封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究