怎么给窗口设置背景图片?

rabbitsfoot 2003-08-23 10:46:07
比如说知道窗口的句柄是:ll_handle,背景图片名是:"test.bmp",请高手指点一下,给出具体的代码,这150分就是你的了!

...全文
387 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
guxing 2003-09-01
  • 打赏
  • 举报
回复
呵呵,最好写在active事件中
rabbitsfoot 2003-09-01
  • 打赏
  • 举报
回复
To:jerrymao(加菲猫)
iheyi@vip.163.com,谢谢!

To:guxing(孤星)
我有几天不上网了,明天马上试试你的办法,谢谢!
gcg_cumt 2003-09-01
  • 打赏
  • 举报
回复

声明如下结构:
global type us_bitmap from structure
long bmtype
long bmwidth
long bmheight
long bmwidthbytes
long bmplanes
long bmbitspixel
blob bmbits
end type

声明如下API:
FUNCTION Long FindWindowEx( Long hParent, Long hChildAfter, String lpszClass, String lpszWindow ) LIBRARY "user32" ALIAS FOR "FindWindowExA"

FUNCTION ulong GetDC(ulong hwnd) LIBRARY "user32.dll"
FUNCTION ulong DeleteDC(ulong hdc) LIBRARY "gdi32.dll"
FUNCTION ulong ReleaseDC(ulong hwnd,ulong hdc) LIBRARY "user32.dll"
FUNCTION ulong CreateCompatibleDC(ulong hdc) LIBRARY "gdi32.dll"

Function Long LoadImage (Long hInst,String lpsz, Long un1, Long n1, Long n2, Long un2) Library "user32" Alias For "LoadImageA"
FUNCTION ulong GetObjectBitmap( ulong hgdiobj, int cbBuffer, ref us_bitmap bm ) library "gdi32.dll" alias for GetObjectA
FUNCTION ulong SelectObject(ulong hdc,ulong hObject) LIBRARY "gdi32.dll"
FUNCTION ulong DeleteObject(ulong hObject) LIBRARY "gdi32.dll"
FUNCTION ulong BitBlt(ulong hDestDC,ulong x_left,ulong y_top,ulong nWidth,ulong nHeight,ulong hSrcDC,ulong xSrc,ulong ySrc,ulong dwRop) LIBRARY "gdi32.dll"

写如下代码:

long ll_handle,ll_null,ll_TargetDc,ll_bitmap,ll_memdc,ll_old
long ll_cx,ll_cy
us_bitmap lus_bmp

ll_TargetDc=GetDC(ll_handle)//ll_handle¼´ţָ¨µĴ°¿ڵèandle

ll_bitmap = LoadImage(ll_null,'test.bmp',0,0,0,16)//Loadһ¸�½�´䋊
GetObjectBitmap( ll_bitmap, 28, lus_bmp )//获得LOad的BMP文件信息:
ll_cx = lus_bmp.bmwidth
ll_cy = lus_bmp.bmheight

ll_memdc=CreateCompatibleDC(ll_TargetDc)//创建一个和target相容的DC
ll_old = SelectObject( ll_memdc, ll_bitmap )//用load的bmp填充相应DC
BitBlt( ll_TargetDc, 0, 0, ll_cx, ll_cy, ll_memdc, 0, 0, 13369376)//复制SelectObject( ll_memdc, ll_old )

DeleteDC( ll_memdc )
ReleaseDC(ll_TargetDC,ll_handle)
DeleteObject(ll_bitmap)

在windowsxp、2000下测试通过。
需要注意重绘的问题。关注以下事件:pbm_paint,pbm_ncpaint
guxing 2003-08-31
  • 打赏
  • 举报
回复
声明API
Function Long GetDC (Long hwnd ) Library "user32.dll" Alias For "GetDC"
Function Long CreateSolidBrush (Long crColor) Library "gdi32.dll"
FUNCTION Long CreatePatternBrush(Long hBitmap) LIBRARY "gdi32.dll"
FUNCTION Long LoadImage(Long hInst, string lpsz, Long uType, Long cxDesired, Long cyDesired, Long fuLoad) LIBRARY "user32.dll" ALIAS FOR "LoadImageA"
Function Long PatBlt (Long hdc, Long x, Long y, Long nWidth, Long nHeight, Long dwRop) Library "gdi32.dll"
Function Long FillRect(Long hdc,Ref stru_RECT lpRect, Long hBrush) Library "user32.dll"
Function long SelectObject (Long hdc, Long hObject)Library "gdi32.dll"
FUNCTION Long DeleteObject(Long hObject) LIBRARY "gdi32.dll"

结构:
global type stru_rect from structure
long Left
long Top
long Right
long Bottom
end type

//LoadImage常量
CONSTANT Long LR_LOADFROMFILE = 16
CONSTANT Long IMAGE_BITMAP = 0
CONSTANT Long IMAGE_ICON = 1
CONSTANT Long IMAGE_CURSOR = 2

//函数
public function long uf_set_back_pic (long hwnd, string filename, integer width, integer height);Long ll_ret
Long ll_hdc,ll_hBrush,ll_lhbitmap,ll_ohdc
//LoadImgae 常数
//Constant long IMAGE_BITMAP = 0
Constant long PATCOPY = 15728673//&HF00021 '
stru_rect str_r
ll_hdc = Getdc(hwnd)
//Create a new brush
ll_hBrush = CreateSolidBrush(16777215)
//Set the rectangle's values
str_r.Top = 0
str_r.Left = 0
str_r.Bottom = width
str_r.Right = height
FillRect (ll_hdc, str_r, ll_hBrush)
//delete our brush
DeleteObject(ll_hBrush)

ll_lhbitmap = LoadImage(0, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
ll_hBrush = CreatePatternBrush(ll_lhbitmap)

ll_ohdc = SelectObject(ll_hdc, ll_hBrush)
//Perform the Pattern Block Transfer
ll_ret = PatBlt(ll_hdc, 0, 0, Width, Height, PATCOPY)
//restore the old brush and delete our pattern brush
DeleteObject(SelectObject(ll_hdc, ll_ohdc))
RETURN ll_ret
end function

在2000server测试成功
可联系dch01@263.net
msf 2003-08-30
  • 打赏
  • 举报
回复
你可以用数据窗口来实现.
skylake888 2003-08-30
  • 打赏
  • 举报
回复
jerrymao(加菲猫) 能不能给俺一份阿,先谢谢了!!!

email: skylake888@hotmail.com
纳米茶 2003-08-30
  • 打赏
  • 举报
回复
给我你的email,给你一个完美解决方案
hxf0 2003-08-30
  • 打赏
  • 举报
回复
UP
rabbitsfoot 2003-08-28
  • 打赏
  • 举报
回复
不是啊,反正只要我给出两个条件:窗口和图片,就要能设置!
eastpond 2003-08-28
  • 打赏
  • 举报
回复
sinkiangscorpio 2003-08-25
  • 打赏
  • 举报
回复
是mdi的背景图片吗?如果是网上有的是这样的东西
rabbitsfoot 2003-08-25
  • 打赏
  • 举报
回复
看来我这150分也不是那么好拿的啊,如果有人给完美答案,可继续加分!
polugen 2003-08-24
  • 打赏
  • 举报
回复
有两种方法
一、你可以放一个PICTRUE控件,大小和窗口一样大
二、你可以拷贝一段VC代码略微改一下就可以了,但是只有BMP比较简单
mah1212 2003-08-24
  • 打赏
  • 举报
回复
关注
klbt 2003-08-24
  • 打赏
  • 举报
回复
polugen(独孤狂客)的方法可行,速度确实是一个问题,可以考虑不用真彩色,用32k色试试。
softdear 2003-08-24
  • 打赏
  • 举报
回复
同意楼上,速度太慢
hzhxxx 2003-08-24
  • 打赏
  • 举报
回复
比较难,设置好了,速度也太慢
rabbitsfoot 2003-08-23
  • 打赏
  • 举报
回复
这段时间比较忙,过几天会来结帐的。

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧