Любопытно. На всякий случай скопипастю сюда пример.
| Код | //Static handles for image cache static HDC hDCI = NULL; static HBITMAP hImage = NULL; static RECT rcImage = {0, 0, LINKS_WIDTH, LINKS_HEIGHT};
//Function to load png a place it into DC containing 32-bit DIB void InitializeImage() { IImagingFactory *pFactory = NULL; IImage *pImage = NULL; BITMAPINFO bInfo;
if(CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void**)&pFactory) == S_OK) { if(pFactory->CreateImageFromFile(L"\\Program Files\\OzzY\\Links.png", &pImage) == S_OK) { ZeroMemory(&bInfo.bmiColors, 4); bInfo.bmiHeader.biClrImportant = bInfo.bmiHeader.biClrUsed = 0; bInfo.bmiHeader.biBitCount = 32; bInfo.bmiHeader.biCompression = BI_RGB; bInfo.bmiHeader.biXPelsPerMeter = bInfo.bmiHeader.biYPelsPerMeter = 3780; bInfo.bmiHeader.biSizeImage = 0; bInfo.bmiHeader.biHeight = LINKS_HEIGHT; bInfo.bmiHeader.biWidth = LINKS_WIDTH; bInfo.bmiHeader.biPlanes = 1; bInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
hDCI = CreateCompatibleDC(NULL); hImage = CreateDIBSection(hDCI, &bInfo, DIB_RGB_COLORS, NULL, NULL, NULL); SelectObject(hDCI, hImage); pImage->Draw(hDCI, &rcImage, NULL); pImage->Release(); } pFactory->Release(); } }
//The way I do the painting, on today screen PAINTSTRUCT ps; HDC hDC = BeginPaint(hwnd, &ps); BLENDFUNCTION bfAlpha = {AC_SRC_OVER, 0, 0xFF, AC_SRC_ALPHA};
SetBkMode(hDC, TRANSPARENT); AlphaBlend(hDC, 0, 0, LINKS_WIDTH, LINKS_HEIGHT, hDCI, 0, 0, LINKS_WIDTH, LINKS_HEIGHT, bfAlpha); EndPaint(hwnd, &ps);
|
Добавлено через 2 минуты и 26 секунд
Цитата(t_rex @ 30.10.2009, 23:31 ) | | и работает побыстрее GDI. |
В чем именно? В выводе текста? Или в рисовании толстых линий? |