iCAx开思工具箱
标题:
用win32API 对UG二次开发
[打印本页]
作者:
qyzxl
时间:
2005-4-18 16:57
标题:
用win32API 对UG二次开发
请问高手:
如何用Win32API对UG二次开发如何显示Win32资源对话框?
我想用MFC可以实现,那么用Win32API肯定也可以实现,现在正把以前做的二次开发软件移植到UG平台上,但由于是用Win32API做的,不知如何与UG建立接口,请高手指导。不胜感激!!!
作者:
深夜摔键盘
时间:
2005-4-18 17:44
在ufusr/ufsta中使用win32 API,create一个对话框,指定它的窗口回调函数以处理相应消息应该就可以。
作者:
qyzxl
时间:
2005-4-19 10:56
我想在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能够实现),不知为何?
作者:
深夜摔键盘
时间:
2005-4-19 16:25
hInstance与为DLL的instance,不是UG的
作者:
qyzxl
时间:
2005-4-19 17:46
To深夜摔键盘:
DialogBox()函数中的hInstance需要DLL的instance,还是是UG的?
作者:
深夜摔键盘
时间:
2005-4-19 20:09
是你的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);
}
作者:
qyzxl
时间:
2005-4-20 16:48
To深夜摔键盘:
我按照你的方法试了,运行时没有反映,也没有出错信息。你试过吗?
请问:
用GetModuleHandle("capp.dll")在DLL的内部能够获得DLL自己的句柄吗?
不管怎样,都要谢谢你!
作者:
深夜摔键盘
时间:
2005-4-20 17:22
我试过了。能行的,你检查一下你的代码吧。
GetModuleHandle函数我也试过,不行。后来才想到应该在dllMain中直接可以获取的。
你要是装了.net,可以把程序发给你。vc6打不开。
作者:
深夜摔键盘
时间:
2005-4-20 17:25
单步跟踪一下,看看 hinstance是否有效,估计你还是没获取到它。
作者:
qyzxl
时间:
2005-4-21 10:59
To深夜摔键盘:
那真是太谢谢了。
我的邮箱:qyzxl@126.com
作者:
qyzxl
时间:
2005-4-21 11:09
To深夜摔键盘:
我按照你上面的程序运行过了!万分感谢!
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3