我在SDK代码插入一个对话框资源,WinMain函数用线程创建对话框时,怎么窗口一闪就没了~~下面是SDK.cpp所有的代码://////////////////////////////////////////////////////////////////////////
// SDK.cpp
// SDK线程创建对话框实例#include <windows.h>
#include "Resource.h"//////////////////////////////////////////////////////////////////////////
// 线程函数、对话框回调函数
DWORD WINAPI  ThreadProc(LPVOID lpParameter);
LRESULT CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);// 全局变量:实例句柄、窗口句柄
HINSTANCE hCurInstance = NULL;
HWND hWnd = NULL;/************************************************************************/
/*  函数说明:WinMain函数
/************************************************************************/ 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
hCurInstance = hInstance;
DWORD   dwThread;   
CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);       Sleep(100); 
return 0;
}/************************************************************************/
/*  函数说明:线程函数、用来创建对话框
/*  参    数:LPVOID
/*  返 回 值:msg.wParam
/************************************************************************/
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
if(DialogBox(NULL,MAKEINTRESOURCE(IDD_DIALOG_DIALOG),NULL,(DLGPROC)DialogProc) == IDOK)
return 0;
}/************************************************************************/
/*  函数说明:窗口回调函数
/*  参    数:消息处理
/*  返 回 值:msg.wParam
/************************************************************************/
LRESULT CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) 

switch(uMsg) 

case WM_INITDIALOG: 
return TRUE; 
case WM_COMMAND: 

switch(LOWORD(wParam)) 

case IDCANCEL: 
PostQuitMessage(0); 
break; 
case IDOK: 
break; 
default: 
break; 

break; 

case WM_DESTROY: 
PostQuitMessage(0); 
break; 

return FALSE; 
} 资源文件源码就不用贴了吧,我是将MFC对话框资源文件COPY过来的~~

解决方案 »

  1.   

    主线程已经退出,其所有资源都将被系统回收,也包括你要弹出得那个对话框int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
        hCurInstance = hInstance;
        DWORD   dwThread;   
       HANDLE hThread = CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);   
        WaitForSingleObject(hThread);
        Sleep(100); 
        return 0;
    }试验一下
      

  2.   

    你的WinMain函数在创建线程后100毫秒就退出了!进程都退出了,线程还能活么?    CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);   
        Sleep(100); 
        return 0;你的线程函数也是如此,急急忙忙就return了,当然一闪而过。
      

  3.   

    WinMain执行return 0后,会调用ExitProcess结束进程,所以线程也就没有了,
    方法参照楼上的,等待线程返回
      

  4.   

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
        hCurInstance = hInstance;
        DWORD   dwThread;   
         DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_DIALOG),0,DialogProc,0);    return 0;
    }
    创建对话框的方式不对
      

  5.   


    WaitForSingleObject第二个参数是休眠等待时间,如果设定为3000毫秒,那么3秒后也会自动消失啊??
      

  6.   

    落了一句对int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
        hCurInstance = hInstance;
        DWORD   dwThread;   
         UINT i=DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_DIALOG),0,DialogProc,0);
        ExitProcess(i);    return 0;
    }
      

  7.   

    CreateEvent创建一个事件,
    线程里面改变事件为有信号,
    主线程里面等待该事件
      

  8.   

    其实楼主已经知道WaitForSingleObject了,也就是第二个参数,此参数为0代表立刻返回,不等待
    此参数为INFINITE代表无穷等待
      

  9.   

    dwMilliseconds 
    [in] Time-out interval, in milliseconds. The function returns if the interval elapses, even if the object's state is nonsignaled. If dwMilliseconds is zero, the function tests the object's state and returns immediately. If dwMilliseconds is INFINITE, the function's time-out interval never elapses. 
    谢谢老大们啊!原来我把MSDN上第二参数的最后一句话我看漏了,郁闷!结贴去了!
      

  10.   

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
        hCurInstance = hInstance;
        DWORD   dwThread;   
        CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);   
        WaitForSingleObject(hThread,INFINITE);
        return 0;
    }