예제 #1
0
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);
	}
예제 #3
0
	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;
	}