2013-02-20 4 views
9

다른 모든 창 위에 내 창을 유지하려고합니다. 나는 C++ Win32 프로그래밍에 익숙하지 않다. 이 WinMain 내 윈도우의 내 초기화입니다 :최상위 창을 설정하십시오.

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 

나는 이전에 대화와 협력, 그래서 맨 위의 속성은 정말 사용하기 쉬웠다. 하지만 여기서, 창문에 나는 그것을 어떻게 세우는 지 모른다. 나는 또한 그것을 일으킬 수 있기를 원한다. 아무도 나를 도울 수 있습니까?

+1

다른 모든 플래그 위에 윈도우를 유지할 수 없습니다. 시스템에 여러 개의 창이 있습니다. 모두가 최고 창을하려고 할 때 모두가 이길 수는 없습니다. –

+0

나는 Topmost 속성을 의미했습니다. – Victor

+0

@DavidHeffernan : Windows 8.1의 경우 사용자가 옳은 것처럼됩니다. 나는 ClockX라는 훌륭한 유틸리티를 사용하고 있습니다. 마우스를 가져 가면 투명도가 높아 지도록 구성 할 수 있으며 클릭 연결을 지원하므로 다른 모든 창 위에 최상위로 표시됩니다. 그러나 한동안 창문이 망가져 시계가 사라집니다. 그것을 고치는 데 필요한 모든 것은 그것의 시스템 트레이 아이콘의 오른쪽 클릭이지만, 여전히 매우 성가시다. 그래서 많은 창문 "기술"을 가지고 있습니다. 그들은 창문이 진화하면서 악화되기 시작했습니다. –

답변

13

CreateWindowEx을 (확장 된) 창 스타일 WS_EX_TOPMOST과 함께 사용하십시오.

면책 조항 : 내가 그 물건을 만진 지 약 15 년 정도 지났습니다.

+0

저는 컴퓨터 앞에 더 이상 있지는 않지만 토미 로우로 답을 테스트하고 표시 할 것입니다. – Victor

9

SetWindowPos, hWndInsertAfter 매개 변수를 참조하십시오. HWND_TOPMOST을 전달하면 원하는 것을 할 수 있습니다.

또한 위치와 크기를 변경하지 않으려면 SWP_NOMOVE | SWP_NOSIZEuFlags 매개 변수로 전달할 수 있습니다.

16
SetWindowPos(hwnd01, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 

참고 :SWP_NOMOVE | SWP_NOSIZE는 3, 4, 5의 SetWindowPos 기능의 여섯 번째 매개 변수를 무시하고 있습니다.

두번째 파라미터가 될 수

  • HWND_BOTTOM

  • HWND_NOTOPMOST

  • HWND_TOP

  • HWND_TOPMOST(설정 윈도우 (설정 창이 정상적인 윈도우로) 항상 켜져있다. 위)

+0

감사합니다. 저에게 훌륭한 답변이었습니다! 'SWP_NOMOVE'와'SWP_NOSIZE'을 건네주지 않고 동작합니까? – Noitidart

+1

GetWindowLong을 사용하여 지정된 창에 대한 모든 정보를 검색하고 SetWindowLong을 사용하여 지정된 창의 특성을 변경할 수 있습니다.SetWindowLong은 SetWindowPos 함수를 호출 할 때까지 적용되지 않습니다. – Amir

+0

Amir 감사합니다! – Noitidart

3

Noitidart 2) I 직접 언급 할 수

SWP_NOMOVE가 (현재의 위치를 ​​유지 X와 Y 파라미터를 무시한다. SWP_NOSIZE 현재 크기를 유지합니다 (cx 및 cy 매개 변수 무시). 이 플래그를 설정하지 않으면 0, 0, 0, 0을 전달하는 대신 위치와 크기를 지정해야합니다.

+0

댓글을 작성할 수 없더라도이 세부 정보를 공유해 주셔서 감사합니다. – Noitidart

관련 문제