|
안녕하세요... 다름이 아니라 제가 요즘 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);
}
이함수로 화면 크키를 조정하여 스크롤이 되느것 같은데 빌더에서는 어떻게 햐야 하는지 모르겠습니다..
|