iCAx开思网

标题: 请教一下,用VC做的对话框可以调用UIstyler做的对话框吗? [打印本页]

作者: haiying    时间: 2004-10-25 21:33
标题: 请教一下,用VC做的对话框可以调用UIstyler做的对话框吗?
我用MFC作出的对话框,可不可以和UISYLER做出的对话框相互调用?有没有那位高手试过?请教一下!
作者: mbdwt    时间: 2004-10-26 13:58
当然可以了!可有必要吗?
作者: mizzle    时间: 2004-10-26 14:26
当然有了,例如客户需要的是树形的对话框,uistyler里有吗
作者: haiying    时间: 2004-10-26 22:03
因为我要调用另外一个人用UIstyler做的东西,请教一下mbdwt和mizzle两位该如何调用呢?能否给个例子。
作者: 深夜摔键盘    时间: 2004-10-27 00:00
以前试过,可以的。
  
1.对话框的主程程序文件中要include 对话框模板中的头文件
2.把对话框模板的c文件中的内容拷到MFC对话框的主程序文件中,模板文件中的UG程序入口函数就不要拷了。
3。在MFC对话框的控件中调用UF_STYLER_create_dialog函数,就可以调出UISTYLER对话框。
  
要注意一些UG的头文件,按需要,MFC对话框主程序文件中也要include。
作者: haiying    时间: 2004-10-27 11:13
按键盘兄的提示,我试了一下,可是一直编译不过,
#define ymh_CB_COUNT ( 7 + 1 ) /* Add 1 for the terminator */
   
/*--------------------------------------------------------------------------
The following structure defines the callback entries used by the        
styler file.  This structure MUST be passed into the user function,     
UF_STYLER_create_dialog along with ymh_CB_COUNT.                        
--------------------------------------------------------------------------*/
static UF_STYLER_callback_info_t  ymh_cbs[ ymh_CB_COUNT] =  
{
  {UF_STYLER_DIALOG_INDEX, UF_STYLER_OK_CB           , 1, ymh_ok_cb},
  {UF_STYLER_DIALOG_INDEX, UF_STYLER_APPLY_CB        , 0,  
ymh_apply_cb},
  {UF_STYLER_DIALOG_INDEX, UF_STYLER_CANCEL_CB       , 0, ymh_cancle_cb},
  {ymh_RADIO_0       , UF_STYLER_VALUE_CHANGED_CB, 0, ymh_danwei_cb},
  {ymh_LIST_2        , UF_STYLER_ACTIVATE_CB     , 1, ymh_tuzhguige_cb},
  {ymh_ACTION_7      , UF_STYLER_ACTIVATE_CB     , 1, ymh_action_7_act_cb},
  {ymh_ACTION_8      , UF_STYLER_ACTIVATE_CB     , 1, ymh_action_8_act_cb},
  {UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 }
};
  
static UF_MB_styler_actions_t actions[] = {
    { "tuzhi.dlg",  NULL,   ymh_cbs,  UF_MB_STYLER_IS_NOT_TOP },
    { NULL,  NULL,  NULL,  0 } /* This is a NULL terminated list */
};
void DisplayDialog()
  
{
  
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
  
       CLibDialog dlg;
  
       dlg.DoModal();
  
}
  
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
  
{
  
    int errorCode=UF_initialize();
  
    
  DisplayDialog ();
  
    if ( 0 == errorCode )
  
    {
  
        errorCode = UF_terminate();
  
    }
if ( (error_code = UF_MB_add_styler_actions ( actions ) ) != 0 )
    {
          char fail_message[133];
          
          UF_get_fail_message(error_code, fail_message);
          printf ( "%s\n", fail_message );  
    }
               
  
}
  
extern "C" void ufusr_cleanup(void)
  
{
  
}
  
extern "C"  int ufusr_ask_unload( void )
  
{
  
    return( UF_UNLOAD_UG_TERMINATE );
  
}
  
这段程序是添加在主程序里,可是编译后出现以下错误:
ompiling...
yagai.cpp
D:\ugkaifa\program\yagaicanshu\yagaitest\yagai.cpp(81) : error C2146: syntax error : missing ';' before identifier 'ymh_cbs'
D:\ugkaifa\program\yagaicanshu\yagaitest\yagai.cpp(81) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
  
tuzhi.dll - 2 error(s), 0 warning(s)
我一直找不错错误,肯请键盘兄再指教一下,能不能给个例子,很急,谢谢!
ymhai@126.com
作者: 深夜摔键盘    时间: 2004-10-27 11:18
因为你的程序中没有include <uf_mb.h>。
可以删掉这个:
static UF_MB_styler_actions_t actions[] = {  
     { "tuzhi.dlg", NULL, ymh_cbs, UF_MB_STYLER_IS_NOT_TOP },  
     { NULL, NULL, NULL, 0 } /* This is a NULL terminated list */  
};  
这是菜单调用对话框的信息结构,
而且,你是要从MFC对话框中调用,这个结构体没用处了。
  
另外,如果你是想用菜单调用MFC对对话框,那模板文件中的UG程序入口函数就不要拷到对话框的主程文件中了。在工程的主程序文件中手工添加ufusr入口,在这个入口中,new 一个MFC对话框对象,然后要么domodal,要么就非模态的
  
附件里是一个测试程序,仅供参考。
作者: haiying    时间: 2004-10-28 09:17
程序通过了,非常感谢键盘兄!再问一下,如果我在UISTYLER的对话框中调用mfc的对话框是否也可以?
作者: 深夜摔键盘    时间: 2004-10-28 12:43
那个程序是以前写的,
在ufusr里,漏了一句:AFX_MANAGE_STATE(AfxGetStaticModuleState());
作者: haiying    时间: 2004-11-4 15:43
我将Mfc的对话框改为非模态的后调不出UISTYLER 的对话框。而模态是可以的,是什么原因呢?再请教一下键盘兄及各位高手。
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
  
{  
     int errorCode=UF_initialize();
     AFX_MANAGE_STATE(AfxGetStaticModuleState());  
    // CxinbangDilog *dlg=new CxinbangDilog ;
   //dlg->DoModal();
   CxinbangDilog*PNMDlg;
   PNMDlg=new CxinbangDilog ;
   PNMDlg->Create(IDD_DIALOG1);
   PNMDlg->ShowWindow(SW_SHOW);                     
       if ( 0 == errorCode )
     {
         errorCode = UF_terminate();
     }
   }
  
void CxinbangDilog::OnDestroy()  
{
   CDialog::OnDestroy();
   delete this;   
}
  
void CxinbangDilog::OnButtonGobank2()  
{
   m_pRecordset->Close();
   DestroyWindow();
   
}
   
new 和delete没错吧?
作者: haiying    时间: 2004-11-5 14:43
高手们帮帮忙啊!




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