找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 794|回复: 14

[求助]:图片为何和在AutoCAD中不可以显示

[复制链接]
发表于 2006-4-17 10:36:55 | 显示全部楼层 |阅读模式

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

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

×
我现在想在AutoCAD中实现预览图片的功能,不知道为什么当我用纯vc++编程的时候,在vc++中编译和执行都没有错,而且还可以得到想要的结果,即当我点击不同的按钮时可以在picture控件上看到不同的图片,
    可是当我用objectArx来实现刚才的过程,问题就出来了,程序在vc++中编译还是没有错误,可就是在AutoCAD中运行就是看不见图片.为什么?大虾帮一下忙!!!

这是我的使用代码:


        CDialog::OnInitDialog();
       
        // TODO: Add extra initialization here

        HBITMAP hBmp =NULL;
        hBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
        ASSERT(hBmp!=NULL);
        m_b1.SetBitmap(hBmp);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-17 15:07:08 | 显示全部楼层
估计是资源冲突了!你在构建这个对话框前加一句:
CAcModuleResourceOverride resOverride;
再试试看!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-17 15:52:59 | 显示全部楼层

不行

我刚刚试了你说的方法,可还是不行.
在ARX程序应用中,经常需要同时加载多个ARX文件,如果多个文件都含有对话框,可能就会导致某些程序无法运行,这时添加CAcModuleResourceOverride resOverride;可能会有用.但我的文件资源并不多.而且头文件AcExtensionModule.h也加了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-17 16:04:27 | 显示全部楼层
调试调试呢,看看LoadBitmap()和AfxGetInstanceHandle()的执行有没有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-17 16:43:53 | 显示全部楼层

继续

或许是我对vc++和arx 之间的关系了解的太少了.
我想知道一下一般要实现上面我所说的功能,大虾们一般都采取什么方法呢?可不可以发点源代码给我看看?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-18 08:24:31 | 显示全部楼层
我觉得可能是图片显示之前已经析构了。这个问题不是很难,把源码上传上来,看看到底怎么回事。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-18 08:59:16 | 显示全部楼层

析构吗?

大虾说的好象很麻烦呀!
我的位图直接放在resource file里面,也就是说直接调用位图资源.难道在初始化对话框的同时不可以在picture控件上加载位图吗?下面上我的源代码:

其中: IDB_BITMAP1 是位图的ID
          m-b1类型为CStatic, 是picture的一个变量.

CDialog::OnInitDialog();

// TODO: Add extra initialization here

HBITMAP hBmp =NULL;
hBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
ASSERT(hBmp!=NULL);
m_b1.SetBitmap(hBmp);

再次申明,这段代码在纯vc++中运行完全可以,而且可以得到想要的结果;将之转化到objectArx中也可以编译,可就是在autocad运行的时候得不到结果,即上面什么图片都没有!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-18 09:12:54 | 显示全部楼层
代码的几个问题:
1、AfxGetInstanceHandle()功能为获取用于创建当前进程的主模块的实例句柄,在这里将返回
   acad.exe的模块句柄。若用于存取资源且资源位于当前ARX模块中,则应使用_hdllInstance
      全局变量或宏。
2、所有在运行期需要有效的GDI对象句柄的定义应放在拥有/创建此GDI对象中,以便有效的
   构造和析构(或者清理)。在这里应将hBmp定义为对话框的成员变量,在对话框构造或
   初始化时初始化此变量,在对话框析构或销毁时删除它(用DeleteObject)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-4-18 09:18:20 | 显示全部楼层
AfxGetInstanceHandle()返回的应该是ACAD.EXE句柄,因此应该:
  extern HINSTANCE _hdllInstance ;
hBmp=LoadBitmap(_hdllInstance ,MAKEINTRESOURCE(IDB_BITMAP1));
_hdllInstance  为全局变量,在DllMain中增加     _hdllInstance = hInstance;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-4-18 14:03:18 | 显示全部楼层
在退出后一定别忘了资源的释放
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-18 21:43:41 | 显示全部楼层

感谢!!!

多谢各位大虾的帮忙,小弟的问题总算是解决掉了.特别是九楼的兄弟,你真的很厉害,句句有用,很好!谢谢各位大虾了!
现在我把我认为很重要的地方再次写出来,以便对下一个遇到和我同样问题的虾客有所帮助.

首先实现的程序代码:

HBITMAP hBmp =NULL;
        hBmp=LoadBitmap(_hdllInstance,MAKEINTRESOURCE(IDB_BITMAP2));
        ASSERT(hBmp!=NULL);
        m_b1.SetBitmap(hBmp);
仅仅有这还不行,还要注意以下三点:
(1)     加入 _hdllInstance = hInstance; 位置如下:

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
    _hdllInstance = hInstance;
   ....................................       
} else if (................) {.............        }
        return TRUE;    // ok
}


(2)  HINSTANCE _hdllInstance =NULL ;  放在上述文件的最上面,作为全局变量.
(3) 加入 extern HINSTANCE _hdllInstance ;位置是在实现程序代码文件的上面作为全局声明.一般在xxxDLg.cpp的上面.

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

使用道具 举报

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

使用道具 举报

发表于 2006-4-21 20:17:43 | 显示全部楼层

感谢

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

使用道具 举报

发表于 2006-4-24 11:24:25 | 显示全部楼层
的却不错
再问一下如何自动控制图片的大小啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 10:27 , Processed in 0.324147 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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