簡體   English   中英

MFC中的OnInitDialog函數之后有沒有調用的函數?

[英]Is there any function called after the OnInitDialog function in MFC?

我想在MFC中創建一個對話框后創建一個線程。 Windows 是否提供了任何函數並在OnInitDialog之后自動調用,以便我可以在其中創建我的線程?

您可以在OnInitDialog函數中創建線程。 沒有理由通過去尋找不同的函數或者將初始化代碼分成兩部分來使事情過於復雜。 (也沒有任何此類功能,因為沒有相應的Windows消息被發送。)

如果要創建線程之前在屏幕上顯示對話框,可以使用ShowWindow函數手動顯示它。 例如:

ShowWindow(SW_SHOW);
RedrawWindow();

另請參閱Raymond Chen的這篇文章: 在做某事之前等待對話框顯示

OnInitDialog()是初始化時調用的主函數(對WM_CREATE反應)。

為什么你不能在那里創建你的線程?

我已將線程優先級更改為低於正常值,並且當線程第一次執行時,我將線程設置為普通priory。 這很好用。 感謝您的答復。

r多年來對在 MFC 對話框應用程序(最喜歡的操場)中繪制第一個視圖圖形的 OnTimer 解決方案感到不滿意后,這似乎是一個不錯的簡單解決方案:-

  1. 使用類向導添加 WM_HSCROLL 處理程序。
  2. 在 OnInitDialog 的末尾發布一條帶有 NULL LPARAM 的 hscroll 消息
  3. 在處理程序中檢測到NULL,繪制圖形。

計時器意味着該應用程序在圖形發生之前還存在一段時間,並且顯然 hscroll 優先發生在 WM_PAINT 消息之后,該消息會將圖片元素擦除為空白狀態,刪除在 initdialog 期間繪制的任何內容。

BOOL CSpecDlg::OnInitDialog()
{
    ...

    PostMessage(WM_HSCROLL,0, (LPARAM)NULL);
    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSpecDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
    if (pScrollBar==NULL)
    {
        plot();
    }
    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM