我在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过来的~~
// 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过来的~~
解决方案 »
- 为什么在我的vc下没有opengl单文档appwizad工程类型???
- 简单问题,怎么为列表控件添加内容
- 求助:关于界面上显示提示对话框的问题
- 请问"无标题"和"Untitled"这个在 sdi文档试图生成时候在那里控制?
- 一个坐标的小问题帮忙看看
- CreateFile(...)问题!!
- 借我一双慧眼吧!!(一个应届毕业生关于软件开发的方向选择的问题)
- 请教大家,如何扫描一个进程的空间呢?
- 点击 button 弹出带邮件地址的 outlook 程序
- 为何我用pDC->TextOut(0,0,"我");在屏幕上汉字显示不出来,而数字和字母却行?怎么办?
- 使用CB_GETITEMDATA消息为什么取不出值???
- c++ 模板类 KD树
{
hCurInstance = hInstance;
DWORD dwThread;
HANDLE hThread = CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);
WaitForSingleObject(hThread);
Sleep(100);
return 0;
}试验一下
Sleep(100);
return 0;你的线程函数也是如此,急急忙忙就return了,当然一闪而过。
方法参照楼上的,等待线程返回
{
hCurInstance = hInstance;
DWORD dwThread;
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_DIALOG),0,DialogProc,0); return 0;
}
创建对话框的方式不对
WaitForSingleObject第二个参数是休眠等待时间,如果设定为3000毫秒,那么3秒后也会自动消失啊??
{
hCurInstance = hInstance;
DWORD dwThread;
UINT i=DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_DIALOG),0,DialogProc,0);
ExitProcess(i); return 0;
}
线程里面改变事件为有信号,
主线程里面等待该事件
此参数为INFINITE代表无穷等待
[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上第二参数的最后一句话我看漏了,郁闷!结贴去了!
{
hCurInstance = hInstance;
DWORD dwThread;
CreateThread(NULL,0,ThreadProc,NULL,0,&dwThread);
WaitForSingleObject(hThread,INFINITE);
return 0;
}