2011-07-08 50 views
2

我有創建BS_OWNERDRAW按鈕:懸停可視狀態不同的BS_OWNERDRAW按鈕

HWND hwndClose = CreateWindow(WC_BUTTON, _T(""), 
        BS_PUSHBUTTON | BS_OWNERDRAW | WS_CHILD | WS_VISIBLE, 
        0, 0, 16, 16, win->hwndTocBox, (HMENU)IDC_TOC_CLOSE, ghinst, NULL); 

我想不同的繪製當光標位於按鈕上。我期望每次光標進入/離開我的按鈕時都會收到WM_DRAWITEM消息,但似乎並非如此。即使標準窗口按鈕在懸停情況下顯然具有不同的視覺狀態,我也只能得到它。

當懸停狀態發生變化時,是否可以輕鬆地讓窗口發送WM_DRAWITEM,而不需要執行類似於子類化按鈕窗口和手動處理WM_MOUSEMOVE/WM_MOUSELEAVE消息的乏味內容?

回答

1

這是ownerdraw的一個副作用。您在「常規」按鈕上獲得的視覺懸停效果實際上僅在其視覺樣式啓用時才存在。但是,任何擁有其所有者樣式的控件都將獲得視覺風格而不是。這是appcompat行爲,它不能被禁用。你將不得不以艱難的方式做到這一點。