Firefox
Aslında kahire bir kahire yüzeyinden DC almak için bir işlevi vardır. Örnek kod: HDC gfxWindowsSurface::GetDCWithClip(gfxContext *ctx)
nihayet kahire win32 diyoruz
VOID OnPaint(HWND hwnd, HDC hdc)
{
RECT rc;
::GetClientRect(hwnd, &rc);
//draw one line
cairo_surface_t* surface = cairo_win32_surface_create(hdc);
cairo_t* cr = cairo_create(surface);
cairo_set_source_rgb(cr, 0xff, 0, 0);
cairo_set_line_width(cr, 1);
cairo_move_to(cr, 0, 0);
cairo_line_to(cr, rc.right, rc.bottom);
cairo_stroke(cr);
cairo_destroy(cr);
//draw the theme background
HDC hdcNew = cairo_win32_surface_get_dc(surface);
HTHEME hTheme = OpenThemeData(NULL, L"SCROLLBAR");
RECT rcArrow;
SetRect(&rcArrow, 30, 30, 45, 45);
DrawThemeBackground(hTheme, hdcNew, SBP_ARROWBTN, ABS_DOWNDISABLED, &rcArrow, NULL);
cairo_surface_destroy(surface);
}
gfxWindowsNativeDrawing::BeginNativeDrawing()
çağrı.
Krom
Skia hdc için Skia tuval gelen dönüşüm işlevleri sağlamaz, ancak proje krom skia bir uzantısı eklemek ve bu işlevselliği yerine getirmek.
Skia/ext/bitmap_platform_device_win.cc içinde: tuval iç bitmap'ten bir bellek dc oluşturmak
HDC BitmapPlatformDevice::BitmapPlatformDeviceData::GetBitmapDC() {
}
.
Bu nedenle, boya kullanıldığında, doğal dc kullanmanız gerekip gerekmediği veya genel cairo/skia tuvali artık önemli değil.
Örnek kod: Windows için
void TestChromeExt(HWND hwnd, HDC hdc)
{
RECT rc;
GetClientRect(hwnd, &rc);
skia::BitmapPlatformDevice* pBmpDevice = skia::BitmapPlatformDevice::Create(rc.right, rc.bottom, true);
skia::PlatformCanvas *pCanvas = new skia::PlatformCanvas(pBmpDevice);
pCanvas->clear(SK_ColorWHITE);
SkPaint paint;
paint.setColor(SK_ColorRED);
paint.setStrokeWidth(3);
paint.setStyle(SkPaint::kStroke_Style);
pCanvas->drawLine(0, 0, rc.right, rc.bottom, paint);
HDC memdc = skia::BeginPlatformPaint(pCanvas);
RECT rcArrow;
SetRect(&rcArrow, 100, 200, 120, 220);
DrawThemeBackground(OpenThemeData(NULL, L"SCROLLBAR"), memdc, SBP_ARROWBTN, ABS_DOWNDISABLED, &rcArrow, NULL);
skia::EndPlatformPaint(pCanvas);
skia::DrawToNativeContext(pCanvas, hdc, 0, 0, &rc);
}
, görsel stil etkinleştirildiğinde, bu tarayıcılar DrawThemeBackground
kullanırsınız, yerli bir görünüm sağlamak ve hissetmek için. Ancak, görsel stil devre dışı bırakıldığında (klasik mod birdir), denetimleri çizmek için DrawFrameControl
kullanırlar.
Her iki tarayıcı için de kaynak kodu kullanılabilir, belki bir göz atmalısınız? –