XP에서 투명 글꼴 컨트롤을 위한 Bug

전제: XP 시스템, Manifest 지정을 사용하여 Microsoft.Windows.Common-Controls
현상: Edit 컨트롤 처리 WMCTLCOLOREDIT는 색상을 변경합니다. 문제는 SetBkMode가 투명하게 설정된 후 컨트롤이 문자를 삭제할 때 바로 리셋할 수 없고 잔류합니다.
해결 방법 1: 자해, Microsoft.Windows.Common-Controls가 다음과 같은 코드를 삭제했습니다.
#if defined _M_IX86
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

해결 방법 2: 투명을 포기하고 위조 투명을 사용하십시오. 만약 배경이 순수한 색이라면 SetBkColor를 사용하면 됩니다.
해결 방법 3: XP가 감지되면 WMCTLCOLOREDIT 브러시로 돌아가기 전에 FillRect/Rectangle로 발라주세요...아니면 WMERASEBKGND, 물론 이 방법의 전제는 WMERASEBKGND의 처리는 스스로 바르는 것이다. 리턴 트루 한마디면 아무것도 하지 않은 것과 같다.
 
참고: 같은 비극의 한 묘사:http://zhidao.baidu.com/question/9749770.html

좋은 웹페이지 즐겨찾기