2017-07-27 10 views
0

私は子ウィンドウの閉じるボタンを押したときにメッセージWM_CLOSEが引き金となると予想WM_CLOSEを使用して子ウィンドウを閉じるにはどうすればよいですか?

m_childHwnd = CreateWindowEx(
NULL, 
TEXT("STATIC"), TEXT("childW"), 
WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE, 
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
m_parentHWnd, NULL, 
GetModuleHandle(NULL), NULL 
); 

m_childhProc = (WNDPROC)SetWindowLongPtr(m_childHwnd , GWLP_WNDPROC, (LONG_PTR)WndChildProc); 

static LRESULT CALLBACK WndChildProc(HWND hwnd, UINT message, WPARAM wParam, 
LPARAM lParam) 
{ 
switch (message) 
{ 
case WM_CLOSE: 
    DestroyWindow(hwnd); 
return 0; 
case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 
} 
default: 
    return CallWindowProc(m_childhProc, hwnd, message, wParam, lParam); 
} 

子ウィンドウから閉じるボタンとハンドルメッセージのWndchildProcでポップアップとして子供hwndを作成します。そして、私はこの方法で子供hwndを閉じることができます。

子供の閉じるボタンhwndが押されても、何も起こりません。 parent-hwndの閉じるボタンが押された場合、WM_DESTROYメッセージトリガー。 したがって、閉じるボタンで子ウィンドウを閉じることはできません。

閉じるボタンを使用して子ウィンドウを閉じるにはどうすればよいですか?

更新:コピーにテキストがありません。デフォルトではCallWindowProcが追加されました。

+7

その他のすべてのケースでは、ウィンドウプロシージャを呼び出す必要があります。 – EJP

+1

子ウィンドウは 'WS_CHILD'スタイルのウィンドウです。あなたの質問には何もありません。私はあなたが解決しようとしている問題は、次のものではありません。さらに、古い(危険な)コントロールをサブクラス化し、代わりに提供されたインフラストラクチャを使う(「サブクラス化コントロール」(https://msdn.microsoft.com/en-us/library/windows/desktop)を参照してください) /bb773183.aspx))。 – IInspectable

答えて

0

閉じるボタンをクリックしたときに、イベントWM_NCLBUTTONUPトリガーのソリューションが見つかりました。

case WM_NCLBUTTONUP: 
    ShowWindow(hwnd, SW_HIDE); 
    return 0; 
関連する問題