2014-11-11 8 views
1

Windows 컨트롤은 유니 코드 또는 ANSI 일 수 있습니다. 제 질문은 컨트롤이이 두 범주 중 하나에 속하는 것이 무엇을 의미합니까?컨트롤이 유니 코드 또는 ANSI 인 것은 무엇을 의미합니까?

가 된 다음 (I 컨트롤 유니이라고 가정하면) 컨트롤

  • 버퍼 유니이다.
  • WM_CHAR 메시지가 유니 코드로 전송됩니다 (예 : 'A'는 0x41로 보내지는 것이고 0x41로 보내지는 것이 아닙니다).
+0

"제어용 버퍼"란 무엇을 의미하는지 모르겠지만 어쨌든 포괄적 인 설명을 제공한다고 생각합니다. – tenfour

+0

컨트롤 데이터를 저장하기 위해 할당 된 메모리를 의미합니다. 예를 들어 "EDIT"컨트롤 버퍼는 컨트롤에 칠해질 문자열을 보유합니다. 따라서 컨트롤이 유니 코드이면 버퍼는 유니 코드로 간주됩니다 (2 바이트마다 1 문자로 매핑 됨). –

+0

이 "버퍼"는 윈도우가 유니 코드인지 여부와 아무 관련이 없습니다. 당신이 말하는 버퍼는 유니 코드 인 윈도우의 개념에서 추상화 된 컨트롤 내부에 있습니다. 유니 코드 인 창은 창 프로 시저로 전달되는 메시지에 관한 것입니다. 그 데이터로 컨트롤이하는 일은 블랙 박스입니다. 나는 내 대답에서'WM_SETTEXT'의 경우를 다루고 있는데, 당신이 말하는 것은 이것입니다. – tenfour

답변

5

이것은 윈도우 프로 시저에 전송 된 윈도우 메시지가 ANSI 또는 유니 코드 버전임을 의미합니다. 예를 들어, 유니 코드 창은 WM_CREATECREATESTRUCTW을 수신하고 ANSI 창은 CREATESTRUCTA을 수신합니다.

이것은 문자열 데이터가 들어있는 거의 모든 창 메시지에 적용됩니다.

Windows는 내부적으로 데이터를 내부적으로 마샬링합니다. 예를 들어 ANSI SendMessageA(WM_SETTEXT, ...)을 유니 코드 창에 호출하면 창에 유니 코드 문자열이 포함 된 WM_SETTEXT이 표시됩니다.

창이 클래스가 RegisterClassExA 또는 RegisterClassExW으로 등록되었는지 여부에 따라 유니 코드 또는 ANSI가됩니다. IsWindowUnicode을 호출하여 윈도우가 유니 코드인지 여부를 테스트 할 수 있습니다.


일반적인 컨트롤에 대한 정보는 사용자가 말하는 것 같습니다.

우선, 유니 코드 창 부모 인 ANSI 창에 문제가 없습니다. 또한 "컨트롤"은 단지 창이라는 것을 명심하십시오.

일반적인 컨트롤은 입니다. 항상 유니 코드입니다. 그들이받는 메시지는 원시 유니 코드 형식입니다. 물론 OS에 내부적으로 존재하기 때문에이 가시성을 확보 할 수 없습니다 (예외 : 공통 컨트롤을 하위 클래스로 분류하는 경우).

일반적으로 처리하는 메시지는 WM_COMMAND 또는 WM_NOTIFY 형태로 창에 전송됩니다. 이러한 메시지는 공용 컨트롤에서 상위 창 (창)으로 전송됩니다. 그들은이 같은 유니 코드 또는 ANSI되는 창문을 존중 :

  1. 먼저 그들이 당신의 창을 보낼 것입니다 WM_NOTIFYFORMAT 메시지를 물어 당신이 (유니 코드 또는 ANSI되는 창문에도 불구하고) ANSI 또는 유니 코드로 수신되는 메시지를 선호하는 경우.
  2. WM_NOTIFYFORMAT를 처리하지 않으면 컨트롤에서 IsWindowUnicode을 호출하여 결정합니다.
  3. 그러면 컨트롤이 그에 따라 메시지를 보냅니다.

기본적으로 공통 컨트롤이 유니 코드인지 여부는 알 필요가 없습니다. 1) 항상 그렇기 때문에 2)이 질문은 Windows 내부의 메시지 처리와 관련이 있기 때문입니다. , 당신의 책임이 아닙니다.

귀하의 책임은 에서 공용 컨트롤 ~ 자신의 창으로 오는 알림을 처리하는 것입니다.이 경우 자신의 창의 유니 코드/ANSI 다움이 중요합니다.

+0

'WM_SETTEXT '에 대한 데이터가 실제로 마샬링됩니다. 그러나 예제에서는 데이터 ** 변환 **을 보여줍니다. 어쩌면 각 개념을 개별적으로 설명하기 위해 답을 업데이트 할 수 있습니다. 'WM_NOTIFYFORMAT' (통지가 컨트롤의 부모에게 보내지는)이 왜 필요한지를 설명하는'WM_NOTIFY'에 대한 추가 노트는 이미 좋은 답변을 향상시킵니다. – IInspectable