CreateWindowEx()で作ったウィンドウを全て閉じるには?

解決


ryushi60  2008-08-20 09:40:52  No: 68874

変な質問ですいません;;;

CreateWindowEx()関数でウィンドウをいくつか表示するプログラムを作ったのですが、このウィンドウをまとめて閉じることはできないのでしょうか?

説明不足な所があると思うので分からないとこがあったら聞いて下さい(汗


かもねぎ  2008-08-20 15:40:55  No: 68875

こんな感じのことですか?
#include     <windows.h>
#include     "resource.h"

INT_PTR CALLBACK DialogProc ( HWND, UINT, WPARAM, LPARAM ) ;
HINSTANCE hInst ;
HWND hItem[ 3 ] ;

int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
    hInst = hInstance ;
    DialogBox ( hInstance, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DialogProc ) ;
    return 0 ;
}

INT_PTR CALLBACK DialogProc ( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{

    switch ( msg )
    {
    case WM_INITDIALOG :
        
        hItem[0] = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button0" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 10, 90, 30, hDlg, ( HMENU ) 0, hInst, 0 ) ;

        hItem[1] = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button1" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 50, 90, 30, hDlg, ( HMENU ) 1, hInst, 0 ) ;

        hItem[2] = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button2" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 90, 90, 30, hDlg, ( HMENU ) 2, hInst, 0 ) ;
        return TRUE ;
    

    case WM_COMMAND :
        switch ( LOWORD ( wParam ) )
        {
        case IDOK :
            for ( int i = 0 ; i < ARRAYSIZE ( hItem ) ; i++ )
            {
                DestroyWindow ( hItem[ i ] ) ;
            }
            break ;
        case IDCANCEL :
            EndDialog ( hDlg, 0 ) ;
            break ;
        }
        return TRUE ;

    case WM_CLOSE :
        EndDialog ( hDlg, 0 ) ;
        return TRUE ;
    }

    return FALSE ;
}


かもねぎ  2008-08-20 16:06:58  No: 68876

これもありそうです。
#include     <windows.h>
#include     "resource.h"

INT_PTR CALLBACK DialogProc ( HWND, UINT, WPARAM, LPARAM ) ;
BOOL CALLBACK EnumChildProc ( HWND, LPARAM ) ;
HINSTANCE hInst ;

int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
    hInst = hInstance ;
    DialogBox ( hInstance, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DialogProc ) ;
    return 0 ;
}

INT_PTR CALLBACK DialogProc ( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{

    switch ( msg )
    {
    case WM_INITDIALOG :
        {
        HWND hBtn0 = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button0" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 10, 90, 30, hDlg, ( HMENU ) 0, hInst, 0 ) ;

        HWND hBtn1 = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button1" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 50, 90, 30, hDlg, ( HMENU ) 1, hInst, 0 ) ;

        HWND hBtn2 = CreateWindowEx ( 0, TEXT( "button" ), TEXT( "button2" ),
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 90, 90, 30, hDlg, ( HMENU ) 2, hInst, 0 ) ;
        return TRUE ;
        }

    case WM_COMMAND :
        switch ( LOWORD ( wParam ) )
        {
        case IDOK :
            EnumChildWindows ( hDlg, EnumChildProc, 0 ) ;
            break ;
        case IDCANCEL :
            EndDialog ( hDlg, 0 ) ;
            break ;
        }
        return TRUE ;

    case WM_CLOSE :
        EndDialog ( hDlg, 0 ) ;
        return TRUE ;
    }

    return FALSE ;
}

BOOL CALLBACK EnumChildProc ( HWND hChild, LPARAM lParam )
{
    if ( ! hChild ) 
    {
        return FALSE ;
    }

    // 終了条件を必要に応じて書く

    DestroyWindow( hChild ) ;
    return TRUE ;
}


ryushi60  2008-08-25 20:19:13  No: 68877

解決チェック忘れていました。
回答ありがとうございました^^


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加