MFC界面做ug二次开发入门教程

我发现好多公司都是在用 mfc界面

在mfc中可以直接使用 ufun的函数 所以他比 vb 和 e 语言更好用 
mfc做ug二次开发界面,自定义性能强 和 ug可以连接 不会别360等软件和谐掉。这点非常好。

我出过不少入门教程 有vb 、 老ui 和新的block ui做界面的方法
下面可能是我最后一个关于UG二次开发界面的教程了


我看到书上的第一个mfc列子会加很多很多代码其实对于新手我觉得
我们可以分2步走,
因为ufun一般入门后的新手是会用一二的
而mfc我们只要告诉新手 ug二次开发如何 开启一个空界面

变量在哪里加、事件在哪里修改,其它的自己体会:

第一个mfc程序列子如下:

一、新建一个空的mfc程序
  启动vc-》文件-》新建-》MFC AppWizard(DLL)-》输入工程名 MFC_MEI,工程路径“D:\”
  -》确定-》选择第一项:动态链接库和MFC静态链接-》完成-》确定

二、设置工程环境

  2.1设置 调试 路径和库文件路径(指向UGOPEN目录)
  工程 --> 设置 -->调试-->工作目录: D:\Program Files (x86)\NX4.0\UGOPEN

  2.2工程 --> 设置 --> C/C++ --> 预处理器--> 附加包含路径:
  D:\Program Files (x86)\NX4.0\UGOPEN

  2.3工程 --> 设置 --> C/C++ --> 分类: Code Generation;Use run-time library:
  Mutlilthreaded;-->确定

  2.4将两文件:
  UG安装目录\UGOPEN\libufun.lib 
  UG安装目录\UGOPEN\libugopenint.lib
  复制到 C++安装目录\VC98\Lib
  工程 --> 设置 --> 链接 --> 对象/库模块 增加UG的二个库文件:
  libufun.lib libugopenint.lib-->确定



三、新建用户文件
  工程-》增加到工程-》文件-》新建C/C++ Header File文件OnBegin.h 和
                             新建C++ Source File文件OnBegin.cpp到工程
  并将这两个文件作为用户工程主文件。
选择【FileNew】选项卡,查看当前工程的逻辑视图结构。


四、在OnBegin.h 和 在OnBegin.cpp文件中添加代码

OnBegin.h 文件中添加以下代码
//函数声明
extern void PrintErrorMessage( int errorCode );


在OnBegin.cpp 文件中文件中添加以下代码
#include "StdAfx.h"
#include "Resource.h"
#include "OnBegin.h"
#include <uf.h>
#include <uf_ui.h>

//UF程序入口User Exit
extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
{

//返回的正确的模块状态,得到正确的句柄

AFX_MANAGE_STATE(AfxGetStaticModuleState());

    //UF初始化

int errorCode = UF_initialize();


//UF终止化

UF_terminate();


//输出错误信息

PrintErrorMessage( errorCode );
}


//设置UF程序从内存卸载的方式
extern int ufusr_ask_unload( void )
{
return (UF_UNLOAD_IMMEDIATELY); //设置UF程序运行以后立刻从内存中卸除
//return (UF_UNLOAD_UG_TERMINATE);
}


//输出错误信息
extern void PrintErrorMessage( int errorCode )
{
    if ( 0 != errorCode )
    {
        char message[256];

        UF_get_fail_message( errorCode, message );
        UF_UI_set_status( message );
    }
}

五、设计MFC对话框。
插入-》资源-》Dialog-》确定

查看-》建立类向导->选择Create a new class-》ok-》
在Name输入MFC_MEIDlg,在File Name输入MFC_MEIDlg.cpp-》ok

为对话框添加对话框控件事件
查看-》建立类向导->弹出MFC ClassWizard对话框 选择Message Maps
在Object IDs:选择 IDOK 在Message:选择BN_CLICKED 单机 Add Function按钮,
弹出 Add Member Function对话框;接受默认的消息函数名 OnOK 单机ok按钮结束


六、在用户工程主文件OnBegin.cpp,添加显示对话框命令
选择【FileNew】选项卡,查看当前工程的逻辑视图结构。
在用户工程主文件OnBegin.cpp添加显示对话框命令
添加头文件
#include "MFC_MEIDlg.h"
#include <uf.h>
#include <uf_ui.h>

MFC_MEIDlg *dlg = NULL; //这里的MFC_MEIDlg和 mfc里的Dlg对应


//User Exit
extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
{

//返回的正确的模块状态,得到正确的句柄

AFX_MANAGE_STATE(AfxGetStaticModuleState());

    //UF初始化

int errorCode = UF_initialize();


//显示设计菜单
//
if(strcmp("MENU_ID_1_1_2", parm)==0)

{

dlg = new MFC_MEIDlg; 

dlg->Create(IDD_DIALOG1 ); 

    dlg->ShowWindow( TRUE );

}



//UF终止化

UF_terminate();


//输出错误信息

PrintErrorMessage( errorCode );
}

//设置UF程序从内存卸载的方式
extern int ufusr_ask_unload( void )
{
return (UF_UNLOAD_UG_TERMINATE);  //设置UF程序内存 是在ug关闭后卸载
//return (UF_UNLOAD_SEL_DIALOG);  //设置UF程序内存 是在ug里-》文件-》实用工具-》卸载共享图像 里卸载
//return (UF_UNLOAD_IMMEDIATELY); //设置UF程序运行以后立刻从内存中卸除-貌似使用mfc用这个会有问题
}

extern void ufusr_cleanup (void)
{

//释放申请的内存

if (dlg)

{

delete dlg;

}


    return;
}
//输出错误信息
extern void PrintErrorMessage( int errorCode )
{
    if ( 0 != errorCode )
    {
        char message[256];

        UF_get_fail_message( errorCode, message );
        UF_UI_set_status( message );
    }
}


七、编译连接生成dll在ug里测试程序

==============================================


各个文件说明:
MFC_MEI.h     是应用程序的主头文件。
MFC_MEI.cpp   是包含应用程序类CHoleApp的实现代码的源文件。
MFC_MEI.def   用于声明动态连接库的参数,如DLL的名称和描述等
MFC_MEI.rc    所有程序使用的资源列表
OnBegin.h     用户的首个使用文件,放置了User Exit函数代码。
OnBegin.cpp
StdAfx.h   用来构建一个预编译的头文件*.pch和一个预编译的类型文件StdAfx.obj。
StdAfx.cpp 用户创建的所有CPP文件在最伤端必须包含语句 #include "StdAfx.h"
Resource.h 用于定义新的资源标识符


有关mfc界面设计

==============================
插入-》资源-》Dialog-》确定

在mfc对话框 添加3个静态文本控件 和 3个编辑框控件。

查看-》建立类向导->选择Create a new class-》ok-》
在Name输入MFC_MEIDlg,在File Name输入MFC_MEIDlg.cpp-》ok

为控件添加关键变量
查看-》建立类向导->弹出MFC ClassWizard对话框 选择Message Variables
选择 IDC_EDIT1 点 Add Variable.. 修改变量名 m_IDC_EDIT1 修改类型  double
选择 IDC_EDIT2 点 Add Variable.. 修改变量名 m_IDC_EDIT2 修改类型  double
选择 IDC_EDIT3 点 Add Variable.. 修改变量名 m_IDC_EDIT3 修改类型  double

为对话框添加对话框控件事件
查看-》建立类向导->弹出MFC ClassWizard对话框 选择Message Maps
在Object IDs:选择 IDOK 在Message:选择BN_CLICKED 单机 Add Function按钮,
弹出 Add Member Function对话框;接受默认的消息函数名 OnOK 单机ok按钮结束

===========================================

我们已经知道 为控件添加关键变量 和 如何 为对话框添加对话框控件事件
那么下面就是 MFC控件的使用 

MFC控件的使用 我在这里只介绍 IDC_EDIT控件的取值和获值

--------------------------------------------------
//设置IDC_EDIT控件属性(数字)
SetDlgItemInt(IDC_EDIT1,1);

//获得IDC_EDIT控件属性(数字)
int num1;
num1=GetDlgItemInt(IDC_EDIT1);

//设置IDC_EDIT控件属性(字符串)
char ch1[10]="字符串";
GetDlgItem(IDC_EDIT1)->SetWindowText(ch1);

//获得IDC_EDIT控件属性(字符串)
char ch1[10]="";
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
--------------------------------------------------
假设有3个edit控件,做加法运算。过程如下:
UpdateData();//刷新数据
int num1,num2,num3;
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);
num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);
UpdateData(FALSE);

--------------------------------------------------