123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- #include <windows.h>
- #include "main.h"
- #if 1
- BOOL CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
- {
- if (uMsg == WM_COMMAND && (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)) EndDialog(hwndDlg,0);
- return 0;
- }
- #else
- #include <commctrl.h>
- #include ".\graphics\image.h"
- #include ".\graphics\imagefilters.h"
- #include <strsafe.h>
-
- #define random( min, max ) (( rand() % (int)((( max ) + 1 ) - ( min ))) + ( min ))
- HBITMAP LoadImageFromResource(INT_PTR handle);
- #define LEGAL_COUNT 4
- wchar_t *legal[] = {L"Copyright (C) 1998-2006 - Nullsoft, Inc.",
- L"MPEG Layer-3 audio compression technology licensed by Fraunhofer IIS and THOMSON multimedia.",
- L"VLB decoding copyright 1998-2002 by Dolby Laboratories, Inc. All rights reserved.",
- L"AAC && aacPlus decoding copyright 1998-2006 by Coding Technologies, Inc. All rights reserved."};
- HFONT fntPlugin, fntC, fntLegal;
- HBRUSH brhDlgBG;
- #define IMAGES_COUNT 6
- #define IMAGES_INDEX_MY 0
- #define IMAGES_INDEX_WA 1
- #define IMAGES_INDEX_CT 2
- #define IMAGES_INDEX_IIS 3
- #define IMAGES_INDEX_ID3V2 4
- #define IMAGES_INDEX_MP3S 5
- RECT rectLogo[IMAGES_COUNT];
- MLImage *imgLogo[IMAGES_COUNT] = {NULL, NULL, NULL, NULL, NULL, NULL};
- MLImage *imgLlama = NULL, *imgLlamaOrig = NULL, *imgMy = NULL;
- RECT rcLlama;
- int idxSelected;
- wchar_t *url[IMAGES_COUNT - 1] = { L"http://winamp.com/",
- L"http://www.codingtechnologies.com/index.htm",
- L"http://www.iis.fraunhofer.de/index.html",
- L"http://www.id3.org/",
- L"http://www.iis.fraunhofer.de/amm/download/mp3surround/index.html"};
- HWND hwndTT;
- wchar_t strTT[] = L"click here to visit this website";
- #define TIMER_ID_WATERRENDER 1980
- #define TIMER_ID_WATERPULSE 1978
- #define TIMER_DELAY_WATERRENDER 48
- #define TIMER_DELAY_WATERPULSE 12000
- #define TIMER_ID_LLAMAFADE 1987
- #define TIMER_DELAY_LLAMAFADE 200
- #define TIMER_ID_LOADDATA 1959
- #define TIMER_DELAY_LOADDATA 10
- MLImage *tmpImage = NULL;
- MLImageFilterWater *fltrWater = NULL;
- HCURSOR curHand = NULL;
- void about_OnInit(HWND hwndDlg);
- void about_OnDestroy(HWND hwndDlg);
- void about_OnMouseDown(HWND hwndDlg, int cx, int cy);
- void about_OnMouseMove(HWND hwndDlg, int cx, int cy);
- void about_OnDraw(HWND hwndDlg);
- void timer_OnWaterPulse(HWND hwndDlg);
- void timer_OnLlamaFade(HWND hwndDlg);
- void timer_OnLoadData(HWND hwndDlg);
- void SetRects(int cx, int cy)
- {
- int i, xl, yl;
-
- i = IMAGES_INDEX_MY; xl = (cx - imgLogo[i]->GetWidth())/2; yl = 64;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- xl = 2; yl = 2; i = IMAGES_INDEX_WA;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- xl = 2; yl = cy - 88; i = IMAGES_INDEX_CT;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- xl = rectLogo[i].right; i = IMAGES_INDEX_IIS;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- xl = rectLogo[i].right; i = IMAGES_INDEX_ID3V2;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- xl = rectLogo[i].right; i = IMAGES_INDEX_MP3S;
- if (imgLogo[i]) SetRect(&rectLogo[i], xl, yl, xl + imgLogo[i]->GetWidth(), yl + imgLogo[i]->GetHeight());
- if(imgLlama) SetRect(&rcLlama, 2, 1, imgLlama->GetWidth() + 2, imgLlama->GetHeight() + 1);
- }
- void CreateToolTipWnd(HWND hwndDlg)
- {
- INITCOMMONCONTROLSEX iccex;
- iccex.dwICC = ICC_WIN95_CLASSES;
- iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
- InitCommonControlsEx(&iccex);
-
- hwndTT = CreateWindowExW(WS_EX_TOPMOST, TOOLTIPS_CLASSW, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwndDlg, NULL, mod.hDllInstance, NULL);
- SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
- }
- void UpdateToolTips(HWND hwndDlg)
- {
- TOOLINFOW ti;
- unsigned int uid = 0;
-
- // delete tools
- int ttCount = SendMessage(hwndTT, TTM_GETTOOLCOUNT, 0, 0);
- for(int i = 0; i < ttCount; i++)
- {
- if (SendMessageW(hwndTT, TTM_ENUMTOOLSW, (WPARAM)i, (LPARAM)&ti)) SendMessageW(hwndTT, TTM_DELTOOLW, 0, (LPARAM)&ti);
- }
-
- /// add tools
-
- for (int i = 1; i < IMAGES_COUNT -1; i++)
- {
- ti.cbSize = sizeof(TOOLINFO);
- ti.uFlags = TTF_SUBCLASS;
- ti.hwnd = hwndDlg;
- ti.hinst = mod.hDllInstance;
- ti.uId = uid;
- ti.lpszText = strTT;
- ti.rect = rectLogo[i];
- SendMessageW(hwndTT, TTM_ADDTOOLW, 0, (LPARAM) (LPTOOLINFO) &ti);
- }
- }
- BOOL CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
- {
- switch(uMsg)
- {
- case WM_INITDIALOG:
- about_OnInit(hwndDlg);
- break;
- case WM_DESTROY:
- about_OnDestroy(hwndDlg);
- break;
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
- {
- EndDialog(hwndDlg,0);
- }
- break;
- case WM_SIZE:
- if (wParam != SIZE_MINIMIZED)
- {
- SetRects(LOWORD(lParam), HIWORD(lParam));
- UpdateToolTips(hwndDlg);
- }
- case WM_MOUSEMOVE:
- about_OnMouseMove(hwndDlg, LOWORD(lParam), HIWORD(lParam));
- break;
- case WM_LBUTTONDOWN:
- about_OnMouseDown(hwndDlg, LOWORD(lParam), HIWORD(lParam));
- break;
- case WM_PAINT:
- about_OnDraw(hwndDlg);
- break;
- case WM_TIMER:
- switch(wParam)
- {
- case TIMER_ID_WATERRENDER:
- if (idxSelected != -1 && fltrWater)
- {
- fltrWater->Render(tmpImage, imgLogo[idxSelected]);
- InvalidateRect(hwndDlg, &rectLogo[idxSelected], FALSE);
- }
- break;
- case TIMER_ID_WATERPULSE:
- timer_OnWaterPulse(hwndDlg);
- break;
- case TIMER_ID_LLAMAFADE:
- timer_OnLlamaFade(hwndDlg);
- break;
- case TIMER_ID_LOADDATA:
- timer_OnLoadData(hwndDlg);
- break;
- }
- break;
- case WM_CTLCOLORDLG:
- return (BOOL)brhDlgBG;
- break;
- }
- return 0;
- }
- void about_OnInit(HWND hwndDlg)
- {
- HDC hdc = GetDC(hwndDlg);
- fntPlugin = CreateFontW(-MulDiv(20, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Microsoft Sans Serif");
- fntC = CreateFontW(-MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, 0, TRUE, 0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, L"Arial");
- fntLegal = CreateFontW(-MulDiv(6, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, L"Microsoft Sans Serif");
- ReleaseDC(hwndDlg, hdc);
- brhDlgBG = CreateSolidBrush(RGB(255,255,255));
- SetTimer(hwndDlg, TIMER_ID_LOADDATA, TIMER_DELAY_LOADDATA, NULL);
- }
- void about_OnDestroy(HWND hwndDlg)
- {
- for (int i = 0; i < IMAGES_COUNT; i++)
- {
- if (imgLogo[i]) delete(imgLogo[i]);
- imgLogo[i] = NULL;
- }
- if (imgLlama) delete(imgLlama);
- imgLlama = NULL;
- if (imgLlamaOrig) delete(imgLlamaOrig);
- imgLlamaOrig = NULL;
-
- if (imgMy) delete(imgMy);
- imgMy = NULL;
-
- if (fntPlugin) DeleteObject(fntPlugin);
- if (fntC) DeleteObject(fntC);
- if (fntLegal) DeleteObject(fntLegal);
- fntPlugin = NULL;
- fntC = NULL;
- fntLegal = NULL;
- if (brhDlgBG) DeleteObject(brhDlgBG);
- brhDlgBG = NULL;
- if (fltrWater) delete (fltrWater);
- fltrWater = NULL;
-
- if (tmpImage) delete(tmpImage);
- tmpImage = NULL;
- if (curHand) DestroyCursor(curHand);
- curHand = NULL;
- }
- void about_OnMouseDown(HWND hwndDlg, int cx, int cy)
- {
- if (idxSelected == -1) return;
-
- HCURSOR curWait = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(32514/*OCR_WAIT*/), IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR);
- SetCursor(curWait);
- ShellExecuteW(hwndDlg, L"open", url[idxSelected -1], NULL, L"c:\\", SW_SHOW);
- SetCursor(curHand);
- DestroyCursor(curWait);
- }
- void about_OnMouseMove(HWND hwndDlg, int cx, int cy)
- {
- POINT pt = {cx, cy};
- int idxNew = -1;
- for (int i = 1; i < IMAGES_COUNT - 1; i ++)
- {
- if (PtInRect(&rectLogo[i], pt))
- {
- if (!curHand)
- {
- curHand = (HCURSOR)LoadImage(mod.hDllInstance, MAKEINTRESOURCE(IDC_CUR_HAND), IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR);
- }
- SetCursor(curHand);
- idxNew = i;
- }
- }
- if (idxNew != idxSelected)
- {
- // stop animation
- KillTimer(hwndDlg, TIMER_ID_WATERPULSE);
- KillTimer(hwndDlg, TIMER_ID_WATERRENDER);
-
- if (idxSelected != -1) // redraw previously animated
- {
- InvalidateRect(hwndDlg, &rectLogo[idxSelected], FALSE);
- }
- // set new one
- idxSelected = idxNew;
- if (fltrWater) delete(fltrWater);
- fltrWater = NULL;
- if (tmpImage) delete(tmpImage);
- tmpImage = NULL;
- if (idxSelected != -1 && idxSelected != IMAGES_INDEX_WA) SetTimer(hwndDlg, TIMER_ID_WATERPULSE, 30, NULL); // start delay
- }
- }
- void about_OnDraw(HWND hwndDlg)
- {
- PAINTSTRUCT ps;
- HDC hdc;
- hdc = BeginPaint(hwndDlg, &ps);
- RECT rc, ri;
- GetClientRect(hwndDlg, &rc);
-
- // Draw Llama
- RECT rl;
- SetRect(&rl, rcLlama.left, rcLlama.top, rcLlama.right, rcLlama.bottom);
- if (imgLlama && IntersectRect(&ri, &rl, &ps.rcPaint))
- {
- HRGN hrgn = CreateRectRgn(rcLlama.left, rcLlama.top, rcLlama.right, rcLlama.bottom);
-
- HRGN hrgn1 = CreateRectRgn(rectLogo[IMAGES_INDEX_MY].left,
- rectLogo[IMAGES_INDEX_MY].top,
- rectLogo[IMAGES_INDEX_MY].right,
- rectLogo[IMAGES_INDEX_MY].bottom);
- CombineRgn(hrgn, hrgn, hrgn1, RGN_DIFF);
- DeleteObject(hrgn1);
- hrgn1 = CreateRectRgn(rectLogo[IMAGES_INDEX_WA].left,
- rectLogo[IMAGES_INDEX_WA].top,
- rectLogo[IMAGES_INDEX_WA].right,
- rectLogo[IMAGES_INDEX_WA].bottom);
- CombineRgn(hrgn, hrgn, hrgn1, RGN_DIFF);
- SelectClipRgn(hdc, hrgn);
- DeleteObject(hrgn);
- DeleteObject(hrgn1);
- imgLlama->Draw(hdc, rl.left, rl.top);
- SelectClipRgn(hdc, NULL);
- }
-
- MLImage *img;
- for (int i = 0; i < IMAGES_COUNT -1; i++)
- {
-
- if (IntersectRect(&ri, &rectLogo[i], &ps.rcPaint))
- {
- if (idxSelected == i && tmpImage)
- {
- img = tmpImage;
- HRGN hrgn = CreateRectRgn(rectLogo[i].left + 3, rectLogo[i].top + 3 , rectLogo[i].right - 3, rectLogo[i].bottom - 3);
- SelectClipRgn(hdc, hrgn);
- DeleteObject(hrgn);
- }
- else img = imgLogo[i];
- if (img == NULL || imgLlama == NULL) continue;
- if (i == IMAGES_INDEX_MY)
- { // blend Llama First
- MLImageFilter_Blend1(imgMy, img, 0, 0,
- imgLlama->GetWidth() - (rectLogo[i].left - rcLlama.left), img->GetHeight(), imgLlama,
- rectLogo[i].left - rcLlama.left, rectLogo[i].top - rcLlama.top, RGB(255,255,255));
- img = imgMy;
- }
- img->Draw(hdc, rectLogo[i].left, rectLogo[i].top);
- SelectClipRgn(hdc, NULL);
- }
- }
-
- RECT rt;
- SetBkMode(hdc, TRANSPARENT);
- rc.left += 6;
- rc.bottom -= 2;
- rc.right -= 4;
- HFONT oldF = NULL;
- SetRect(&rt, rc.right - 192, rc.top, rc.right, rc.top + 16);
- if (IntersectRect(&ri, &rt, &ps.rcPaint))
- {
- /// Nullsoft (c)
- HFONT oldF = (HFONT)SelectObject(hdc, fntC);
- SetTextColor(hdc, RGB(100,100,200));
- DrawTextW(hdc, legal[0], -1, &rt, DT_LEFT | DT_SINGLELINE);
- }
-
- SetRect(&rt, rc.left - 2, rc.bottom - 33, rc.right, rc.bottom);
- if (IntersectRect(&ri, &rt, &ps.rcPaint))
- {
- /// Separator
- MoveToEx(hdc, rt.left, rt.top, NULL);
- HPEN lp = CreatePen(PS_SOLID,1, RGB(190, 190, 190));
- HPEN op = (HPEN)SelectObject(hdc, lp);
- LineTo(hdc, rt.right, rt.top);
- SelectObject(hdc, lp);
- DeleteObject(lp);
-
- /// Legal...
- oldF = (oldF != NULL) ? oldF : (HFONT)SelectObject(hdc, fntLegal);
- SetTextColor(hdc, RGB(0,0,0));
- for(int i = 1; i < LEGAL_COUNT; i++)
- {
- int y = rc.bottom - (LEGAL_COUNT - i)*10;
- SetRect(&rt, rc.left, y, rc.right, y +10);
- if (IntersectRect(&ri, &rt, &ps.rcPaint))
- DrawTextW(hdc, legal[i], -1, &rt, DT_LEFT | DT_SINGLELINE);
- }
- }
- if (oldF != NULL) SelectObject(hdc, oldF);
- EndPaint(hwndDlg, &ps);
- }
- void timer_OnLoadData(HWND hwndDlg)
- {
- static step = 0;
- KillTimer(hwndDlg, TIMER_ID_LOADDATA);
- RECT rc;
- GetClientRect(hwndDlg, &rc);
- for (int i = 0; i < IMAGES_COUNT; i++)
- {
- imgLogo[i] = new MLImage(LoadImageFromResource, TRUE);
- imgLogo[i]->Load();
- }
- imgMy = new MLImage();
- MLImage::Copy(imgMy, imgLogo[IMAGES_INDEX_MY]);
-
- imgLlamaOrig = new MLImage(LoadImageFromResource, TRUE);
- imgLlamaOrig->Load();
- imgLlama = new MLImage();
- MLImage::Copy(imgLlama, imgLlamaOrig);
- CreateToolTipWnd(hwndDlg);
- UpdateToolTips(hwndDlg);
- idxSelected = -1;
- SetRects(rc.right - rc.left, rc.bottom - rc.top);
- InvalidateRect(hwndDlg, &rc, FALSE);
- // SetTimer(hwndDlg, TIMER_ID_LLAMAFADE, TIMER_DELAY_LLAMAFADE, NULL);
- }
- void timer_OnWaterPulse(HWND hwndDlg)
- {
- if (idxSelected == -1) return;
-
- BOOL startRender = (!fltrWater);
-
- if(!fltrWater)
- {
- KillTimer(hwndDlg, TIMER_ID_WATERPULSE); // stop timer - will change to slower interval
- fltrWater = new MLImageFilterWater();
- fltrWater->CreateFor(imgLogo[idxSelected]);
- tmpImage = new MLImage(imgLogo[idxSelected]->GetWidth(), imgLogo[idxSelected]->GetHeight());
- }
-
- int ow = imgLogo[idxSelected]->GetWidth();
- int oh = imgLogo[idxSelected]->GetHeight();
-
- for (int i = 0; i < oh*ow/1024; i++)
- {
- fltrWater->SineBlob(-1, -1, random(4,min(oh,ow)), 600, 0);
- }
-
- if (startRender)
- {
- SetTimer(hwndDlg, TIMER_ID_WATERRENDER, TIMER_DELAY_WATERRENDER, NULL);
- SetTimer(hwndDlg, TIMER_ID_WATERPULSE, TIMER_DELAY_WATERPULSE, NULL);
- }
- }
- void timer_OnLlamaFade(HWND hwndDlg)
- {
- static int c = -2;
- static int step = 2;
- c = c + step;
- if (c > 30 && step > 0) {step = 0 - step; c = 30;}
- else if (c < 0 && step < 0) { step = 0 - step; c = 0; }
- MLImageFilter_Fader3(imgLlama, imgLlamaOrig, c);
- InvalidateRect(hwndDlg, &rcLlama, FALSE);
- }
- HBITMAP LoadImageFromResource(INT_PTR handle)
- {
- int id = 0;
- BOOL incSize;
- MLImage *img = (MLImage*)handle;
- if (img == imgLogo[IMAGES_INDEX_WA]) {id = IDB_LOGO_WAPLUGINS; incSize = FALSE;}
- else if (img == imgLogo[IMAGES_INDEX_IIS]) {id = IDB_LOGO_IIS; incSize = TRUE;}
- else if (img == imgLogo[IMAGES_INDEX_CT]) {id = IDB_LOGO_CODETECH; incSize = TRUE;}
- else if (img == imgLogo[IMAGES_INDEX_ID3V2]) {id = IDB_LOGO_ID3V2; incSize = TRUE;}
- else if (img == imgLogo[IMAGES_INDEX_MP3S]) {id = IDB_LOGO_MP3SURROUND; incSize = FALSE;} // because we don't use it for now
- else if (img == imgLogo[IMAGES_INDEX_MY]) {id = IDB_LOGO_MY; incSize = FALSE;}
- else if (img == imgLlamaOrig) {id = IDB_LLAMA; incSize = FALSE;}
- if (id == 0) return NULL;
- HBITMAP hbmp = LoadBitmap(mod.hDllInstance, MAKEINTRESOURCE(id));
- if (hbmp == NULL) return hbmp;
- if (incSize)
- {// we want to add additional white border
- HDC hdcWnd = GetWindowDC(NULL);
- HDC hdcSrc = CreateCompatibleDC(hdcWnd);
- HDC hdcDest = CreateCompatibleDC(hdcWnd);
- BITMAP bmp;
- GetObject(hbmp, sizeof(BITMAP), &bmp);
- int extraW = 40;
- int extraH = 16;
- HBITMAP hbmpNew = CreateBitmap(bmp.bmWidth + extraW, bmp.bmHeight + extraH, bmp.bmPlanes, bmp.bmBitsPixel, NULL);
-
- SelectObject(hdcSrc, hbmp);
- SelectObject(hdcDest, hbmpNew);
- // fill borders
- HBRUSH br = CreateSolidBrush(RGB(255,255,255));
- RECT rc;
- SetRect(&rc, 0,0, bmp.bmWidth + extraW, extraH/2);
- FillRect(hdcDest, &rc, br);
- SetRect(&rc, 0, bmp.bmHeight + extraH/2, bmp.bmWidth + extraW, bmp.bmHeight + extraH);
- FillRect(hdcDest, &rc, br);
- SetRect(&rc, 0, extraH/2, extraW/2, bmp.bmHeight + extraH/2);
- FillRect(hdcDest, &rc, br);
- SetRect(&rc, bmp.bmWidth + extraW/2, extraH/2, bmp.bmWidth + extraW, bmp.bmHeight + extraH/2);
- FillRect(hdcDest, &rc, br);
- // copy original
- BitBlt(hdcDest, extraW/2, extraH/2, bmp.bmWidth, bmp.bmHeight, hdcSrc, 0,0, SRCCOPY);
- DeleteObject(br);
- DeleteObject(hbmp);
- DeleteDC(hdcSrc);
- DeleteDC(hdcDest);
- ReleaseDC(NULL, hdcWnd);
- hbmp = hbmpNew;
- }
- if (img == imgLogo[IMAGES_INDEX_MY])
- { // need to add vesion number
- HDC hdcWnd = GetWindowDC(NULL);
- HDC hdcSrc = CreateCompatibleDC(hdcWnd);
- HDC hdcDest = CreateCompatibleDC(hdcWnd);
- HFONT fnt = CreateFontW(-MulDiv(90, GetDeviceCaps(hdcDest, LOGPIXELSY), 72), 22, 0, 0, FW_BOLD, 0, 0, 0, 0, 0, 0, ANTIALIASED_QUALITY, 0, L"Agency FB");
- SelectObject(hdcDest, fnt);
- char *ver = mod.description + lstrlen(mod.description);
- while(ver != mod.description && *ver != ' ')
- {
- ver = CharPrevA(mod.description, ver);
- }
- if (*ver == ' ') ver++;
-
- RECT rc;
- SetRect(&rc, 0, 0, 0, 0);
- DrawText(hdcDest, ver, -1, &rc, DT_CALCRECT | DT_RIGHT |DT_SINGLELINE);
- int extraW = rc.right + 6;
- int extraH = 16;
- BITMAP bmp;
- GetObject(hbmp, sizeof(BITMAP), &bmp);
- HBITMAP hbmpNew = CreateBitmap(bmp.bmWidth + extraW, bmp.bmHeight + extraH, bmp.bmPlanes, bmp.bmBitsPixel, NULL);
-
- SelectObject(hdcSrc, hbmp);
- SelectObject(hdcDest, hbmpNew);
- // fill new area
- HBRUSH br = CreateSolidBrush(RGB(255,255,255));
-
- SetRect(&rc, bmp.bmWidth,0, bmp.bmWidth + extraW, bmp.bmHeight + extraH);
- FillRect(hdcDest, &rc, br);
- SetRect(&rc, 0,0, bmp.bmWidth, extraH);
- FillRect(hdcDest, &rc, br);
- // copy original
- BitBlt(hdcDest, 0, extraH, bmp.bmWidth, bmp.bmHeight, hdcSrc, 0,0, SRCCOPY);
- // draw number
-
- SetTextColor(hdcDest, RGB(80, 60, 10));
- SetBkMode(hdcDest, TRANSPARENT);
- SetRect(&rc, bmp.bmWidth + 6, rc.top -= 22, bmp.bmWidth + extraW, bmp.bmHeight + extraH);
- DrawText(hdcDest, ver, -1, &rc, DT_RIGHT |DT_SINGLELINE);
- DeleteObject(fnt);
- DeleteObject(br);
- DeleteObject(hbmp);
- DeleteDC(hdcSrc);
- DeleteDC(hdcDest);
- ReleaseDC(NULL, hdcWnd);
- hbmp = hbmpNew;
-
- }
- return hbmp;
-
- }
- #endif
|