reactos作業系統實現 197

2021-08-25 01:32:50 字數 1416 閱讀 1874

所有api都需要通過相容性測試,才說明這個api沒有問題,達到可以使用的程度。下面這段**就是測試api的相容性,當測試到getpixel函式時,就發現有乙個bug,就是最後一行,當希望這個單色的返回0xffffff值,但在ros返回是0值。說明這個api函式在單色處理上存在問題,那麼怎麼樣修改這個問題呢?

#001 hdc hdc, hdcmem;

#002 dword bits[64];

#003 hbitmap hbmp, oldhbmp;

#004 colorref col;

#005 int i, bitspixel;

#006

#007 /* fill bitmap data with b&w pattern */

#008 for( i = 0; i < 64; i++) bits[i] = i & 1 ? 0 : 0xffffff;

#009

#010 hdc = getdc(0);

#011 ok( hdc != null, "createdc rets %p\n", hdc);

#012 bitspixel = getdevicecaps( hdc, bitspixel);

#013 /* create a memory dc */

#014 hdcmem = createcompatibledc( hdc);

#015 ok( hdcmem != null, "createcompatibledc rets %p\n", hdcmem);

#016 /* tests */

#017 /* test monochrome bitmap: should always work */

#018 hbmp = createbitmap(32, 32, 1, 1, bits);

#019 ok( hbmp != null, "createbitmap returns %p\n", hbmp);

#020 oldhbmp = selectobject( hdcmem, hbmp);

#021 ok( oldhbmp != null, "selectobject returned null\n" ); /* a memdc always has a bitmap selected */

#022 col = getpixel( hdcmem, 0, 0);

#023 ok( col == 0xffffff, "getpixel returned %08x, expected 00ffffff\n", col);

要解決這個bug,先要檢視api的實現**,接著編寫除錯**,檢視這個api處理的**是否得到希望值,如果得不到,說明在某個函式有問題。所以就分析到函式ntgdigetpixel的實現**,仔細地檢視這個函式的**,發現單色處理時,確實有問題,只需要把下面這行**交換一下黑色兩種顏色的位置,就可以解決這個bug了。

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