MFC視窗之間傳遞資料(結構體)
阿新 • • 發佈:2018-12-09
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); }