void cmulti_displaydlg::getallmonitors()
}devid++;
} while (ret);
dev_list = devices;
std::list::iterator it;
for (it = dev_list.begin(); it != dev_list.end(); it++)
dev_mode_list = modes;
}windows中的圖形基本上是由從gdi.exe模組中輸出的函式處理的(儘管一些繪製函式實際上具有user.exe的入口點),gdi.exe模組呼叫在不同驅動程式檔案中的例程,其中有乙個.drv驅動程式檔案用於控制顯示螢幕,並且可能有乙個或多個其他的.drv驅動程式檔案用來控制印表機或繪圖儀。
windows gdi使用兩種座標系統。使用虛擬座標系統可以使程式不依賴於具體的硬體,使用裝置座標系統可以使程式和硬體緊密相聯。
gdi含有在windows應用程式內部執行、且與裝置無關的圖形操作函式,這些函式可產生各種各樣的線、正文和點陣圖,它們可以輸出到許多不同的輸出裝置上。gdi允許乙個應用程式產生筆、刷子、字型和點陣圖,以供特定的輸出操作使用。下面列出gdi中幾組比較常用的函式:
·裝置上下文函式
·橢圓和多邊形函式
·繪圖工具函式
·位圖函式
·繪圖屬性函式
·正文函救
·對映函式。
·座標函式
·元檔案(metafile)函式
·區域函式
·裁剪(clipping)函式·
視窗應用程式輸出圖形的操作步驟如下:
①取得指定視窗的當前顯示裝置上下丈,顯示裝置上下文實際上是乙個資料結構,它包括該視窗的引數及各種圖形、文字屬性的現行設定值,它們對以後的圖形、文字輸 出命令起控制作用。
②選擇使用者座標系及對映方式。
③設定使用者座標系中的觀察視窗和裝置座標系中的顯示視區。
④輸出圖形、文字和圖象。
⑤釋放所使用的顯示裝置上下文。
當想要在圖形輸出裝置(例如螢幕或印表機)上繪製圖形時,必須首先獲得裝置上下文的控制代碼。先給出這個控制代碼,windows才允許程式使用裝置,在gdi函式中將控制代碼作為乙個引數傳入,向windows標明需要使用的裝置。
裝置上下文中包含許多屬性,當gdi在不同的裝置上工作時都要用到這些屬性。使用這些屬性可使gdi只關心起始和終止座標的大小,而不必關心有關物件的其他屬性,如顏色、背景等等,因為這些都是裝置上下文的一部分。當需要修改這些屬性時,只需呼叫乙個修改裝置上下文中屬性的引數,以後的程式中都使用修改後的裝置上下文屬性。裝置上下文是連線windows應用程式、裝置驅動程式以及輸出裝置的紐帶。
獲取裝置上下文控制代碼有多種方法。最一般的方法是當處理一條訊息時獲得了裝置上下文、並在退出視窗之前釋放它。一般的處理方法如下:
在處理wm_paint訊息時
case wm_paint:
hdc=beginpaint(hwnd,&ps)
endpaint (hwnd,&ps);
其資料結構為:
hdc hwnd;
paintstruct ps;
而在windows.h中定義了paintstruct的資料結構。
type struct tagpaintstruct {
hdc hdc;
bool ferase;
rect rcpaint;
bool frestore;
bool flncupdate;
byte rgbreserved[16];
}paintstruct;
其中,hdc用於標識顯式上下文,ferase指出背景是否重畫,rcpaint是塗色矩形,其餘的域均為保留。這裡的hdc是beginpaint返回的裝置上下文控制代碼,有了從deginpaint獲取的裝置上下文控制代碼,就可以也只能在ps指出的rcpaint的矩形內繪圖,endpaint呼叫使這一區域有效。
第二種方法如下所示,使用這種方法獲取和釋放裝置上下文可以在整個使用者區內畫圖,圖形在整個使用者區域內都有效:
hdc=getdc (hwnd );
…畫圖操作…
releasedc (hwnd , hdc );
使用下面第三種方法獲取和釋放裝置上下文,可以在整個視窗內畫圖,圖形在整個視窗內有效:
hdc=getwindowdc(hwnd);
…畫圖操作…
releasedc(hwnd,hdc);
使用下面第四種方法獲取和釋放裝置上下文,可以在整個顯示器區域內畫圖,圖形在整個顯示器區域內部有效:
hdc=createdc (lpszdriver ,lpszdevice ,lpszoutput , lpdata);
…畫圖操作…
releasedc(hdc);
其中lpszdriver指向裝置驅動程式的dos檔名(不帶副檔名),lpszdevice指向專用裝置名(例如epson fx-80),lpszoutput指向物理輸出介質(檔案或輸出埠)的dos檔名或裝置名,lpdata指向含有裝置驅動程式的裝置專用的初始化資料的devmode資料結構。例如:
hdc=createdc("display",null,null,null);
使用螢幕畫圖,而:
hdc= createdc ("ibmgrx","ibm graphics","lpt1",null );
在印表機上輸出圖形,這裡的lpdata置為預設值,可以在win.ini中找到初始化值。
如果不需要獲取裝置上下文,即不需要在裝置上下文中操作,只需了解有關裝置上下文的資訊,可以用如下語句:
hdcinfo = createdc (lpszdriver, lpszdevice,lpszoutput, lpdata );
……
detetedc (hdcinfo);
另外,還可以使用裝置上下文來對位圖的記憶體進行控制,如下所示:
hdcmem = createcompatibledc (hdc)
oeletedc(hdcmem );
乙個元檔案是以二進位制形式編碼的gdi呼叫集合,可通過獲取乙個元檔案裝置上下文來建立乙個檔案:
hdcmeta=createmetafile(lpszfilename);
……
hmf=closemetafile(hdcmeta);
在元檔案裝置上下文有效期間,使用hdcmeta所進行的任何gdi呼叫都成為元檔案的一部分,當呼叫closemetafile時,裝置上下文控制代碼變化無效,函式返回元檔案(hmf)的控制代碼。
nvalue=getdevicecaps (hdc,nindex);
這裡的hdc標識裝置上下文,nindex確定返回值,它可以是window.h中所定義的28個識別符號中的乙個,例如nindex=driveversion,則該函式返回的是版本號。
真正影響在使用者區域上繪製過程的裝置上下文屬性是「對映方式」,與對映方式屬性密切相關的還有如下四個裝置上下義屬性:視窗原點、視窗原點、視窗範圍和視窗範圍。
unbuntu 擴充套件屏設定主屏和副屏(左右關係)
1 參考 原文如下 作為乙個程式設計師,從開始使用雙屏之後,乙個顯示屏開發,那種感覺,就是不好。好吧,剛換到ubuntu,筆記本一 個顯示屏,外接了乙個hdmi的顯示器,由於書桌的位置,只有把hdmi的顯示屏放在筆記本的左邊。但是,預設的,是筆記本的顯示屏是主屏,右邊是外接的顯示屏,一種亂了套的感覺...
獲取副檔名以及變數的生存週期
header content type text html charset utf 8 擷取副檔名 2.區域性變數 函式體內宣告的變數 區域性變數分為靜態變數 static,當第一次呼叫函式的時候相當於初始化靜態變數,當函式執行完畢後靜態變數沒有釋放而是儲存在靜態記憶體中,當再次呼叫函式的時候首先從...
mybatis plus crud以及擴充套件
所有的sql都是自動自動配置的 通過id查詢 test void selectbyid 查詢多個id test void selectbybathid 條件查詢 test void selectbymap 根據id刪除資料 test public void deletebyid 同時刪除多個資料 t...