找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 995|回复: 15

[求助]:MDL中的一个小问题---对话框条目上贴图

[复制链接]
发表于 2002-10-29 17:32:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一个小技巧:在对话框条目上贴位图,或放置动态效果。

1):我目前只能在条目上装载“CELL”,如何装载“bmp”等的位图?见图一。


2):动态效果如何实现?
见图二。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-10-29 17:34:14 | 显示全部楼层
补发:图二
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-29 17:39:35 | 显示全部楼层
图二中的照片上有一行“动态”的字幕,某一瞬时情景如下:
我一直困惑与此,不知作者是用的“AVI”还是其他技术。不知谁肯赐教有关的实现方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-30 10:38:16 | 显示全部楼层
MDL开发者请赐教,不胜感激!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 12:05:32 | 显示全部楼层
请 MICROSTATION迷 朋友解答吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-30 14:49:47 | 显示全部楼层
1.首先你對 Generic 要有認識

2.對於 Generic 之 hookfunction 要對應之
  如:

  1. [FONT=courier new]
  2.      void Generic_itemHook(DialogItemMessage *dimP)
  3.        {
  4.         dimP->msgUnderstood = TRUE;
  5.         
  6.         switch (dimP->messageType)
  7.           {
  8.            case DITEM_MESSAGE_CREATE:
  9.                 break;
  10.            
  11.            case DITEM_MESSAGE_DRAW:
  12.                 draw_gen (dimP->db);
  13.            break;
  14.            .
  15.            .
  16.            .
  17.            .
  18.            .
  19.            .
  20.            case DITEM_MESSAGE_BUTTON:
  21.                 do_what_you_do ();
  22.            break;
  23.            default:
  24.                dimP->msgUnderstood = FALSE;
  25.            break;
  26.            }
  27.         }
  28. [/FONT]
复制代码


3.你可以試一試下面片段:

  1. [FONT=courier new]
  2.       void draw_gen(DialogBox *dbP)
  3.         {
  4.          int      x, y, ditherWidth;
  5.          byte    *reds, *greens, *blues, *imageBuffer;
  6.          int      type;
  7.          Point2d  size;
  8.          char     cmp[4];
  9.          
  10.           strncpy (cmp, FileName+strlen(FileName)-3, 3);
  11.           /* 檔案名稱: FileName Ex: pic.bmp */
  12.          
  13.           type = 0;
  14.           if (strcmp (strlwr(cmp), "rgb") == 0) type = 1;
  15.           if (strcmp (strlwr(cmp), "jpg") == 0) type = 18;
  16.           if (strcmp (strlwr(cmp), "tif") == 0) type = 3;
  17.           if (strcmp (strlwr(cmp), "bmp") == 0) type = 9;
  18.          
  19.           mdlImage_readFileInfo (&size, NULL, NULL, FileName, type);
  20.          
  21.           imageBuffer = malloc (3*size.x*size.y);
  22.           mdlImage_readFileToRGB (&imageBuffer, &size, FileName, type, NULL, NULL);
  23.          
  24.           /* Get size of each scan line in rectangle that we will be dithering. */
  25.           ditherWidth = size.x;
  26.      
  27.           /* Malloc arrays of "reds, greens, blues" rgb components.
  28.              There must be one component in each array per pixel in
  29.              dithered scan line. */
  30.          
  31.           if ( (reds = malloc (ditherWidth)) == NULL)
  32.               {
  33.               free (imageBuffer);
  34.               return (ERROR);
  35.               }
  36.           if ( (greens = malloc (ditherWidth)) == NULL)
  37.               {
  38.               free (imageBuffer);
  39.               free (reds);
  40.               return (ERROR);
  41.               }
  42.           if ( (blues = malloc (ditherWidth)) == NULL)
  43.               {
  44.               free (imageBuffer);
  45.               free (reds);
  46.               free (greens);
  47.               return (ERROR);
  48.               }
  49.       
  50.           for (y=0; y < size.y; y++)
  51.               {
  52.               for (x=0; x < size.x; x++)
  53.                   {
  54.                   /* Let's define a "hot pink" dither line. */
  55.                   reds[x]   = imageBuffer[3*size.x*y + x];
  56.                   greens[x] = imageBuffer[3*size.x*y + size.x + x];
  57.                   blues[x]  = imageBuffer[3*size.x*y + 2*size.x + x];
  58.                   }
  59.               
  60.               mdlDither_drawRow (dbP, 2,
  61.                     size.x+1, y+2, reds, greens, blues);
  62.               }
  63.          
  64.           free (reds);
  65.           free (greens);
  66.           free (blues);
  67.           free (imageBuffer);
  68.           return (SUCCESS);
  69.        }
  70.        [/FONT]
复制代码

如有錯誤之處,敬請多多指教......u2u
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-30 14:57:43 | 显示全部楼层
就不知怎樣榜 Img 檔案,編入 rsc
有人可告知否?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-30 17:37:39 | 显示全部楼层
u2u 谢谢你。
但我按上述的方法做了,编译没问题,执行却崩溃。
我是这样用的:
char FileName[255];
strcpy(FileName,"c:\\test.bmp");
是否对调用的文件有要求?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-30 18:05:27 | 显示全部楼层
#include <image.h>
#include <msimage.fdf>

void mdlDither_drawRow
(
MSWindow   *windowP,       /* <= Window to dither in */
long        x0,            /* => x coord of first pixel in row */
long        x1,            /* => x coord of last pixel in row */
long        y,             /* => y coord of first pixel in row */
byte       *reds,          /* => red values for each pixel */
byte       *grns,          /* => green values for each pixel */

byte       *blus           /* => blue values for each pixel */
);

修正啟事
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-30 18:28:13 | 显示全部楼层
新来乍到,请多指教!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-31 16:34:09 | 显示全部楼层
最初由 u2u 发布
[B]mdlDither_drawRow (dbP,    2, /* 此處為 item 之順序,由0 開始.... ,端視程式修改之*/
                    size.x+1, y+2, reds, greens, blues); [/B]


还是不行,也许是别的地方出了问题。
能否给我一个可编译运行的例子工程?
或者将我的工程传给你,帮我查查是何原因?
:6
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-31 16:39:51 | 显示全部楼层
e_mail: cws1234@yam.com
或上傳至論壇
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-31 18:06:43 | 显示全部楼层
整个的工程如下:
位图为何不在控件上?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-31 18:08:58 | 显示全部楼层
注:位图"test.bmp"的路径为:“c:\test.bmp”。
有空帮我看看,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-31 21:00:29 | 显示全部楼层
1.本人使用ms95

2.自己新增2個檔案 all.h 及 fdf.h 放置於 ...\mdl\include 之下
  以免忘了 .h 之調用

all.h 如下:
           #include < 3DTOOLS.H>
           #include < ACCUDRAW.H>
           #include < ASYNCH.H>
           #include < AUXINPUT.H>
           #include < AVLTREE.H>
           #include < BASEDEFS.H>
           #include < BASETYPE.H>
           #include < CEXPR.H>
           #include < CEXPRRSC.H>
           #include < CLIPBRD.H>
           #include < CLIPDSCR.H>
           #include < CMDCLASS.H>
           #include < CODESET.H>
           #include < COLRNAME.H>
           #include < DATADEF.H>
           #include < DBDEFS.H>
           #include < DBERRS.H>
           #include < DBLEVELS.H>
           #include < DBSERVER.H>
           #include < DEFFILES.H>
           #include < DLMFUNCS.H>
           #include < DLOGBOX.H>
           #include < DLOGIDS.H>
           #include < DLOGITEM.H>
           #include < DRAFTIDS.H>
           #include < EXTGRAPH.H>
           #include < FILELIST.H>
           #include < FONTERR.H>
           #include < GLOBAL.H>
           #include < HELPDLOG.H>
           #include < HELPIDS.H>
           #include < IMAGE.H>
           #include < KEYS.H>
           #include < LEVELS.H>
           #include < LIGHT.H>
           #include < MATERIAL.H>
           #include < MDL.H>
           #include < MDLBSPLN.H>
           #include < MDLDIM.H>
           #include < MDLERRS.H>
           #include < MDLHVIEW.H>
           #include < MDLIO.H>
           #include < MDLSETJP.H>
           #include < MSBUTTON.H>
           #include < MSCONS.H>
           #include < MSCOLOR.H>
           #include < MSDEFS.H>
           #include < MSELEMS.H>
           #include < MSEXTERN.H>
           #include < MSEXTOK.H>
           #include < MSFNTXLT.H>
           #include < MSFRACT.H>
           #include < MSHELP.H>
           #include < MSINPUTQ.H>
           #include < MSLICENS.H>
           #include < MSLSTYLE.H>
           #include < MSSLVR.H>
           #include < MSTYPES.H>
           #include < ODARRAY.H>
           #include < PLOTTER.H>
           #include < PLTSTRCT.H>
           #include < RASTREF.H>
           #include < RENDLINK.H>
           #include < REFERNCE.H>
           #include < RSCDEFS.H>
           #include < RTCONFIG.H>
           #include < RTYPES.H>
           #include < SCANNER.H>
           #include < SELECT.H>
           #include < SETTINGS.H>
           #include < SYSTEM.H>
           #include < TAGDATA.H>
           #include < TCB.H>
           #include < TOOLSET.H>
           #include < UNICODE.H>
           #include < UPDATE.H>
           #include < USERFNC.H>
           #include < USERPREF.H>
           #include < VARICHAR.H>
           #include < VARTYPES.H>
           #include < W32DDE.H>
           #include < WIDECHAR.H>
           #include < WINDMSG.H>
           #include < CMDLIST.H>
           #include < DLOADLIB.H>
           #include < ASSERT.H>
           #include < CTYPE.H>
           #include < DOS.H>
           #include < ERRNO.H>
           #include < FLOAT.H>
           #include < LIMITS.H>
           #include < LOCALE.H>
           #include < MATH.H>
           #include < OSIO.H>
           #include < SETJMP.H>
           #include < STDARG.H>
           #include < STDDEF.H>
           #include < STDIO.H>
           #include < STDLIB.H>
           #include < STDPROTO.H>
           #include < STRING.H>
           #include < TIME.H>
           #include < WCHAR.H>

fdf.h如下:
           #include < 3DTOOLS.H>
           #include < ACCUDRAW.H>
           #include < ASYNCH.H>
           #include < AUXINPUT.H>
           #include < AVLTREE.H>
           #include < BASEDEFS.H>
           #include < BASETYPE.H>
           #include < CEXPR.H>
           #include < CEXPRRSC.H>
           #include < CLIPBRD.H>
           #include < CLIPDSCR.H>
           #include < CMDCLASS.H>
           #include < CODESET.H>
           #include < COLRNAME.H>
           #include < DATADEF.H>
           #include < DBDEFS.H>
           #include < DBERRS.H>
           #include < DBLEVELS.H>
           #include < DBSERVER.H>
           #include < DEFFILES.H>
           #include < DLMFUNCS.H>
           #include < DLOGBOX.H>
           #include < DLOGIDS.H>
           #include < DLOGITEM.H>
           #include < DRAFTIDS.H>
           #include < EXTGRAPH.H>
           #include < FILELIST.H>
           #include < FONTERR.H>
           #include < GLOBAL.H>
           #include < HELPDLOG.H>
           #include < HELPIDS.H>
           #include < IMAGE.H>
           #include < KEYS.H>
           #include < LEVELS.H>
           #include < LIGHT.H>
           #include < MATERIAL.H>
           #include < MDL.H>
           #include < MDLBSPLN.H>
           #include < MDLDIM.H>
           #include < MDLERRS.H>
           #include < MDLHVIEW.H>
           #include < MDLIO.H>
           #include < MDLSETJP.H>
           #include < MSBUTTON.H>
           #include < MSCONS.H>
           #include < MSCOLOR.H>
           #include < MSDEFS.H>
           #include < MSELEMS.H>
           #include < MSEXTERN.H>
           #include < MSEXTOK.H>
           #include < MSFNTXLT.H>
           #include < MSFRACT.H>
           #include < MSHELP.H>
           #include < MSINPUTQ.H>
           #include < MSLICENS.H>
           #include < MSLSTYLE.H>
           #include < MSSLVR.H>
           #include < MSTYPES.H>
           #include < ODARRAY.H>
           #include < PLOTTER.H>
           #include < PLTSTRCT.H>
           #include < RASTREF.H>
           #include < RENDLINK.H>
           #include < REFERNCE.H>
           #include < RSCDEFS.H>
           #include < RTCONFIG.H>
           #include < RTYPES.H>
           #include < SCANNER.H>
           #include < SELECT.H>
           #include < SETTINGS.H>
           #include < SYSTEM.H>
           #include < TAGDATA.H>
           #include < TCB.H>
           #include < TOOLSET.H>
           #include < UNICODE.H>
           #include < UPDATE.H>
           #include < USERFNC.H>
           #include < USERPREF.H>
           #include < VARICHAR.H>
           #include < VARTYPES.H>
           #include < W32DDE.H>
           #include < WIDECHAR.H>
           #include < WINDMSG.H>
           #include < CMDLIST.H>
           #include < DLOADLIB.H>
           #include < ASSERT.H>
           #include < CTYPE.H>
           #include < DOS.H>
           #include < ERRNO.H>
           #include < FLOAT.H>
           #include < LIMITS.H>
           #include < LOCALE.H>
           #include < MATH.H>
           #include < OSIO.H>
           #include < SETJMP.H>
           #include < STDARG.H>
           #include < STDDEF.H>
           #include < STDIO.H>
           #include < STDLIB.H>
           #include < STDPROTO.H>
           #include < STRING.H>
           #include < TIME.H>
           #include < WCHAR.H>

3.編譯時發生錯誤,如下:
   GENERICID_200000001 重複 define

4.修正 basic.mc

#include    < mdl.h>            /* MDL Library funcs structures & constants */
#include    < dlogitem.h>    /* Dialog Box Manager structures & constants */
#include    < cexpr.h>            /* C Expression structures & constants */
#include    < cmdlist.h>            /* MicroStation command numbers */

#include    < dlogman.fdf>   /* dialog box manager function prototypes */
#include    < msrsrc.fdf>
#include    < mssystem.fdf>
#include    < mscexpr.fdf>
#include    < msparse.fdf>

/* 新增 */
#include    < all.h>
#include    < fdf.h>


#include    "basic.h"            /* basic dialog box example constants & structs */
#include    "basiccmd.h"    /* basic dialog box command numbers */
          .
          .
          .
          .
          for (y=0; y <  size.y; y++)
              {
              for (x=0; x <  size.x; x++)
                  {
                  /* Let's define a "hot pink" dither line. */
                  reds[x]   = imageBuffer[3*size.x*y + x];
                  greens[x] = imageBuffer[3*size.x*y + size.x + x];
                  blues[x]  = imageBuffer[3*size.x*y + 2*size.x + x];
                  }
              
              mdlDither_drawRow (dbP, 182,
                    size.x+182, y+28, reds, greens, blues);
              }
          .
          .
          .
          .
以上


說明:

#include < image.h>
#include < msimage.fdf>

void mdlDither_drawRow
(
MSWindow   *windowP,       /* < = Window to dither in */
long        x0,            /* => x coord of first pixel in row */
long        x1,            /* => x coord of last pixel in row */
long        y,             /* => y coord of first pixel in row */
byte       *reds,          /* => red values for each pixel */
byte       *grns,          /* => green values for each pixel */

byte       *blus           /* => blue values for each pixel */
);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-22 21:11 , Processed in 0.444887 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表