3
這是一個老問題,我從來沒有想過 - 想知道如果某人在這裏可能碰巧知道你的頭頂上的答案...爲什麼TTN_NEEDTEXTW但不是TTN_NEEDTEXTA?
在我們的軟件的某些部分(MFC/Win32/MBCS)我的代碼將只接收
TTN_NEEDTEXTW
在我們的軟件的其他部分,我會收到MBCS正確的消息
TTN_NEEDTEXTA
這是沒有意義到m即
我知道我們的軟件可以編譯爲Unicode或不是(我們設置爲使用多字節字符集)。我有一個模糊的回憶,即每個窗口都可以被構建爲Unicode,儘管這是一個模糊的記憶,沒有具體的東西。
有誰知道爲什麼我們會在我們的代碼中的某些地方獲取寬版本消息,儘管編譯爲多字節?
注:
- 我們絕對不會發送此郵件 - 大概工具提示控制。
- 我們絕對只在某些地方接收(W)消息,而且絕對只在其他地方接收(A)消息。
- 我確定所有的編譯模塊都使用MBCS,而不是Unicode,並且編譯目標都指定了MBCS而不是Unicode。
- 這似乎只發生在CMainFrame託管的窗口和控件上。即主框架之外的Windows可以使用窄版本(比如在對話框中)。
小調:使用RegisterClassExA/RegisterClassExW決定窗口的unicode狀態。 – arx
這是有道理的,但到目前爲止,沒有看到爲什麼我們的CFrameWnd派生窗口和託管控件將接收MBCS構建的W變體。跟蹤啓動顯示RegisterClassA和CreateWindowA在課程註冊和創建期間被調用。更奇怪的是,WM_NOTIFYFORMAT僅在我們的代碼中用於跟蹤目的,並且在VC++中包含用於定義其數字標識和ON_WM_NOTIFYFORMAT()宏的路徑。也許當工具提示控件被初始化時,還有另一種方法告訴它要發送什麼樣的消息類型? – Mordachai
工具提示是否可能由其他代碼創建? (例如,listview控件創建它自己的工具提示。) –