我使用CreateDialog(hAppInstance,MAKEINTRESOURCE(IDD_CONTROL_DIALOG),m_hwnd, (DLGPROC)ControlDlgProc);创建一个对话框,其中m_hwnd为父窗口,为什么我关闭父窗口时刚刚创建的对话框没有关掉???我该怎么实现??
解决方案 »
- 散分
- 请问VC++2005中为什么编译后会同时生成*.lib和*.exe文件
- 可以使用内存映射 实现硬盘的对拷吗??
- 在线等,请说明#include "MyClass.h" 和 class MyClass;两种方法来载入类的区别和作用?
- 怎么才能得到组合框(Combo Box)的值?
- 有谁知道:VC技术内幕(中文第五版)在那儿能下载呀。
- 《捉虫历险记——常见C++ Bug大围剿》得下载地址各位有吗?
- 请问给为达人怎样在打开一位图文件的同时获得其句柄??
- 高分请教怎样能够快速地将一个foxpro数据库转换成sql 2000 数据库?
- 怎么做到在一个已经好的程序中加入另一个程序!可加分!
- 高分求VC拨号的类 急!!!!!
- 什么是资源泄漏???
用DestoryWindow(对话框句柄); 来删除创建的对话框
你可以尝试处理父窗口关闭的事件,手动控制这个非模式对话框的关闭,比如使用DestroyWindow。
只能手动关闭???有没有其他的创建方式可以跟随父窗口的关闭也关闭的
上面我写的方法,当父窗口最小化时,创建的对话框也跟着最小化,当关闭时不能关闭???
#include <winuser.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
#include "resource.h"HINSTANCE g_hInstance = NULL;
HCURSOR g_hDefault = NULL;
HCURSOR g_hNonActive = NULL;
HCURSOR g_hActive = NULL;
BOOL g_bMouseActive = TRUE;
UINT_PTR g_Timer = 1000;// Dialog window procedure
BOOL CALLBACK MyDialogProc(HWND hDialog, UINT message, WPARAM wParam, LPARAM lParam)
{
switch ( message )
{
case WM_CLOSE:
DestroyWindow(hDialog); return 0; case WM_DESTROY:
PostQuitMessage(0); return 0; case WM_INITDIALOG:
//SetCapture(hDialog);
g_Timer = SetTimer(hDialog, g_Timer, 3000, NULL);
return TRUE; case WM_MOUSEMOVE:
{
g_bMouseActive = TRUE;
g_hActive = LoadCursor(g_hInstance, MAKEINTRESOURCE(IDC_CURSOR1));
SendMessage(hDialog, WM_SETCURSOR, (WPARAM)hDialog, 0); KillTimer(hDialog, g_Timer);
g_Timer = SetTimer(hDialog, g_Timer, 3000, NULL); g_hNonActive = 0;
} return 0; case WM_TIMER:
KillTimer(hDialog, g_Timer);
g_bMouseActive = FALSE;
g_hNonActive = LoadCursor(g_hInstance, MAKEINTRESOURCE(IDC_CURSOR2)); SendMessage(hDialog, WM_SETCURSOR, (WPARAM)hDialog, 0);
return 0; case WM_SETCURSOR:
if ( !g_bMouseActive )
SetCursor(g_hNonActive);
else
{
SetCursor(g_hActive);
return TRUE;
} return TRUE;
} return FALSE;
}int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
InitCommonControls();
g_hInstance = hInstance; // Create dialog from resource template
HWND hDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)MyDialogProc);
ShowWindow(hDialog, SW_SHOW);
UpdateWindow(hDialog); // Message loop
MSG msg;
while ( 1 )
{
if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
if ( msg.message == WM_QUIT )
break; if ( PeekMessage(&msg, hDialog, 0, 0, PM_REMOVE) )
{
if ( msg.message == WM_QUIT )
break; if ( hDialog == NULL || !IsDialogMessage(hDialog, &msg) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
DestroyWindow(hDialog); return msg.wParam;
}