在MDI窗体中用图片做背景
在MDI窗体中用图片做背景。 问题点数:10、回复次数:12Top
1 楼atdawn(请稍候...)回复于 2002-05-05 15:43:16 得分 0
如何做到啊?Top
2 楼goldenfinger413(青云独步)回复于 2002-05-05 16:07:09 得分 0
通过虚拟函数,将图片一点点的画上去的.
Top
3 楼atdawn(请稍候...)回复于 2002-05-05 16:10:28 得分 0
通过一个API函数可以做到的,我只是记不得了。Top
4 楼ken_henderson( )回复于 2002-05-05 17:03:53 得分 0
到vc论坛搜索一下多的是Top
5 楼silver_sky(挪威森林)回复于 2002-05-05 17:23:16 得分 0
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* aa = new Graphics::TBitmap ;
OpenDialog1->Execute() ;
aa->LoadFromFile(OpenDialog1->FileName) ;
for(int i=0; i<aa->Width; i++)
{
for(int j=0; j<aa->Height; j++)
{
Form1->Canvas->Pixels[i][j] = aa->Canvas->Pixels[i][j] ;
}
}
}Top
6 楼atdawn(请稍候...)回复于 2002-05-05 20:14:03 得分 0
大哥,上面的方法不行。Top
7 楼suncisco(suncisco)回复于 2002-05-05 20:20:04 得分 0
用个PICTUREBOX!Top
8 楼atdawn(请稍候...)回复于 2002-05-06 10:33:44 得分 0
是MDI窗体的背景,没有那么简单的啊。
BCB中也没有PictureBox啊。Top
9 楼Kabin() 加点冰 ()回复于 2002-05-06 11:46:42 得分 0
void __fastcall TMainForm::DrawClientWindow(HDC & Hdc)
{
TRect rect;
::GetClientRect(ClientHandle,(RECT *)&rect);
int left,top;
// 使用Windows API函數BitBlt
for (int i=0;i<ClientHeight/BGBitmap->Height+1;i++)
for (int j=0;j<ClientWidth/BGBitmap->Width+1;j++){
left=j*BGBitmap->Width;
top=i*BGBitmap->Height;
::BitBlt(Hdc,left,top,left+BGBitmap->Width,top+BGBitmap->Height,
BGBitmap->Canvas->Handle,0,0,SRCCOPY);
}
}Top
10 楼atdawn(请稍候...)回复于 2002-05-06 13:34:23 得分 0
你说的是不是VC的内容啊,BCB中没有这个事件过程啊。Hdc是如何获得的。Top
11 楼atdawn(请稍候...)回复于 2002-05-06 13:38:10 得分 0
请用一个API就解决问题,好吗?
不要瞎写,好不好,发了这么多帖子,问题也没觖决。Top
12 楼liemen()回复于 2002-05-06 13:47:48 得分 10
在头文件中加入:
long OriginalClientProc;
HANDLE ClientObjectInstance;
Graphics::TBitmap *MdiFormImage;
TCanvas *MdiClientCanvas;
TRect MdiFormImageRect;
void __fastcall MdiClientProc(TMessage& Msg);
在OnCreate中加入:
MdiFormImage = new Graphics::TBitmap;
MdiClientCanvas = new TCanvas;
MdiFormImage->LoadFromFile("图片文件");
MdiClientCanvas->Handle = GetDC(ClientHandle);
MdiFormImageRect = Rect(0,0,MdiFormImage->Width,MdiFormImage->Height);
ClientObjectInstance = MakeObjectInstance(MdiClientProc);
OriginalClientProc = GetWindowLong(ClientHandle, GWL_WNDPROC);
SetWindowLong(ClientHandle, GWL_WNDPROC, (long)ClientObjectInstance);
在OnClose中加入:
if( ClientObjectInstance != NULL ) {
SetWindowLong(ClientHandle,GWL_WNDPROC,OriginalClientProc);
FreeObjectInstance(ClientObjectInstance);
delete MdiFormImage;
delete MdiClientCanvas;
}
实现函数:
void __fastcall TLotMainForm::MdiClientProc(TMessage& Msg)
{
if( Msg.Msg == WM_ERASEBKGND ) {
MdiClientCanvas->CopyRect( ClientRect, MdiFormImage->Canvas, MdiFormImageRect );
Msg.Result = true;
} else {
Msg.Result = CallWindowProc((FARPROC)OriginalClientProc,ClientHandle,Msg.Msg,Msg.WParam,Msg.LParam);
if( Msg.Msg == WM_HSCROLL )
InvalidateRect(ClientHandle,0,true);
}
}
在BCB5上通过!
Top




