程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 在對話框顯示出來後立即執行一段代碼

在對話框顯示出來後立即執行一段代碼

編輯:關於C

 

最近在做一個項目,在創建一個子對話框的時候,由於在OnInitDialog()初始化所要執行的代碼量比較大,導致初始化很慢,要2秒左右對話框才能顯示出來...所以想把部分代碼在對話框顯示出來之後再執行,在網上找了很多資料,總結了下面兩種辦法,一種是在OnInitDilalog()中設定一個定時器,還有一種是再OnInitDialog()中PostMessage()在添加一個自定義的消息在消息隊列中等待對話框初始化之後從消息隊列中讀取消息執行代碼。、、、、

1.在OnInitDialog返回之前創建一個只報時一次的定時器,在OnTimer裡執行代碼

BOOLMyAppDlg::OnInitDialog()

{

    …………………………

    // TODO: Add extra initialization here

 

    SetTimer(m_nTimerID, 100, NULL);

    returnTRUE;  // return TRUE  unless you set the focus to a control

}

 

voidMyAppDlg::OnTimer(UINT_PTRnIDEvent)

{

    if(nIDEvent == m_nTimerID)

    {

        // 只執行一次,所以一報時就Kill掉了

        KillTimer(m_nTimerID);

        m_nTimerID = 0;

        AfxMessageBox(_T("Hello MFC"));

        return;

    }

    CDialog::OnTimer(nIDEvent);

}

 2.在OnInitDialog返回之前post一個自定義的消息,在消息的相應函數裡執行代碼

#define  WM_MY_PRIVATE WM_USER + 1551

 

BOOLMyAppDlg::OnInitDialog()

{

    …………………………

    // TODO: Add extra initialization here

 

    PostMessage(WM_MY_PRIVATE);

    returnTRUE;  // return TRUE  unless you set the focus to a control

}

 

// 當然,消息映射表裡得加上一項

// ON_MESSAGE(WM_MY_PRIVATE, &CdummyDlg::OnPrivateMessage)

LRESULTMyAppDlg::OnPrivateMessage(WPARAM,LPARAM)

{

    AfxMessageBox(_T("Hello MFC"));

    return0;

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved