找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 16751|回复: 10
打印 上一主题 下一主题

用win32API 对UG二次开发

[复制链接]
跳转到指定楼层
1
发表于 2005-4-18 16:57:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
请问高手:
  
   如何用Win32API对UG二次开发如何显示Win32资源对话框?
  
     我想用MFC可以实现,那么用Win32API肯定也可以实现,现在正把以前做的二次开发软件移植到UG平台上,但由于是用Win32API做的,不知如何与UG建立接口,请高手指导。不胜感激!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-4-18 17:44:49 | 只看该作者
在ufusr/ufsta中使用win32 API,create一个对话框,指定它的窗口回调函数以处理相应消息应该就可以。
3
发表于 2005-4-19 10:56:42 | 只看该作者
   我想在UG中弹出一个模态对话框,因此是不是应该用DialogBox()函数?我在UG菜单的响应函数中写的代码如下:
  
HWND hWnd=(HWND)UF_UI_get_default_parent( );
HINSTANCE hInstance=(HINSTANCE)GetWindowLong
                                                                  (hWnd,GWL_HINSTANCE);
DialogBox(hInstance, (LPSTR)"IDD_LOGONDIALOG",hWnd,
                                                                  (DLGPROC) LogonDlgProc);
  
   但是在UG中运行出错,显示“命令没有注册”(当然,注册命令代码没有问题,用MFC能够实现),不知为何?
4
发表于 2005-4-19 16:25:41 | 只看该作者
hInstance与为DLL的instance,不是UG的
5
发表于 2005-4-19 17:46:37 | 只看该作者
   To深夜摔键盘:
  
     DialogBox()函数中的hInstance需要DLL的instance,还是是UG的?
6
发表于 2005-4-19 20:09:14 | 只看该作者
是你的DLL创建了一个窗口,不是UG。所以instance就是你的DLL,而且它可以在case DLL_PROCESS_ATTACH中获取到,其它可能还有方法
  
#include <windows.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_exit.h>
#include "resource.h"
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam);
/////
HINSTANCE hInstance  = NULL;
  
//////////////////////////////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HANDLE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{
   switch(ul_reason_for_call)
   {
   case DLL_PROCESS_ATTACH:
     hInstance = (HINSTANCE)hModule;
   case DLL_PROCESS_DETACH:
     break;
   }
   return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
   HWND hWnd=NULL;
     /* Initialize the API environment */
     UF_initialize();
   hWnd=(HWND)UF_UI_get_default_parent();
   UF_DISP_make_display_up_to_date();
     DialogBox(hInstance,(LPCTSTR)IDD_DIALOG1, hWnd, (DLGPROC)AboutDlgProc);
     UF_terminate();
}
////////////////////////////////////////////////////////////
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
{      
   switch (message)     
   {
  
   case   WM_INITDIALOG :
       return TRUE ;      
   case   WM_COMMAND :
     switch (LOWORD (wParam))        
     {      
       case IDOK :         
       case IDCANCEL :        
          EndDialog(hDlg, 0) ;
          return TRUE ;
     }        
     break ;        
   }        
   return FALSE ;
}
//////////////////////////////////////////////////////
extern int ufusr_ask_unload( void )
{
     return( UF_UNLOAD_IMMEDIATELY);
}
7
发表于 2005-4-20 16:48:44 | 只看该作者
To深夜摔键盘:
  
     我按照你的方法试了,运行时没有反映,也没有出错信息。你试过吗?
  
     请问:
    用GetModuleHandle("capp.dll")在DLL的内部能够获得DLL自己的句柄吗?
      不管怎样,都要谢谢你!
8
发表于 2005-4-20 17:22:13 | 只看该作者
我试过了。能行的,你检查一下你的代码吧。
  
GetModuleHandle函数我也试过,不行。后来才想到应该在dllMain中直接可以获取的。
你要是装了.net,可以把程序发给你。vc6打不开。
9
发表于 2005-4-20 17:25:29 | 只看该作者
单步跟踪一下,看看 hinstance是否有效,估计你还是没获取到它。
10
发表于 2005-4-21 10:59:47 | 只看该作者
To深夜摔键盘:
  
    那真是太谢谢了。
   我的邮箱:qyzxl@126.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-25 14:12 , Processed in 0.026078 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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