본문 바로가기

Developement/C/C++

[FLTK] Win32 에서 HWND 를 제대로 못 얻어 올때



 일단 조이스틱, 마우스, 키보드의 일정 값들을 산술화 하는 테스트 프로그램을 FLTK 로 제작 중 이었습니다만, 이게 왠걸 ... DriectX 의 DInput 에 SetCooperativeLevel() 에서 계속 실패가 나는 것 이었습니다.

 대체 왜 이러나 하고 보니, ( Process Hacker 사용 )



 엄? FLTK 에서 fl_xid( window ); 로 가져 온 HWND 와 실제 FLTK 에서 사용하고 있는 HWND 가 다릅니다.... 대체 저건 어디서 나온 값이지 ...

 그래서 이전에 만든 FLTK 조이스틱 테스트 하는걸 보면, 이건 또 fl_xid() 로 정상인 HWND 를 넘겨 줍니다 ... 대체 왜 ?? 왜 ?? 왜 ??



 아마 FLTK 에서 2개 이상의 window를 생성 하고 있는 상태에서  fl_xid() 로 가져오면 뭔가 잘못된 값을 가져 오는거 같기도 합니다만, 원인을 분석 할 여유는 없어 보였습니다.

 그래서 다음과 같이 바꿧습니다.



    HWND hCurWin = GetWinHandle( GetCurrentProcessId() );


 여기서 사용된 GetWinHandle() 라는건 다음과 같이 구현 되었습니다.


HWND GetWinHandle(ULONG pid)
{
    HWND hTmp = FindWindow( NULL, NULL );

    while( hTmp != NULL )
    {
        if( GetParent(hTmp) == NULL )
        {
            if( pid == ProcIDFromWnd( hTmp ) )
            {
                return hTmp;
            }
        }

        hTmp = GetWindow( hTmp, GW_HWNDNEXT );
    }
    return NULL;
}


 근본적인 문제를 해결 하고 싶지만 당장은 여유가 없는 관계로 다음으로 미뤄야 겠습니다만, 의아한 부분 입니다...