VC中實現視窗之間的函數回調

來源:互聯網
上載者:User

1、建立一個基於對話方塊的工程,預設添加一個對話方塊資源A,再添加一個對話方塊資源B

在A中調用B顯示

在B中添加回呼函數指標(B 資源對應的類CDlgCall)

在DlgCall.h中添加

typedef int (*MyCallFunc)(CWnd *, int, int);//定義回調指標

在類中聲明

public:    void setCallFunction(int x,int (*Add)(CWnd *, int , int ));    int a,b;    MyCallFunc m_Func;//定義回調指標的變數

在DlgCall.cpp初始化a,b

BOOL CDlgCall::OnInitDialog(){CDialog::OnInitDialog();// TODO:  在此添加額外的初始化a=3;b=4;return TRUE;  // return TRUE unless you set the focus to a control// 異常: OCX 屬性頁面應返回 FALSE}
// CDlgCall 訊息處理常式void CDlgCall::OnBnClickedBtnCall(){//CWnd是MFC中的視窗類別,此處將this賦值到函數中,//也就是將這個類的指標通過這個回呼函數傳到了調用這個視窗類別的方法中m_Func(this,a,b);}//傳遞函數void CDlgCall::setCallFunction(int x,int (*Add)(CWnd *, int, int)){m_Func=Add;//賦值到該類中的一個函數指標}

2、在A中調用

//這個函數在寫調用它的函數的前面,這樣不用再聲明int Add(CWnd *pWnd,int a,int b){        //這些參數都是從B中傳遞過來的        (((CDlgCall*)pWnd)->GetDlgItem(IDC_EDIT_A))->SetWindowText("Welcome");(((CDlgCall*)pWnd)->GetDlgItem(IDC_EDIT_B))->SetWindowText("Dll");return 0;}//A中的一個按鈕的事件clickvoid CCallBackTestDlg::OnBnClickedBtnDlg(){CDlgCall *dlg=new CDlgCall;if (!dlg->m_hWnd){dlg->Create(IDD_DIALOG1);dlg->a=5;dlg->b=4;dlg->setCallFunction(2,Add);dlg->ShowWindow(SW_SHOW);}}

邏輯,在A中實現業務函數,在B中調用函數,將A中的函數地址通過函數指標傳遞過去

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.