123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #include "main.h"
- #include ".\infoBox.h"
- MLInfoBox::MLInfoBox(void)
- {
- oldWndProc = NULL;
- m_hwnd = NULL;
- bodyBrush = NULL;
- headerBrush = NULL;
- headerText[0] = 0;
- SetColors(RGB(0,0,0), RGB(255,255,255), RGB(0,60,0));
-
- SetRect(&rcBody, 0,0,0,0);
-
- drawHeader = TRUE;
- SetRect(&rcHeader, 0,0,0,20); // default height
- headerFont = NULL;
- }
- MLInfoBox::~MLInfoBox(void)
- {
- SetWindowLong(m_hwnd, GWLP_WNDPROC, (LONGX86)(LONG_PTR)oldWndProc);
- oldWndProc = NULL;
- if (headerBrush) DeleteObject(headerBrush);
- headerBrush = NULL;
-
- if (bodyBrush) DeleteObject(bodyBrush);
- bodyBrush = NULL;
- if (headerFont) DeleteObject(headerFont);
- headerFont = NULL;
- }
- void MLInfoBox::SetColors(COLORREF bodyBG, COLORREF headerFG, COLORREF headerBG)
- {
- this->bodyBG = bodyBG;
- this->headerFG = headerFG;
- this->headerBG = headerBG;
- if (headerBrush) DeleteObject(headerBrush);
- headerBrush = NULL;
- headerBrush = CreateSolidBrush(headerBG);
-
- if (bodyBrush) DeleteObject(bodyBrush);
- bodyBrush = NULL;
- bodyBrush = CreateSolidBrush(bodyBG);
- }
- void MLInfoBox::Init(HWND hwnd)
- {
- m_hwnd = hwnd;
-
- HDC hdc = GetDC(hwnd);
- long lfHeight;
- lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72);
- headerFont = CreateFontW(lfHeight, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial");
- ReleaseDC(hwnd, hdc);
- SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONGX86)(LONG_PTR)this);
- oldWndProc= (WNDPROC)(LONG_PTR)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONGX86)(LONG_PTR)newWndProc);
- RECT rc;
- GetWindowRect(hwnd, &rc);
- SetSize(rc.right - rc.left, rc.bottom - rc.top);
- }
- void MLInfoBox::SetSize(int cx, int cy)
- {
- int offset = 0;
- if (drawHeader)
- {
- SetRect(&rcHeader, 0,0, cx, rcHeader.bottom);
- offset = rcHeader.bottom;
- }
- SetRect(&rcBody, 0, offset, cx, cy);
- }
- LRESULT CALLBACK MLInfoBox::newWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
- {
- MLInfoBox *box = (MLInfoBox*)(LONG_PTR)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
-
- switch(uMsg)
- {
- case WM_SIZE:
- if (SIZE_MINIMIZED != wParam)
- {
- box->SetSize(LOWORD(lParam), HIWORD(lParam));
- }
- break;
- case WM_ERASEBKGND:
- {
- HDC hdc = GetDC(hwndDlg);
- SetTextColor(hdc, box->headerFG);
- SetBkColor(hdc, box->headerBG);
- RECT txtRect;
- SetRect(&txtRect, box->rcHeader.left + 8, box->rcHeader.top + 2, box->rcHeader.right -2, box->rcHeader.bottom -2);
- HFONT oldFont = (HFONT)SelectObject(hdc, box->headerFont);
- GetWindowTextW(hwndDlg, box->headerText, CAPTION_LENGTH);
- DrawTextW(hdc, box->headerText, -1, &txtRect, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
- SelectObject(hdc, oldFont);
- ReleaseDC(hwndDlg, hdc);
- }
- return TRUE;
- break;
- case WM_PAINT:
- {
- PAINTSTRUCT pt;
- HDC hdc = BeginPaint(hwndDlg, &pt);
- RECT drawRect ;
- if(box->drawHeader && IntersectRect(&drawRect, &box->rcHeader, &pt.rcPaint))
- {
- FillRect(hdc, &drawRect, box->headerBrush);
-
- SetTextColor(hdc, box->headerFG);
- SetBkColor(hdc, box->headerBG);
- SetRect(&drawRect, box->rcHeader.left + 8, box->rcHeader.top + 2, box->rcHeader.right -2, box->rcHeader.bottom -2);
- HFONT oldFont = (HFONT)SelectObject(hdc, box->headerFont);
- GetWindowTextW(hwndDlg, box->headerText, CAPTION_LENGTH);
- DrawTextW(hdc, box->headerText, -1, &drawRect, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
- SelectObject(hdc, oldFont);
- ValidateRect(hwndDlg, &drawRect);
- }
-
- if(IntersectRect(&drawRect, &box->rcBody, &pt.rcPaint))
- {
- FillRect(hdc, &drawRect, box->bodyBrush);
- ValidateRect(hwndDlg, &drawRect);
- }
-
- EndPaint(hwndDlg, &pt);
- }
- break;
- }
- return CallWindowProc(box->oldWndProc, hwndDlg, uMsg, wParam, lParam);
- }
-
|