1. 程式人生 > >MFC視窗之間傳遞資料(結構體)

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