前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

关于在PB控件上画图的问题 - CSDN论坛 - CSDN.NET --> 首页 论坛帮助 论坛牛人 论坛地图 CSDN > CSDN论坛 > PowerBuilder > 控件与界面 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 PaperKite 关于在PB控件上画图的问题 [问题点数:20分,结帖人PaperKite] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 PaperKite PaperKite 等级: 结帖率:100% 楼主 发表于: 2001-08-13 10:00:12 在DATAWINDOW控件(或者其他控件)上画图,PB有个函数DRAW(),它只能将图象画在窗口上,不能画在其他控件上。要将图象按坐标画在控件上,在PB找不到有这样的函数,API好象有,但不知是哪一个,且不知如何用。有别的办法吗? 分享到: 更多 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 回复次数:31 killerdanny killerdanny 等级: 结帖率:99% 2 #1 得分:0 回复于: 2001-08-13 10:31:52 Function Uint GetDC(Uint hWnd) libery"user32.dll" Function Uint CreatePen(int PenStale,int Width,long ColorRef) libery"GDI32.dll" Function Uint SelectObject(Uint hDC,Uint hGDIObj) libery"GDI32.dll" Function Uint Moveto(Uint hDC,int xStart,int yStart) libery"GDI32.dll" Function Uint lineto(Uint hDC,int xEnd,int yEnd) libery"GDI32.dll" 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 killerdanny killerdanny 等级: 结帖率:99% 2 #2 得分:0 回复于: 2001-08-13 10:40:17 Uint lu_HWD,LU_hDC,LU_PEN,LU_OBJDC lu_HWD= HANDLE(dw_1)//DW的句柄 LU_hDC=GetDC(lu_HWD)//图形设备句柄 LU_PEN=CreatePen(0,1,RGB(255,0,0))//红实线 LU_OBJDC = SelectObject(LU_hDC,LU_PEN) Moveto(LU_hDC,95,19) lineto(LU_hDC,121,65) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 hzslx hzslx 等级: 结帖率:100% #3 得分:0 回复于: 2001-08-13 10:55:37 全部的绘图函数: 呵呵 抄来的 AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 AngleArc 用一个连接弧画一条线 Arc 画一个圆弧 BeginPath 启动一个路径分支 CancelDC 取消另一个线程里的长时间绘图操作 Chord 画一个弦 CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 CloseFigure 描绘到一个路径时,关闭当前打开的图形 CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄 CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝) CopyMetaFile 制作指定(标准)图元文件的一个副本 CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案) CreateEnhMetaFile 创建一个增强型的图元文件设备场景 CreateHatchBrush 创建带有阴影图案的一个刷子 CreateMetaFile 创建一个图元文件设备场景 CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 CreatePen 用指定的样式、宽度和颜色创建一个画笔 CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 CreateSolidBrush 用纯色创建一个刷子 DeleteEnhMetaFile 删除指定的增强型图元文件 DeleteMetaFile 删除指定的图元文件 DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放 DrawEdge 用指定的样式描绘一个矩形的边框 DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序 DrawFocusRect 画一个焦点矩形 DrawFrameControl 描绘一个标准控件 DrawState 为一幅图象或绘图操作应用各式各样的效果 Ellipse 描绘一个椭圆,由指定的矩形围绕 EndPath 停止定义一个路径 EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录 EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 ExtCreatePen 创建一个扩展画笔(装饰或几何) ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域 FillPath 关闭路径中任何打开的图形,并用当前刷子填充 FillRect 用指定的刷子填充一个矩形 FlattenPath 将一个路径中的所有曲线都转换成线段 FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 FrameRect 用指定的刷子围绕一个矩形画一个边框 GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 GdiFlush 执行任何未决的绘图操作 GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中 GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列 GetArcDirection 画圆弧的时候,判断当前采用的绘图方向 GetBkColor 取得指定设备场景当前的背景颜色 GetBkMode 针对指定的设备场景,取得当前的背景填充模式 GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 GetCurrentObject 获得指定类型的当前选定对象 GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置 GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄 GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 GetEnhMetaFileDescription 返回对一个增强型图元文件的说明 GetEnhMetaFileHeader 取得增强型图元文件的图元文件头 GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄 GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 GetMiterLimit 取得设备场景的斜率限制(Miter)设置 GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色 GetObjectAPI 取得对指定对象进行说明的一个结构 GetObjectType 判断由指定句柄引用的GDI对象的类型 GetPath 取得对当前路径进行定义的一系列数据 GetPixel 在指定的设备场景中取得一个像素的RGB值 GetPolyFillMode 针对指定的设备场景,获得多边形填充模式 GetROP2 针对指定的设备场景,取得当前的绘图模式 GetStockObject 取得一个固有对象(Stock) GetSysColorBrush 为任何一种标准系统颜色取得一个刷子 GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件 InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形 LineDDA 枚举指定线段中的所有点 LineTo 用当前画笔画一条线,从当前位置连到一个指定的点 MoveToEx 为指定的设备场景指定一个新的当前画笔位置 PaintDesktop 在指定的设备场景中描绘桌面墙纸图案 PathToRegion 将当前选定的路径转换到一个区域里 Pie 画一个饼图 PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录 PlayMetaFile 在指定的设备场景中回放一个图元文件 PlayMetaFileRecord 回放来自图元文件的单条记录 PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线 PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成 Polygon 描绘一个多边形 Polyline 用当前画笔描绘一系列线段 PolyPolygon 用当前选定画笔描绘两个或多个多边形 PolyPolyline 用当前选定画笔描绘两个或多个多边形 Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充 RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充 SelectClipPath 将设备场景当前的路径合并到剪切区域里 SelectObject 为当前设备场景选择图形对象 SetArcDirection 设置圆弧的描绘方向 SetBkColor 为指定的设备场景设置背景颜色 SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 SetMiterLimit 设置设备场景当前的斜率限制 SetPixel 在指定的设备场景中设置一个像素的RGB值 SetPixelV 在指定的设备场景中设置一个像素的RGB值 SetPolyFillMode 设置多边形的填充模式 SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件 StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域 StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭 UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数 WidenPath 根据选定画笔的宽度,重新定义当前选定的路径 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #4 得分:0 回复于: 2001-08-13 10:58:02 谢谢!有一图形控件p_1,要将p_1的图象画到控件上怎么画? 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #5 得分:0 回复于: 2001-08-13 11:13:29 1、用API如何取得p_1的图象? 2、用API的什么函数将取出来的图象画到控件上? 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #6 得分:0 回复于: 2001-08-13 12:06:54 有谁知道如何解决? 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #7 得分:0 回复于: 2001-08-13 13:35:37 先获得该图形控件的上下文(DC) 再用Bitblt复制到目标DC上 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #8 得分:0 回复于: 2001-08-13 13:37:12 获得DC可以使用: GetDC(Handle(p_1)) GetDC是API函数 需要事先声明 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #9 得分:0 回复于: 2001-08-13 14:52:15 BitBlt(GetDC(Handle(w_test.dw_1)),,100,100,32,32,GetDC(Handle(w_test.p_1)),100,100,0) 如上函数得到的结果是一个32x32的黑方块,为什么? 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #10 得分:0 回复于: 2001-08-13 15:54:08 谁来帮忙解决?急! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #11 得分:0 回复于: 2001-08-13 16:35:44 兄弟,帮帮忙吧,真的很急! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #12 得分:0 回复于: 2001-08-13 16:42:27 如果只是要在DW上加个图片 可以动态在DW中添加一个图片对象啊 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #13 得分:0 回复于: 2001-08-13 16:47:28 最后一个参数不要用0 试试 13369376 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #14 得分:0 回复于: 2001-08-13 16:49:02 用API有个缺点 需要在pbm_paint事件里加入处理 要不然一刷新窗口(比如最小化再最大化)后,图片就看不到了 所以还是建议你在DW里动态添加一个图片对象 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #15 得分:0 回复于: 2001-08-13 17:34:16 谢谢!还是不行。出来的结果是什么都没有,最后的一个参数都有哪些?我在API帮助里没找着。如果仅仅只是在DW里加图片的话就简单多了,问题是我想在DW(或其它控件)上实现画类似流程图的功能,怎么办?麻烦各位了。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #16 得分:0 回复于: 2001-08-13 17:40:15 我试了一下 没问题的 看看你的 BitBlt(GetDC(Handle(w_test.dw_1)),,100,100,32,32,GetDC(Handle(w_test.p_1)),100,100,0) 中的后面的两个100 如果你的图不是要从源图片的100,100位置开始而是0,0开始的话,请用0,0 还有你多了个逗号 还是建议你用DW DW中可以任意添加各种图形对象(圆、线)等 在C:\Program Files\Sybase\Shared\PowerBuilder\cgen\h\nt\wingdi.h 中有声明 我黏糊了一些在下面 #define SRCCOPY (DWORD)0x00CC0020 /* dest = source */ #define SRCPAINT (DWORD)0x00EE0086 /* dest = source OR dest */ #define SRCAND (DWORD)0x008800C6 /* dest = source AND dest */ #define SRCINVERT (DWORD)0x00660046 /* dest = source XOR dest */ #define SRCERASE (DWORD)0x00440328 /* dest = source AND (NOT dest ) */ 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 chinalht chinalht 等级: 结帖率:100% #17 得分:20 回复于: 2001-08-13 17:52:36 楼上写的必须要求图片已经显示在屏幕上了,否则就是一片黑了. 你不如用api LoadImage来自己读取图片显示呢.我写的一个仿IE工具栏就是这么作的,效果还不错. 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #18 得分:0 回复于: 2001-08-13 17:58:40 chinalht(chinalht) 兄所言极是 & chinalht(chinalht) 兄的ToolBar确实是好东东 兄弟受益非浅,借此宝地向兄台谢过了 8-) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #19 得分:0 回复于: 2001-08-13 22:41:47 多谢兄台指点。 按你所述方法已可以实现,但如chinalht兄所说,图象必须显示在屏幕上,改用LOADIMAGE()后,图象就是出不来,还烦请指点: string ll_name ll_name = "e:\image.bmp" BitBlt(GetDC(Handle(w_test.dw_1)),100,100,32,32,loadimage(0,ll_name,0,0,0,16),0,0,13369376) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #20 得分:0 回复于: 2001-08-14 09:18:17 请帮忙看看。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #21 得分:0 回复于: 2001-08-14 09:36:57 试试 uLONG ll_hmemdc,ll_hbitmap STRING ls_name ls_name = 'e:\image.bmp' ll_hmemdc = CreateCompatibleDC(GetDC(Handle(w_test))) ll_hbitmap = LoadImage(0,ls_name,0,0,0,16) SelectObject(ll_hmemdc, ll_hbitmap) BitBlt(GetDC(Handle(w_test.dw_1)),1,1,32,32,ll_hmemdc,0,0,13369376) DeleteDC(ll_hmemdc) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #22 得分:0 回复于: 2001-08-14 11:21:57 运行时报错:调用SelectObject()错误(意译)。我可是ctrl+c、ctrl+v呀,WHY? 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 Hanson_bati_zhu Hanson_bati_zhu 等级: 结帖率:100% 22 #23 得分:0 回复于: 2001-08-14 11:26:15 看看跟我用的函数声明是不是不一样啊 Function ulong SelectObject(ulong hdc, ulong hWnd) Library "GDI32.DLL" FUNCTION ulong BitBlt(ulong hDestDC,ulong x,ulong y,ulong nWidth,ulong nHeight,ulong hSrcDC,ulong xSrc,ulong ySrc,ulong dwRop) LIBRARY "gdi32.dll" FUNCTION ulong LoadImage(ulong hInst,ref string lpsz,ulong un1,ulong n1,ulong n2,ulong un2) LIBRARY "user32.dll" ALIAS FOR "LoadImageA" FUNCTION ulong CreateCompatibleDC(ulong hdc) LIBRARY "gdi32.dll" FUNCTION ulong DeleteDC(ulong hdc) LIBRARY "gdi32.dll" 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #24 得分:0 回复于: 2001-08-14 12:20:27 一语中的,果然是将selectobject()定义错为user32.dll。搞定! 兄弟又学了几招。Hanson_bati_zhu兄,多谢,多谢! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 headgo headgo 等级: 结帖率:92% #25 得分:0 回复于: 2001-08-14 13:43:11 to PaperKite(PaperKite): 我也想在pb中实现绘图,然后保存的功能,但我对此一窍不通,不知是否能保你的代码给我一份? shjt2000@263.net 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 chinalht chinalht 等级: 结帖率:100% #26 得分:0 回复于: 2001-08-14 14:00:26 找一些有关API的说明看看吧.比如说DELPHI带的有关API的帮助文件. 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 PaperKite PaperKite 等级: 结帖率:100% #27 得分:0 回复于: 2001-08-14 14:39:05 兄弟正有此意,可惜手头上的API帮助是VB的,且介绍较简单,我也正在搜寻有关API较详细的资料。兄台若有好的推荐,兄弟感激不尽。 headgo兄:咱可以切磋切磋。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 headgo headgo 等级: 结帖率:92% #28 得分:0 回复于: 2001-08-22 22:20:29 to PaperKite(PaperKite): 我手头上的api说明也是vb的,但找不到moveto的说明,你最前面的一段代码,我在我得pb程序里测试了一下,在moveto处执行不过去。不知为什么? 我想实现在图片框中的bmp文件上画直线和园,并能将所画的图形保存到原bmp文件,不知怎么实现,请一定赐教! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 chinalht chinalht 等级: 结帖率:100% #29 得分:0 回复于: 2001-08-23 19:30:28 MoveTo函数有4个参数 可以定义一个点结构 us_point ( x:long;y:long) MoveTo(ulong dc, long x, long y, ref us_point apt) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 headgo headgo 等级: 结帖率:92% #30 得分:0 回复于: 2001-08-24 14:46:04 我定义了结构point ( x:long;y:long) 一下是函数的声明和代码 Function Uint GetDC(Uint hWnd) library "user32.dll" Function Uint CreatePen(int PenStale,int Width,long ColorRef) library"GDI32.dll" Function Uint SelectObject(Uint hDC,Uint hGDIObj) library"GDI32.dll" Function Uint Moveto(Uint hDC,int xStart,int yStart,point lp_point) library"GDI32.dll" Function Uint lineto(Uint hDC,int xEnd,int yEnd) library"GDI32.dll" point lp_point Uint lu_HWD,LU_hDC,LU_PEN,LU_OBJDC lu_HWD= HANDLE(dw_1)//DW的句柄 LU_hDC=GetDC(lu_HWD)//图形设备句柄 LU_PEN=CreatePen(0,1,RGB(255,0,0))//红实线 LU_OBJDC=SelectObject(LU_hDC,LU_PEN) Moveto(LU_hDC,95,19,lp_point) lineto(LU_hDC,121,65) 但还是在moveto处通不过,错误信息为‘Bad runtime function reference’。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 chinalht chinalht 等级: 结帖率:100% #31 得分:0 回复于: 2001-08-28 19:13:23 Function Uint Moveto(Uint hDC,int xStart,int yStart,ref point lp_point) library"GDI32.dll" lp_point 是 ref 类型参数。函数把原来的位置保存到里面返回 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 写出你眼中的IE11 赢取新年好礼! 勇敢写出你的爱 赢莫文蔚签名大礼 2014年4月微软MVP申请开始了! 陈勇- 敏捷开发现状及发展之路 CSDN高校俱乐部 高校全新改版邀你来学习和挑战 本帖子已过去太久远了,不再提供回复功能。 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace [关闭] [关闭]