static void OnPaint(HWND hwnd, HDC hdc) { HGDIOBJ old_font = SelectObject(hdc, g_NormalFont); int count = g_WndList->GetCount(); SetBkMode(hdc, TRANSPARENT); UINT ImageStyle = ILD_NORMAL; RECT rect; CWndInfo* info = (CWndInfo*)g_WndList->GetTop(0); GetItemRect(0, &rect); for(int i=0;i<count;i++) { if(info->IsSelected()) { #ifdef USE_GRADIENT FillGradient(hdc, &rect, GetSysColor(COLOR_ACTIVECAPTION), GetSysColor(COLOR_GRADIENTACTIVECAPTION)); #else FillRect(hdc, &rect, (HBRUSH)(COLOR_ACTIVECAPTION+1)); #endif SetTextColor(hdc, GetSysColor(COLOR_CAPTIONTEXT)); } else{ if(g_Aero){ if(info->IsLauncher()) { SetTextColor(hdc, GetSysColor(COLOR_3DDKSHADOW)); } else{ SetTextColor(hdc, GetSysColor(COLOR_3DSHADOW)); } } else{ if(info->IsLauncher()) { SetTextColor(hdc, GetSysColor(COLOR_3DSHADOW)); } else{ SetTextColor(hdc, GetSysColor(COLOR_MENUTEXT)); } } } if(info->IsLauncher()) { SelectObject(hdc, g_LaunchFont); ImageStyle = ILD_BLEND25; } else{ SelectObject(hdc, g_NormalFont); ImageStyle = ILD_NORMAL; } g_ImageList->Draw(i, hdc, g_ItemIconX, rect.top+g_ItemIconY, ImageStyle); TextOut(hdc, g_ItemTextX, rect.top+g_ItemTextY, info->GetTitle(), _tcslen(info->GetTitle())); info = (CWndInfo*)info->GetNext(0); rect.top += g_ItemHeight; rect.bottom += g_ItemHeight; } SelectObject(hdc, old_font); }
void CDX9Renderer::FillGradient(cr_float x, cr_float y, cr_float width, cr_float height, const color& c1, const color& c2, gradient_direction dir) { FillGradient(rect_xywh(x, y, width, height), c1, c2, dir); }
INT_PTR CSettingsDialog::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { ::SetWindowText(hDlg,GetTitle()); DeleteAllPages(); for (int i=0;;i++) { CPage *pPage=CreatePage(i); if (pPage==nullptr) break; m_PageList.push_back(pPage); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_LIST,LB_ADDSTRING,0,i); } int Page=0; if (m_StartPage>=0 && m_StartPage<(int)m_PageList.size()) Page=m_StartPage; else if (m_CurrentPage>=0 && m_CurrentPage<(int)m_PageList.size()) Page=m_CurrentPage; m_CurrentPage=-1; if (SetPage(Page)) { ::SendDlgItemMessage(hDlg,IDC_SETTINGS_LIST,LB_SETCURSEL,Page,0); } m_himlIcons=::ImageList_LoadImage(m_hinst,MAKEINTRESOURCE(IDB_SETTINGS),16,1, CLR_NONE,IMAGE_BITMAP,LR_CREATEDIBSECTION); LRESULT ItemHeight=::SendDlgItemMessage(hDlg,IDC_SETTINGS_LIST,LB_GETITEMHEIGHT,0,0); if (ItemHeight<16+8) ::SendDlgItemMessage(hDlg,IDC_SETTINGS_LIST,LB_SETITEMHEIGHT,0,16+8); AdjustPos(); } return TRUE; case WM_DRAWITEM: { LPDRAWITEMSTRUCT pdis=reinterpret_cast<LPDRAWITEMSTRUCT>(lParam); if (wParam==IDC_SETTINGS_LIST) { if (pdis->itemData>=m_PageList.size()) break; const CPage *pPage=m_PageList[pdis->itemData]; const bool fSelected=(pdis->itemState&ODS_SELECTED)!=0; COLORREF crText,crOldText; int OldBkMode; RECT rcBack,rcText; rcBack=pdis->rcItem; rcBack.left+=4+16+4; if (fSelected) { RECT rc=pdis->rcItem; rc.right=rcBack.left; ::FillRect(pdis->hDC,&rc, reinterpret_cast<HBRUSH>(COLOR_WINDOW+1)); FillGradient(pdis->hDC,rcBack, RGB(0,0,0),pPage->GetTitleColor()); crText=RGB(255,255,255); } else { ::FillRect(pdis->hDC,&pdis->rcItem, reinterpret_cast<HBRUSH>(COLOR_WINDOW+1)); crText=::GetSysColor(COLOR_WINDOWTEXT); } ::ImageList_Draw(m_himlIcons,pPage->GetIcon(),pdis->hDC, pdis->rcItem.left+4, rcBack.top+((rcBack.bottom-rcBack.top)-16)/2, ILD_TRANSPARENT); rcText=rcBack; rcText.left+=4; rcText.right-=4; crOldText=::SetTextColor(pdis->hDC,crText); OldBkMode=::SetBkMode(pdis->hDC,TRANSPARENT); ::DrawText(pdis->hDC,pPage->GetTitle(),-1, &rcText,DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX); ::SetTextColor(pdis->hDC,crOldText); ::SetBkMode(pdis->hDC,OldBkMode); if ((pdis->itemState & (ODS_FOCUS | ODS_NOFOCUSRECT))==ODS_FOCUS) { ::DrawFocusRect(pdis->hDC,&rcBack); } } else if (wParam==IDC_SETTINGS_TITLE) { if (m_CurrentPage<0 || (size_t)m_CurrentPage>=m_PageList.size()) break; CPage *pPage=m_PageList[m_CurrentPage]; RECT rc; FillGradient(pdis->hDC,pdis->rcItem, RGB(0,0,0),pPage->GetTitleColor()); LOGFONT lf; ::GetObject(reinterpret_cast<HFONT>(::SendMessage(hDlg,WM_GETFONT,0,0)),sizeof(lf),&lf); lf.lfWeight=FW_BOLD; HFONT hfont=::CreateFontIndirect(&lf); HFONT hfontOld=SelectFont(pdis->hDC,hfont); COLORREF crOldText=::SetTextColor(pdis->hDC,RGB(255,255,255)); int OldBkMode=::SetBkMode(pdis->hDC,TRANSPARENT); rc.left=pdis->rcItem.left+2; rc.top=pdis->rcItem.top; rc.right=pdis->rcItem.right-2; rc.bottom=pdis->rcItem.bottom; ::DrawText(pdis->hDC,pPage->GetTitle(),-1, &rc,DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX); SelectFont(pdis->hDC,hfontOld); ::DeleteObject(hfont); ::SetTextColor(pdis->hDC,crOldText); ::SetBkMode(pdis->hDC,OldBkMode); } } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SETTINGS_LIST: if (HIWORD(wParam)==LBN_SELCHANGE) { int Page=(int)::SendDlgItemMessage(hDlg,IDC_SETTINGS_LIST,LB_GETCURSEL,0,0); if (Page>=0) SetPage(Page); } return TRUE; case IDOK: if (QueryOK() && OnOK()) { End(IDOK); } return TRUE; case IDCANCEL: OnCancel(); End(IDCANCEL); return TRUE; } return TRUE; case WM_APP_SET_PAGE: SetPage((int)wParam); return TRUE; case WM_DESTROY: { m_StartPage=m_CurrentPage; DeleteAllPages(); if (m_himlIcons!=nullptr) { ::ImageList_Destroy(m_himlIcons); m_himlIcons=nullptr; } m_Core.RemoveModelessDialog(this); } return TRUE; } return FALSE; }