9.17(월) 실습

from Study/API 2007/10/10 14:18 view 21602
// 1. 메세지 전달.
// 계산기의 Hwnd를 얻어 일반용으로 만든다.
int main()
{
    HWND hwnd = FindWindow( 0, "계산기" );
    if( hwnd == 0 )
    {
        printf( "계산기를먼저 실행\n");
        return 0;
    }
    SendMessage( hwnd, WM_COMMAND, 305, 0 );
}
// 계산기의 Hwnd를 얻어 윈도우를 닫는다.
int main()
{
    HWND hwnd = FindWindow( 0, "계산기" );

    if ( hwnd == 0 )
    {
        printf( " B를 먼저 실행.\n" );
        return 0;
    }
    //---------------------------
    int result = 0;
    result = SendMessage( hwnd, WM_CLOSE, 10, 20 );

    printf( "결과 : %d\n", result );
}


// 2. WM_CLOSE 와 WM_NCHITTEST

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch( msg )
    {   
    case WM_CLOSE:
        {
            UINT ret = MessageBox( hwnd, "정말 종료?", "확인", MB_YESNO );

            if( ret == IDYES )
            {
                // 죽인다.. 또는 DefWindowProc()로 보내도 된다.
                DestroyWindow( hwnd );
            }
        }
        return 0;

    // WM_NCHITTEST 를 처리하는 방법
    case WM_NCHITTEST:
        {
            // 1. 먼저 DefWindowProc()으로 전달해서 hit test code를 얻는다.
            int code = DefWindowProc( hwnd, msg, wParam, lParam );

            // 2. code를 조작한다. Ctrl 누르고 끌면 창이 이동.
            if( code == HTCLIENT && GetKeyState( VK_CONTROL ) < 0 )
                code = HTCAPTION;

            // 3. code를 리턴한다. - 다음 메세지는 이 리턴값에 의해 결정된다.
            return code;
        }

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc( hwnd, msg, wParam, lParam);
}
Tag | ,

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다