iCAx开思网

标题: 【求助】在UG二次开发中如何调用MFC中的对话框资源? [打印本页]

作者: masterchou    时间: 2003-4-3 13:34
标题: 【求助】在UG二次开发中如何调用MFC中的对话框资源?
::?
作者: masterchou    时间: 2003-4-3 13:43
按照《UG/OPEN API程序设计》中的程序好像调不通,而且我觉得它的方法有问题,他在ufusr中调用了AfxGetMainWnd()这个函数,这是MFC中的函数,返回的是CWnd*,UG中的主窗口是CWnd型吗?
  
郁闷ing.求高手帮助,谢了先。
作者: lcfq    时间: 2003-4-3 15:05
清华书上的内容就是西北工大一个研究生的文章内容。我前不久听一个朋友讲过,他也做过这方面的事情。他觉得即使调出来了也容易导致ug非正常死机。我自己没有试过。一般的对话框直接用ui styler设计就可以了。要想使对话框更漂亮,可以看帖子“uistyler的一个小秘密”。
作者: masterchou    时间: 2003-4-3 15:52
谢了
  
但是老板要改变UG的风格,要用树型对话框组织命令,可是ui styler中没有这个控件。
可以告诉我西工大那个研究生的文章在哪儿可以看到吗?
作者: lcfq    时间: 2003-4-3 16:27
我是2001年从“ug用户论文集”中看到的。你可以用关键词“张军波”、“西北工业大学”等搜索到。
帖子“uistyler的小秘密”中显示了tree的控件。只是我不知道用。
作者: spline    时间: 2003-4-3 20:24
大家真是同病相怜呀,我也是遇到这问题,要在UG作一棵树。
不过,我发现在UG二次开发中调用MFC中的对话框资源还是有可能的。
方法之一就是做MFC动态库。在动态库中使用MFC中的对话框资源,然后把它输出成一个函数(其中的内容可以通过其形参输入和输出)。然后在UG DLL中调用MFC DLL中的这个函数。这个成功的机会很大的。
方法之二,就是用MFC DLL形式作UG二次开发(不是Win32 DLL),手工加入入口函数。这个可能有潜在的危险,不过我是成功了的。(成功的原因我还不知道)
作者: masterchou    时间: 2003-4-3 22:22
谢谢lcfq了,我找到那篇文章了,基本上跟那本书上的是一样的,可是按照他的方法做可以编译但是链接通不过。
  
spline,我按你说的方法做过,但是调到UG中运行时会出现如下的错误。
你遇见过这种情况吗?你可不可以做一个简单的调用对话框的例子给我?
谢了先!
作者: wlzhao33    时间: 2003-4-4 09:42
to spline
你说 “我也是遇到这问题,要在UG作一棵树。”可以具体说说你在做什么吗?是把装配图中的装配树输出做成一颗树吗?
作者: mood    时间: 2003-4-5 12:17
对,我也遇到了同样的问题,不知道怎么办,请帮忙,谢谢!
作者: spline    时间: 2003-4-5 12:55
应该是一棵装配树。它是一个基于知识的一个参数化设计软件,装配树的形状已经是固定的了,只是要修改树中的零件的参数和检查的规则。
作者: spline    时间: 2003-4-5 13:45
我也遇到过那个对话框。我估计是没有AFX_MANAGE_STATE(AfxGetStaticModuleState()); 的原因。
我现在把我的例子给你。其中有两种显示对话框的办法(1和3)
1:Win32 API,这个是肯定没问题的,不过这个方法估计是没人用。我想熟悉Win32 API的人现在已经不多了。
2:将对话框做到动态库中,然后在你的UG程序中装入这个动态库。这个方法很简单,我的例子一时没有找到,不好意思。另外着动态库可以用其它的语言做,我就是用Delphi做的。不过要做数据类型的转换。
3:MFC DLL的方法。
方法仅供参考
Window 2000 SP3
Visual C++6.0
作者: masterchou    时间: 2003-4-5 15:52
to spline
  
谢谢,真的是AFX_MANAGE_STATE(AfxGetStaticModuleState()); 的原因。
  
我是用你说的第三种方法做的,按第二种方法作链接有问题,不知道是什么原因。
作者: wlzhao33    时间: 2003-4-5 21:19
to spline:
"装配树的形状已经是固定的了"。问一个很弱智的问题,你的装配树的形状如果固定了,那对于不同的装配图,那你的装配树如何变化呢?
我前一段时间做了个装配树的设计,但我自己觉得很不完善,因为我把它给入到数据库以后,在PDM的软件中把他给调出来,但始终不能在这个软件中产生一个很形象的树状,而是从上到下都是平行的。不知道你是如何解决这些问题的,请多多指教。
由于我现在正忙于做SE二次开发,所以也没有多少时间来研究这个,如果你有比较完善的程序,如果方便的话,请给我发封邮件,谢谢!!邮件地址:zwlzhaowenlong@163.com
作者: spline    时间: 2003-4-6 13:49
to wlzhao33
很不好意思,我只是帮人探路的,具体的东西我没有作,要做也是在HP-UX上,可能对你的帮助不太大。
另外我也不熟悉你说的那个软件。
作者: spline    时间: 2003-4-6 13:55
to masterchou  
第二个方法我已经试过了,
我用的是下列代码做的.
typedef void(TShowSplashFromFile)(char *,HWND,int);
void ShowSplashFromFile(HWND hWnd)
{
    HMODULE hDll = LoadLibrary("c:\\temp\\ShowSplash.dll");
    TShowSplashFromFile *pProc;
    pProc = (TShowSplashFromFile *)GetProcAddress(hDll,"ShowSplashFromFile");
    (*pProc)("D:\\users\\jiangbl\\Documents\\common\\Res\\start.bmp",hWnd,2234);
    return;
}
  
我想也许是你的参数压栈类型核函数名称转换的问题。
作者: masterchou    时间: 2003-4-7 10:11
to spline
  
我也是用的这种方法,但是出现的错误:
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype
Debug/ugsample1.dll : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
好像是少了什么库文件,但是我又找不到这几个文件。
作者: spline    时间: 2003-4-7 13:17
我想你用的是Shared MFC DLL,那你就应该加上如下的库文件。
Project-setting-"link" page object/library modules
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libufun.lib libugopenint.lib libopenpp.lib libvmathpp.lib
作者: masterchou    时间: 2003-4-7 15:21
我两种方法都试过了,加上去也是出现这样的错误。
作者: spline    时间: 2003-4-7 21:09
这个问题我也遇到过,我记得是加了那几个库文件就好了。
要不你把代码发过来,我帮你看看,尽量短一点,有代表性就行了。
email: cqu@btamail.net.cn
作者: masterchou    时间: 2003-4-8 10:42
to spline
发过来了。
作者: masterchou    时间: 2003-4-8 16:34
to spline
  
不好意思,好像发不到你的邮箱上去。
  
就上传到这儿吧。
作者: masterchou    时间: 2003-4-8 16:38
ug 调用 dlg
作者: spline    时间: 2003-4-9 09:00
我已经修改了,在修改的地方我已经作了标记。大概只该了三个地方。
你的那个AFX_MANAGE_STATE(AfxGetStaticModuleState())放得实在不是地方。如果你用MFC做的UG DLL就没问题了。
作者: spline    时间: 2003-4-9 09:09
我已经修改了,在修改的地方我已经作了标记。大概只该了三个地方。
你的那个AFX_MANAGE_STATE(AfxGetStaticModuleState())放得实在不是地方。如果你用MFC做的UG DLL就没问题了。在Win32 DLL中很多的MFC函数是不能用的。
作者: masterchou    时间: 2003-4-9 10:21
to spline
请问为什么将typedef void (*PROC1)(HWND*)中的CWnd*改成HWND*?
  
还有程序运行时出现这样的错误:
作者: masterchou    时间: 2003-4-9 10:22
to spline
谢谢!
  
请问为什么将typedef void (*PROC1)(HWND*)中的CWnd*改成HWND*?
  
还有程序运行时出现这样的错误:
不知道是什么原因。::?
作者: spline    时间: 2003-4-9 12:25
等我在看一下,我这里没有出现这个问题的。你自己先“调试”一下,看看在哪一步出的错?那个dlg.dll也要重新编译的,输出的路径我也修改了,编译之后你要把它放到PATH制定的路径中。我想是不是没有调用正确的动态库?
  
你的UG.dll是Win32类型的, 而dlg.dll是MFC的。有些函数和数据类型是不能通用的。在MFC中可以调用Win32 API,反之则不一定行。具体的我也讲不清楚。CWnd*是MFC的,HWND*是Win32的数据类型,所以要修改一下。
在UG中用通常用UF_UI_get_default_parent来得到父窗体的句柄。
作者: zhengzhenxing    时间: 2003-4-24 09:24
可以转化使用,在MFC DLL向导中将输出函数定义为UGII所认同的ufsta函数,然后在函数中可以添加各种MFC类和对话框资源。
作者: spline    时间: 2003-4-24 09:35
to zhangzhenxing
你也试过了吗?我在前面提到过这个方法的。我当时遇到了一个问题就是做MFC DLL,不过我要使用UG open++,我发现这样的程序只能用release 不能用 debug 我知道可能是一些调试信息的原因(在以前的帖子中可能有论述的)。我不知道如何解决这个问题。
请指教。谢谢!!!
作者: Fields2003    时间: 2003-4-24 21:54
想看帖子  uistyler的一个小秘密
但为何找不到
请高手指点
thanks
作者: spline    时间: 2003-4-25 08:05
你搜索一下不就可以了。
作者: Fields2003    时间: 2003-4-26 20:58
谢谢!
开始是用"uistyler的一个小秘密"直接搜索,没有找到
后面尝试用"UI ",找到了
原来ui和styler之间有一个空格
作者: tsingtsang    时间: 2003-5-4 14:53
多问一下
  
你是打算怎么个调用法?
  
是要把DLG嵌入UG,还是只是某个对话框?
作者: spline    时间: 2003-5-6 12:17
不是把DLG嵌入UG,而是调用res中的对话框?
作者: netroamer    时间: 2003-5-7 15:29
masterchou,我也碰到过和你一样的问题,但是忽略掉错误还是可以运行,如果用release编译就不会报错了
作者: spline    时间: 2003-5-8 08:09
估计你那个是ASSERT引起的错误。release中是没有ASSERT的。
我以前也遇到过类似的问题,也没有找到解决的办法。
作者: tsingtsang    时间: 2003-6-7 13:04
你说的是这个意思?
作者: luo104    时间: 2003-6-10 14:44
欧看到过二次开发的现成的软件,天瑜公司的,确实有树型对话框。
用的是dll
作者: spline    时间: 2003-6-14 13:29
本来就有树形控件的,不过你要修改一些设置,就可以把它弄出来。不过不知道如何使用。它的语法完全不同了。看来只是供内部人士使用了。
作者: tsingtsang    时间: 2003-7-5 14:38
贴点图片上来,可能更好理解
作者: zhengzhenxing    时间: 2003-9-25 15:41
to 二次开发版主  
   我用的方法其实很简单,就是用MFC DLL,不过我能用 debug。这是我的硕士课题内容之一。现在毕业了,没有再作二次开发了。我的oicq是12439759,如果感兴趣和我交流。我经常在网上。
作者: bbrian    时间: 2003-10-9 15:10
这个问题解决了吗?给大家看看
作者: yangdan    时间: 2003-12-16 14:27
《UG/OPEN API程序设计》这本书是从哪里购得的?哪里出版的?
我只有清华董正卫的《UG/OPEN API编程基础》
知道《UG/OPEN API程序设计》的请告知到何处可有这本书.
  
谢谢
  
younghualin@163.com
作者: linduyu_y    时间: 2005-10-12 20:57
我也在做这方面的课题,我用法如下:
1;在ugii_styler生成的*.c文件里
           ---------
             HINSTANCE hmod;
         hmod = LoadLibrary ("dlg.dll");
         if ( !hmod )
                uc1601("DLL加载失败",1);
---------------------
2;用MFCDLL,但不用
                extern DLL 函数;而直接用对话框的DLL;如下:
      
/////////////////////////////////////////////////////////////////////////////
// CDlgApp initialization


BOOL CDlgApp::InitInstance()
{
        // TODO: Add your specialized code here and/or call the base class
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDlgDlg  dlg;
        dlg.DoModal();
        return CWinApp::InitInstance();
}

以上在XP和VC6SP4中调试成功了。

--------------
以上纯是个人意见,请多指教。
作者: xpl2005    时间: 2006-8-26 20:58
请问在UG二次开发中,能把所选中的边缘线保存下来?用什么函数?
作者: channing5    时间: 2012-8-12 16:45
谢谢!谢谢!谢谢!




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3