MFC窗口之间传递数据(结构体)

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);
}

 

你可能感兴趣的:(windows,c/c++)