저는 Button 컨트롤 래퍼 클래스를 가지고 있습니다.이 래퍼 클래스는 기존 핸들을 WC_BUTTON
클래스로 전달하면이를 전달할 수 있습니다. 이것을 결정하기 위해 GetClassName()
을 사용합니다. 하지만 문제가있는 코드의 주석 도움이 그것을 설명한다 :이상한 부등식 - WC_BUTTONW가 L "Button"과 같지 않습니까?
// Initialize from existing handle
Vivify::Button::Button(HWND handle) {
TCHAR cls[256];
GetClassName(handle, cls, sizeof(cls));
Alert(cls); // MessageBox says "Button"
Alert(WC_BUTTON); // MessageBox says "Button" also
Str clsStr = cls;
Str wcStr = WC_BUTTON;
Alert(ToStr<int>(clsStr.length())); // says "6"
Alert(ToStr<int>(wcStr.length())); // says "6" also
// Problem HERE. Evaluates to false. How are they inequal??
if (cls == WC_BUTTON) {
SetHandle(handle); // Never gets executed
m_id = GetDlgCtrlID(handle);
}
}
Str
는 방법에 의한 std::wstring
이며, 프로그램은 유니 코드입니다. 그러나 문자열 내가 GetClassName()
에서 얻을 WC_BUTTON
모두 유니 코드 문자열 모두 6
자 길이이며, 모두 동일한 "Button"
, false
을 돌려 줄 if (cls == WC_BUTTON)
어떻게 지구에 모두?
누군가 두 개의 겉으로보기에 정확히 똑같은 문자열이 어떻게 서로 같을 수 있는지 설명 할 수 있습니까? 또는 HWND
이 버튼/편집/etc에 속하는지 어떻게 확인할 수 있습니까? 제어?
C 문자열을 ==와 비교하지 마십시오. – chris
@chris 그럼 어떻게 비교해야합니까? –
여전히 C 문자열 인 경우 'strcmp'. 'vector'와'array '는 C 문자열처럼 행동 할 수 있기 때문에,'cls'를 그것들 중 하나에 만들고 다른 것을 만들고, 그것의'data()'를'WC_BUTTON'으로 설정하고 ==를 그것들에 사용할 수 있습니다. 나는'std :: string'이라고 말할 것입니다.하지만 버퍼를 직접 설정할 수는 없습니다. –
chris