我使用CreateDialog(hAppInstance,MAKEINTRESOURCE(IDD_CONTROL_DIALOG),m_hwnd, (DLGPROC)ControlDlgProc);创建一个对话框,其中m_hwnd为父窗口,为什么我关闭父窗口时刚刚创建的对话框没有关掉???我该怎么实现??

解决方案 »

  1.   

    是这样的.你应该用 在主窗体的 OnClose 事件中 
    用DestoryWindow(对话框句柄); 来删除创建的对话框
      

  2.   

    CreateDialog创建的是非模式对话框,关闭它的父窗口并不会影响它。
    你可以尝试处理父窗口关闭的事件,手动控制这个非模式对话框的关闭,比如使用DestroyWindow。
      

  3.   

    对话框的创建没有做其他的操作,也没有设置CHILD,不过我指定了Parent
    只能手动关闭???有没有其他的创建方式可以跟随父窗口的关闭也关闭的
    上面我写的方法,当父窗口最小化时,创建的对话框也跟着最小化,当关闭时不能关闭???
      

  4.   

    设置对话框风格为child,不过这样后会限制您的对话框可移动范围为父窗口的范围内
      

  5.   

    #include <windows.h>
    #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;
    }