変な質問ですいません;;;
CreateWindowEx()関数でウィンドウをいくつか表示するプログラムを作ったのですが、このウィンドウをまとめて閉じることはできないのでしょうか?
説明不足な所があると思うので分からないとこがあったら聞いて下さい(汗
こんな感じのことですか?
#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 ;
}
これもありそうです。
#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 ;
}
解決チェック忘れていました。
回答ありがとうございました^^
ツイート | ![]() |