Hallo,
ich arbeite z.Z. an einem SDI MFC Projekt. Mein View wurde von CScrollView abgeleitet. Nun möchte ich eine Hintergrundgrafik einfügen die, wie weit auch gescrollt wird immer im Vordergrund ist(soll also nicht mit gescrollt werden).
Im Vordergrund ist dann viel Text der gescrollt wird.
Wie kann ich es realisieren dass die BITMAP im Hintergrund fixiert bleibt und der Text sich bewegt?
Bitte um Hilfe
gruß DR
Hm ich habe inzwischen noch n bisschen probiert, meine Grafik wird jetz zwar dauernd angezeigt, ist aber völlig verzerrt und wir uch teilweise abgeschnitten. Hier mein Code:
void CDctMainView::open\_mouth:nDraw(CDC\* pDC)
{
CDocument\* pDoc = GetDocument();
CBitmap bitmap;
bitmap.LoadBitmap(IDB\_PAPIER);//Bitmap laden
CPoint p;
SetScrollSizes(MM\_TEXT,CSize(1000,10000));
p=GetScrollPosition();
BITMAP bm;
bitmap.GetObject(sizeof(bm),&bm);
CDC speicherDC;
speicherDC.CreateCompatibleDC(pDC);
speicherDC.SelectObject(&bitmap);
RECT rect;
GetClientRect(&rect);
pDC-\>StretchBlt(0,
p.y,
rect.right-rect.left,
p.y+rect.bottom,
&speicherDC,
0,
0,
bm.bmWidth,
bm.bmHeight,
SRCCOPY);
pDC-\>MoveTo(10,10);
//Schriftart erstellen + Textausgabe
}
Was mach ich falsch?
OK, habe das Problem nun endlich gelöst. Falls jemand das gleiche Problem haben sollte hir mein Code:
void CDctMainView::open\_mouth:nDraw(CDC\* pDC)
{
if(IsFirstTime)
{
m\_ptOldScrollPos.y=-1;
m\_pDoc = GetDocument();//Zeiger auf Doc
IsFirstTime=false;
}
SetScrollSizes(MM\_TEXT,CSize(1000,10000));
m\_ptScrollPos=GetScrollPosition();
//falls gescrollt wurde
if(m\_ptScrollPos.y != m\_ptOldScrollPos.y)
{
CBitmap bg;
BITMAP bm;
bg.LoadBitmap(IDB\_PAPIER);//BITMAP laden
bg.GetObject(sizeof(bm),&bm);
CDC speicherDC;
speicherDC.CreateCompatibleDC(pDC);
speicherDC.SelectObject(&bg);
RECT rect;
GetClientRect(&rect);
pDC-\>StretchBlt(0,
m\_ptScrollPos.y,
rect.right-rect.left,
rect.bottom,
&speicherDC,
0,
0,
bm.bmWidth,
bm.bmHeight,
SRCCOPY);
//Schriftart erstellen und selektieren
//...TEXTAUSGABE ....
RedrawWindow();
m\_ptOldScrollPos.y=m\_ptScrollPos.y;
}
Besonders auf das RedrawWindow() ist zu achten. Damit kann das Fenster neu gezeichnet werden.
Für Fragen bin ich immer offen.
gruß DR