|
스크롤 박스에 이미지컴포넌트를 넣는것 보다는
이미지 컴포넌트를 얹어 놓고, 매번 그림이 로드 될때 마다, 이미지 컴포넌트의
사이즈를 리사이즈 해 주는 것이 효율적일것 같군요.
그리고 DC를 건드는 부분에서는, TImage::Picture->Canvas로 작업하는것이 좋을것 같습니다.
더불어, TForm::VertScrollBar 와 TForm::HorzScrollBar를 상황에 맞게 Visible 해주면 될것 같습니다.
깜빡이지 않게 하는 BeginPaint와 같은 부분은 신경쓰지 않아도 되는 간편한 방법이지요.
도움이 되시길 바랍니다.
장동훈 님이 쓰신 글 :
: 안녕하세요... 다름이 아니라 제가 요즘 bmp파일을 로딩하여 Form에 그려주고 있습니다.(form의 색깔을 흰색으로 하고) 그런대 다름이 아니라 bmp파일이 폼의 영역보다 큰 파일을 가끔 로딩하여 주는데
: 안보니는 부분을 스크롤 할려고 스크롤 바를 올려 보고 해도 도통 스크롤은 되는데 이미지가 그대로 있더군여
: 어떻게 해야하는지 막막하더군여, 검색을 해보니 스크롤박스에 이미지 컴퍼넌트를 올려서 하라고 하는데
:
: 저는 bmp를 읽어서 이것을 다시 제 나름대로 포멧으로 저장하고 있습니다.
: 근데 변환과정에 큰이미지들은 스크롤이 나오지 않아 이렇게 질문드립니다..
:
: ->form에 그림 그려주는곳
: void __fastcall TForm1::FormPaint(TObject *Sender)
: {
: HDC hdc;
:
: Form1->Refresh(); //갱신부분(다시읽을시 화면 지움)
:
: hdc = GetDC(Form1->Handle); //폼의 핸들얻기
:
: BeginPaint(Form1->Handle,NULL); //깜빡임 방지
: bmp.DrawBitmapDC(hdc,Form1->Bevel1->Left,Form1->Bevel1->Top+40); //form의 핸들을 얻어서 표면에 그냥그림
: EndPaint(Form1->Handle,NULL);
:
: ReleaseDC(Form1->Handle,hdc);
: }
:
: 이렇게 하는데.... drawbitmapdc에서 그리는 함수는
:
: DrawBitmapDC(HDC hdc, UINT x, UINT y)
: {
: HBITMAP hbitmap;
: HDC hdcmem;
:
: if(img == NULL)
: {
: return 1;
: }
:
: hbitmap = CreateDIBitmap(hdc,bmpih,CBM_INIT,img,
: (BITMAPINFO *)bmpih,DIB_RGB_COLORS);
:
: if(hbitmap == NULL)
: {
: return 2;
: }
:
: hdcmem = CreateCompatibleDC(hdc);
: if(hdcmem == NULL)
: {
: return 3;
: }
:
: SelectObject(hdcmem,hbitmap);
:
: /*StretchBlt(hdc,x,y,bmpih->biWidth,bmpih->biHeight,hdcmem,
: 0,0,bmpih->biWidth,bmpih->biHeight,SRCCOPY);*/
: BitBlt(hdc,x,y,bmpih->biWidth,bmpih->biHeight,
: hdcmem,0,0,SRCCOPY);
:
: DeleteObject(hbitmap);
: DeleteDC(hdcmem);
:
: return 0;
: }
: 이렇게 동작을 합니다... mfc에서는 화면이 줄어들면
:
:
: void CChildSpriterView::OnInitialUpdate()
: {
: CScrollView::OnInitialUpdate();
: CSize sizeTotal;
: // TODO: calculate the total size of this view
: sizeTotal.cx = sizeTotal.cy = 100;
: SetScrollSizes(MM_TEXT, sizeTotal);
: }
: 이함수로 화면 크키를 조정하여 스크롤이 되느것 같은데 빌더에서는 어떻게 햐야 하는지 모르겠습니다..
|