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...