MFC窗口之间的通讯一般会利用发送消息的方式传递,那么具体如何实现呢,代码如下:
下面实现的是一个子窗口把消息发送到主窗口的示例:
1.消息发送窗口部分代码:
首先添加自定义消息;
#define WM_MSG_BANCAI WM_USER+19 // 创建板材
首先定义一个结构体:
typedef struct TSubCutDataUI
{
int Index;
int ItemType;//加工类型
int CutType;//加工子类型
double Depth;//深度
double Lenth;
double PosX;
double PosY;
double xWith;//通用宽度
double yWith;//距形高度
int Bias;//偏置
double Diameter;//直径
double Spacing;//阵列间距
int Cnt;//个数
int Arrangement;//排列方向
int Xmap;//X镜像
int Ymap;
int Direction;//顺逆方向
int IsIgnore;//是否加工
HiWCADDataConst::HiWFaceType FaceType;
} TSubCutDataUI;
void CDuiLib_Dialog::Notify(TNotifyUI& msg)
{
TSubCutDataUI CutData; //结构体变量
if( msg.sType == _T("click") )
{
if(msg.pSender->GetName() ==XML_OPTIONCHECKPLATE)//板材
{
CutData.Depth=500;//深度
CutData.xWith=300;//长
CutData.yWith=300;//宽
SendMessageToMain(WM_MSG_BANCAI, (WPARAM)&CutData, NULL);
}
}
}
2.消息接收窗口代码:
//首先在接收差窗口消息队列映射里面添加:
ON_MESSAGE(WM_MSG_BANCAI,CreatBancai);
//然后在消息处理函数CreatBancai中接收数据并处理:
//在发送和接收消息的文件中都会用到同一个结构体,我这里是将结构体保存在一个头文件里面,
//然后在发送消息端与接收消息
//端都将头文件包含,然后分别创建了两个结构体变量,以备使用。
LRESULT CcamDlg::CreatBancai(WPARAM wp,LPARAM lp) //m_PMFCOCCCtl是另一个类的对象
{
CutData=(TSubCutDataUI*)wp; //接收数据
m_PMFCOCCCtl->OnCreatBancai(CutData->xWith,CutData->yWith,CutData->Depth); // 使用数据
return 0;
}
void CMFCOCCView::OnCreatBancai(double x,double y,double z) //创建板材
{
BRepPrimAPI_MakeBox box=BRepPrimAPI_MakeBox(x,y,z);
TopoDS_Shape S = box.Shape(); //创建图形线性框
Handle(AIS_Shape) ais1 = new AIS_Shape(S);
myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
myAISContext->Display(ais1);
}