?什么意思啊?
基于对话框的应用本来就有消息循环啊,
任何windows的程序都有消息循环吧

解决方案 »

  1.   

    DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
    About为处理消息偱环的函数:
    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_INITDIALOG:
            return TRUE;    case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
        }
        return FALSE;
    }
      

  2.   

    你是不是說不用DoModal呀, 你用DoModal就一定無Message Loop(在你的程序中沒有, 但實際上有), 但如果Message Loop由你實現的話, 就要用dlg.Create(...)來建立對話框, 用dlg.ShowWindow(...), dlg.UpdateWindow()來顯示對話框, 最後加入
    MSG msg;
    while (GetMessage(....))
    {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
    }
      

  3.   

    http://www.csdn.net/expert/TopicView.asp?id=436746
      

  4.   

    在WINPROC函数中自已使用一个消息循环进行处理。
      

  5.   

    是这样的,用应用向导建立的对话框应用程序。
    我想让它在无消息时做些事情,重载了应用类的Run(),在这里面建立了一个消息循环。
    并且修改对话框创建代码,把DoModal改成 Create 后返回一个true;
    BOOL CCDXTestApp::InitInstance()
    {
    ....... CCDXTestDlg dlg;
    m_pMainWnd = &dlg;
    dlg.Create(CCDXTestDlg::IDD,NULL);
    dlg.ShowWindow(m_nCmdShow);
    dlg.UpdateWindow();
    return true;}
    int CCDXTestApp::Run() 
    {
    // TODO: Add your specialized code here and/or call the base class
    CCDXTestDlg* pDlg=(CCDXTestDlg*)AfxGetMainWnd();
    for(;;)
    {
    if(::PeekMessage(&m_msgCur,NULL,NULL,NULL,PM_NOREMOVE))
    {
    if(!PumpMessage())
    return ExitInstance();
    }
    else
    pDlg->UpDisp();
    }
    ASSERT(false);
    return CWinApp::Run();
    }
      

  6.   

    奇怪的是对话框闪了一下就没了,这个消息循环只收到一个WM_QUIT消息。
      

  7.   

    呵呵,这个问题我来告诉你如何解决,
    我以前也碰到过的,这个和消息循环没有任何关系,因为你创建的是一个非模态对话框,你必须创建一个全局变量或用new去创建一个指向对话框的指针,你用局部变量当然不行,退出局部函数的作用域,他就会释放,所以一闪就没有了,呵呵,试试,别忘了给分。CCDXTestDlg dlg;BOOL CCDXTestApp::InitInstance()
    {
    .......
    m_pMainWnd = &dlg;
    dlg.Create(CCDXTestDlg::IDD,NULL);
    dlg.ShowWindow(m_nCmdShow);
    dlg.UpdateWindow();
    return true;}