Показать сообщение отдельно
Старый 19.12.2004, 11:38     # 5
chesnok
Member
 
Аватар для chesnok
 
Регистрация: 01.01.2004
Адрес: Воронеж, Россия
Сообщения: 206

chesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форуме
Часть DialogProc:
Код:
case WM_DRAWITEM:
		{
			lpdis = (LPDRAWITEMSTRUCT) lParam; 
			DrawOwnControl(lpdis);			
			 
			break;
		}
Код:
void DrawOwnControl(LPDRAWITEMSTRUCT lpdis)
{
	HDC hMemDc = CreateCompatibleDC(lpdis->hDC);
	if(lpdis->CtlType == ODT_BUTTON) //its a button
	{
		LONG lStyle = GetWindowLong(lpdis->hwndItem, GWL_STYLE);
		if(lStyle & BS_GROUPBOX)
		{
			//groupbox
			LOGBRUSH lb;
			lb.lbColor = RGB(0, 0, 0);
			lb.lbStyle = BS_SOLID;
			lb.lbHatch = NULL;
			HBRUSH hBlack = CreateBrushIndirect(&lb);
			SelectObject(lpdis->hDC, hBlack);
			FloodFill(lpdis->hDC, 1, 1, RGB(125, 125, 125));
		}
		//button
		BOOL bDwnText;
		
		HBITMAP hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_RAISED_NOFOCUS)); //bitmap for button drawing, default = raised w/o focus
		bDwnText = FALSE;
		switch(lpdis->itemAction)
		{
		case ODA_SELECT:
			{
				if(lpdis->itemState & ODS_SELECTED)
				{
					//down
					if(lpdis->itemState & ODS_FOCUS)
					{
						//down focused
						hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_DOWN_FOCUS));
						bDwnText = TRUE;
					}else
					{
						//down non-focused
						hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_DOWN_NOFOCUS));
						bDwnText = TRUE;
					}
				}
				break;
			}
		case ODA_DRAWENTIRE:
			{
				if(lpdis->itemState & ODS_DISABLED)
				{
					//grayed
					//the only difference is gray text instead of white
				}
				break;
			}
		case ODA_FOCUS:
			{
				//raised with focus
				if(lpdis->itemState & ODS_FOCUS)
				{
					hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_RAISED_FOCUS));
					bDwnText = FALSE;
				}
				break;
			}
		}
		SelectObject(hMemDc, hBmpBtn);
		StretchBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right - lpdis->rcItem.left, lpdis->rcItem.bottom - lpdis->rcItem.top, hMemDc, 0, 0, 91, 26, SRCCOPY);
		uCurTextLen = GetWindowText(lpdis->hwndItem, szCurText, MAX_PATH);
		SetBkColor(lpdis->hDC, RGB(76, 88, 68));
		SetTextColor(lpdis->hDC, RGB(255, 255, 255));			
		RECT rcForText = lpdis->rcItem;
		rcForText.left += STEAM_TEXT_OFFSET;
		if(bDwnText)
		{
			//down text
			rcForText.left += 2;
			rcForText.top += 2;
		}
		//draw text
		DrawText(lpdis->hDC, szCurText, uCurTextLen, &rcForText, DT_SINGLELINE | DT_VCENTER);

		DeleteDC(hMemDc);
	}else
		if(lpdis->CtlType == ODT_LISTBOX) //listbox
		{
		    //to be done yet
		}
	return;
}
То, что выделено красным - попытка обработать group box, не увенчавшаяся успехом
__________________
<SPEEDing|VoNK> you cant use knoppix as a server can you?
<bob> why not? people use windows as one.

Последний раз редактировалось chesnok; 19.12.2004 в 11:43.
chesnok вне форума