진행바 ProgressBar 그냥 바닥에 표현... 글자색 XOR
원하는 Cavas(HDC)에 바로 ProgressBar 표현해 보았습니다.... 하하하
이것을 어디에 사용하지... 쓸 데 있을 것입니다. 저도 요것이 필요했는데... 아무리해도 안되길래
그림으로 해결했습니다... ㅋㅋㅋ 안되는게 어딨어...
// 구상
//* Bitmap이 0, 1, 2가 있다.
// 1) BitBlt로 게이지 만큼 1에서 잘라 0에 XOR 한다.
// 2) BitBlt로 게이지 나머지만큼 2에서 잘라 0에 XOR 한다.
// 3) BitBlt로 0을 원하는 DC에 그린다.
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
int x, y, width, height, bkMode;
COLORREF cfColor;
char sss[100];
x = 100; y = 150; width = 100; height = 20;
// 0
HDC dcOrigin;
HBITMAP hbmOrigin, hbmOldOrigin; //흰색바탕에 녹색 게이지
dcOrigin = ::CreateCompatibleDC( this->Canvas->Handle );
hbmOrigin = ::CreateCompatibleBitmap( this->Canvas->Handle, width, height );
hbmOldOrigin = ::SelectObject( dcOrigin, hbmOrigin );
RECT r, rr;
r.left = 0;
r.top = 0;
r.right = width;
r.bottom = height;
rr = r;
float percent = TrackBar1->Position;
rr.right = rr.right * (percent/100);
HBRUSH hbr = ::CreateSolidBrush( 0x00FFFFFF );
::FillRect( dcOrigin, &r, hbr );
DeleteObject( hbr );
hbr = ::CreateSolidBrush( RGB(00,0xFF,00) );
::FillRect( dcOrigin, &rr, hbr );
DeleteObject( hbr );
// FFFFFFFFFF1F73EA
// 1
HDC dcBlackBlue;
HBITMAP hbmBlackBlue, hbmOldBlackBlue; //검정바탕에 분홍색글자
dcBlackBlue = ::CreateCompatibleDC( this->Canvas->Handle );
hbmBlackBlue = ::CreateCompatibleBitmap( this->Canvas->Handle, width, height );
hbmOldBlackBlue = ::SelectObject( dcBlackBlue, hbmBlackBlue );
hbr = ::CreateSolidBrush( 0x00000000 ); //RGB(255,255,255) );
::FillRect( dcBlackBlue, &r, hbr );
DeleteObject( hbr );
itoa( TrackBar1->Position, sss, 10 );
strcat( sss, "%" );
sss[ strlen(sss) ] = 0x00; //X xor 0x00FF00 = E08C15 0x00FF00 03D6FC //wsprintf( sss, "%d%%", TrackBar1->Position );
cfColor = ::SetTextColor( dcBlackBlue, 0x00FF00FF ); ///329FC ); //E07315 ); //0xFF0000 ); //E08C15 ); //1F73EA ); //E08C15 ); //00FF00FF );
bkMode = ::SetBkMode( dcBlackBlue, TRANSPARENT );
::DrawText( dcBlackBlue, sss, strlen(sss), &r, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
::SetBkMode( dcBlackBlue, bkMode );
// 2
HDC dcBlackWhite;
HBITMAP hbmBlackWhite, hbmOldBlackWhite; //검정바탕에 흰색글자
dcBlackWhite = ::CreateCompatibleDC( this->Canvas->Handle );
hbmBlackWhite = ::CreateCompatibleBitmap( this->Canvas->Handle, width, height );
hbmOldBlackWhite = ::SelectObject( dcBlackWhite, hbmBlackWhite );
hbr = ::CreateSolidBrush( 0x00000000 );
::FillRect( dcBlackWhite, &r, hbr );
DeleteObject( hbr );
wsprintf( sss, "%d%%", TrackBar1->Position );
cfColor = ::SetTextColor( dcBlackWhite, 0x00FFFFFF );
bkMode = ::SetBkMode( dcBlackWhite, TRANSPARENT );
::DrawText( dcBlackWhite, sss, strlen(sss), &r, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
::SetBkMode( dcBlackWhite, bkMode );
//--------------------------------------------------------------------------------
::BitBlt( this->Canvas->Handle, x, y-120, width, height, dcBlackBlue, 0, 0, SRCCOPY );
::BitBlt( this->Canvas->Handle, x, y-60, width, height, dcBlackWhite, 0, 0, SRCCOPY );
::BitBlt( dcOrigin, 0, 0, rr.right, height, dcBlackBlue, 0, 0, SRCINVERT );
::BitBlt( dcOrigin, rr.right, 0, width-rr.right, height, dcBlackWhite, rr.right, 0, SRCINVERT );
::BitBlt( this->Canvas->Handle, x, y, width, height, dcOrigin, 0, 0, SRCCOPY );
::SelectObject( dcOrigin, hbmOldOrigin );
::SelectObject( dcBlackBlue, hbmOldBlackBlue );
::SelectObject( dcBlackWhite, hbmOldBlackWhite );
::DeleteDC( dcOrigin );
::DeleteDC( dcBlackBlue );
::DeleteDC( dcBlackWhite );
}
//---------------------------------------------------------------------------
부산에서 박영목 올렸습니다.
|
::DeleteObject( hbmBlackBlue);
::DeleteObject( hbmBlackWhite );
이게 빠졌네요... 수정하세요! 어,,, 난가? 어매... 쪽팔려..