2013-08-12 6 views
1

나는 두 개의 List Box 항목을 창에 만들었습니다. 이제는 선택 항목 중 하나가 변경 될 때마다 알림을 받으려고합니다.어쨌든 리소스를 사용하지 않고 Win32 컨트롤에 식별 자 코드를 할당 할 수 있습니까?

나는 LBN_SELCHANGE 알림 코드를 WM_COMMAND 아래에 표시하고 있습니다. LBN_SELCHANGE

MSDN 문서는 :

wParam 
    The LOWORD contains the identifier of the list box. 
    The HIWORD specifies the notification code. 
lParam 
    Handle to the list box. 

지금, 나는 그 "식별자"의 사용과 (이 메시지를 전송을 제어하는 ​​찾기)이 두 목록 상자를 구별 할. 나도 알아, 나는 또한 lParam 인수의 핸들 값에서 찾을 수 있지만 대신 식별자 코드를 사용할 수 있다면 전역 네임 스페이스에 대한 창 핸들을 표시하지 않는 측면에서 더 낫습니다.

그래서 리소스를 사용하지 않고 컨트롤에 식별자를 할당하거나 (있을 경우 자동으로 할당 된 ID를 찾을 수 있습니까)?

+0

'CreateWindow'를 호출 할 때 이미 컨트롤에 ID를 할당했습니다 (이는 'hMenu' 매개 변수입니다). 안전하게 재생하려면 ID가 동일한 부모 윈도우가있는 모든 하위 창에 대해 고유해야합니다. – IInspectable

+0

@ 팀 : 지금 확인했습니다. 실제로,'CreateWindowEx()'에 전달 된'HMENU' 값은 메시지 프로세서 함수에서 창의 식별자로 반환됩니다. 나는 매우 놀랐다. 나는 항상 메뉴 막대를 만드는 것 이외의 다른 매개 변수의 기능에 대해 궁금해했다. 고맙습니다. 대답을 c/p로 받아 들인다면 받아 들일 것입니다. – hkBattousai

답변

1

자식 컨트롤을 만들 때 컨트롤 ID는 CreateWindow으로 hMenu 매개 변수로 전달됩니다. 매개 변수의 설명서는 다음 섹션 (강조 광산)를 포함하십시오 아이] 창에

를 HMENU는 자식 창 식별자, 이벤트에 대한 부모에게 통지 대화 상자 컨트롤에 의해 사용되는 정수 값을 지정합니다. 응용 프로그램은 하위 창 식별자를 결정합니다. 동일한 상위 창을 갖는 모든 하위 창에 대해 고유해야합니다.

외에 동위 중에서 고유되는 윈도우 ID는 16 비트 (valid range is 8 to 0xDFFF)에 적합해야한다. VS로 제어되는 Resource.h 파일에 ID를 입력하고 _APS_NEXT_CONTROL_VALUE 값을 업데이트하여 대화 상자 리소스에서 생성 된 형제와의 충돌을 방지 할 수 있습니다.

2

이 GWL_ID와

LONG WINAPI SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong); 

를 사용하는 것도 가능 변경 자식 창 식별자. 그러나 더 나은 해결책은 올바른 식별자를 가진 창을 만드는 것입니다.

+0

64 비트가 진짜입니다. 대신 ['SetWindowLongPtr'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644898.aspx)를 사용하십시오. – IInspectable