|
안녕하세요..
수야님 답변에 감사드려요...^_^
수야님께서 알려주신 방법이 제대로 돌아가는 루틴인 것 같은데요...
저 같은 경우는 다른 창의 WM_CAPTURECHANGED 메시지를 후킹해서 제 창으로 다시 메시지를 보내 제 폼의 메시지 핸들러에서 활성화해주도록 처리를 했는데요...
WM_CAPTURECHANGED가 이전 창의 포커스를 계속 잡고 있는지 아무리 해도 포커스가 제 창으로 오질 않네요...
제 프로그램의 문제인 것 같아 좀 더 고민을 해봐야 될 것 같아요...
답변 감사드립니다...ㅡ.ㅜ
수야!╋ 님이 쓰신 글 :
: 수야랍뉘돳 ㅡ_ㅡ;
:
: 폼 활성화는 SetFocus나 기타 BrindWindowToTop 이런걸로는 좀 벅찹니다.
:
: 준님이 하시려는건 아마도 그러리라 봅니다
:
: 해당폼을 최상위로 올린뒤 다시 평범한 폼으로 바꾸어야합니다.
:
: 별로 어려운 함수는 아니지만 함수명만으론 이 함수가 이쪽에 사용되라라곤 잘 생각하지 않으시나봅니다.
:
: 자세한건 SDK Help를 참고하시구요
:
: SetWindowPos(MainForm->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_SHOWWINDOW);
: SetWindowPos(MainForm->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_SHOWWINDOW);
: SetForegroundWindow(MainForm->Handle);
:
: SetForegroundWindow는 왜 해주느냐하면 SetWindowPos 함수에 HWND_NOTOPMOST 사용후 반듯이(must)해주라해서 했습니다 ㅡ_ㅡ; ( 천년 만년 허접 수야 ㅡ_ㅡ; )
:
: 이렇게 하시면 해당폼이 최상위로 올라옵니다. (말그대로 최상위 NT의 작업창보다 위로 옵니다)
:
: 그후 다시 평범한 폼으로 변경하는거죠
:
: 원하시는 부분까지 왔는지 모르겠네요
:
: 참고하세욥~
:
: ( 천년 만년 허접 수야 여쑴뮈돳~ )
:
: Jun 님이 쓰신 글 :
: : 안녕하세요... 오랜만에 글을 올리는 것 같네요..^_^;
: :
: : 매 번 도움만 받고 가네요...^^;
: :
: : 프로그램이 A,B 두 개가 있다고 가정하고 B에서 이벤트가 발생하면 A에서 그 이벤트를 읽어서(후킹이라고 하져...) A에서 다른 프로그램들보다 젤 앞에 보이게 하구(최상위로 셋팅하는 게 아님.) 활성화 시키려구 하는데요.
: :
: : API함수를 써서 여러가지를 시도해 봤습니다.
: :
: : 근데 모든 것이 A자기 자신에서 처리를 하면 활성화 상태까지 오지 않는 것 같더라구요.
: :
: : 하지만 A에서 처리해야 하거든여..ㅡ.ㅡ;
: :
: : 다른 연습 프로젝트를 만들어서 그 창에서 처리를 해주면 모두 잘 되는 것 같은데요...
: :
: : 처리 API는 아래와 같이 해주었습니다.
: :
: : HWND hWnd = FindWindow("TApplication", this->Caption);
: : ::BringWindowToTop(hWnd);
: : ::SetForegroundWindow(hWnd);
: : ::SetActiveWindow(hWnd);
: :
: : SetWindowPos을 써서 TOPMOST를 주고 NOTOPMOST로 풀면 가장 앞으로 보이긴 하지만 활성화가 되지 않구요...
: :
: : 이 부분에 대해서 아시는 분은 답변 좀 부탁드립니다....^^
: :
|