reactos作業系統實現 189

2021-08-25 01:17:03 字數 1901 閱讀 4706

dc(device context)是乙個圖形物件、圖形屬性和影響圖形輸出的集合結構體。createdc函式用給定名稱為指定的裝置建立裝置環境。createdc一般用於建立印表機的裝置環境,也可以用來得到螢幕(硬體螢幕,而不是視窗的客戶區)的裝置環境。請小心使用這個函式,因為它允許應用程式在螢幕上任何位置繪圖,而不僅僅是在視窗的邊界內。請用getdc或beginpaint來獲取螢幕視窗的裝置環境。

#001 hdc

#002 winapi

#003 createdcw (

#004 lpcwstr lpwszdriver,

#005 lpcwstr lpwszdevice,

#006 lpcwstr lpwszoutput,

#007 const devmodew *lpinitdata

#008 )

#009

lpwszdriver是指向空值結尾的字串的指標,字串說明裝置驅動程式的檔名。比如「display」指的是顯示器驅動程式,而「winspool」就是指列印驅動程式。

lpwszdevice是批向空值結尾的字串的指標,字串指定了正在使用的專用輸出裝置的名稱,比如列印管理程式名稱。

lpwszoutput是沒有使用引數,一般設定為null。

lpinitdata是指向結構包含了裝置驅動程式的裝置專用初始化資料。設定為null時,就使用系統預設的初始化引數。

下面接著來分析函式intcreatedicw的**:

#001 hdc

#002 fastcall

#003 intcreatedicw ( lpcwstr lpwszdriver,

#004 lpcwstr lpwszdevice,

#005 lpcwstr lpwszoutput,

#006 pdevmodew lpinitdata,

#007 ulong itype )

#008

#020 else

#021

#024

根據裝置名稱判斷獲取什麼樣的裝置。

#025 if ((!lpwszdevice) && (!lpwszdriver))

#026

#030 else

#031

#037 else

#038

#045 }

#046 }

#047

#048 if (lpwszoutput) rtlinitunicodestring(&output, lpwszoutput);

#049

#050 if (!display)

#051

#055

呼叫win32k核心ntgdiopendcw函式開啟裝置。

#056 hdc = ntgdiopendcw( (default ? &device : null),

#057 (pdevmodew) lpinitdata,

#058 (lpwszoutput ? &output : null),

#059 itype, // dcw 0 and icw 1.

#060 display,

#061 hspool,

#062 (pvoid) null, // null for now.

#063 (pvoid) &umdhpdev );

#064 #if 0

#065 // handle something other than a normal dc object.

#066 if (gdi_handle_get_type(hdc) != gdi_object_type_dc)

#067

#080 #endif

返回dc給應用程式。

#081 return hdc;

#082 }

reactos作業系統實現 178

sendmessagew函式主要用來向視窗傳送訊息。下面就是它的實現 001 lresult winapi 002 sendmessagew hwnd wnd,003 uint msg,004 wparam wparam,005 lparam lparam 006 028 029 填寫訊息結構。03...

reactos作業系統實現 187

隨著全球化的發展,開發軟體都是面向多語言的環境。目前大多數程式都是採用不同字型來顯示不同語言的辦法,那麼有沒有一種更好的辦法,一種字型就可以解決全球語言的顯示呢?答案肯定的,它就是採用邏輯字型ms shell dlg和ms shell dlg2。比如開發應用程式時,就看到在資源裡可以設定ms she...

reactos作業系統實現 193

selectobject函式是將物件選定到指定的裝置場境中。具體實現 如下 001 hgdiobj 002 winapi 003 selectobject hdc hdc,004 hgdiobj hgdiobj 005 016 獲取選擇dc的物件正確的控制代碼。017 hgdiobj gdifixu...