2015-06-22 68 views
5

當我創建一個Listview時,我注意到了一個奇怪的效果。創建ListView時產生奇怪的效果

當我創建ListView而不創建按鈕時,ListView中的選定項目具有虛線邊框。但是,當我也創建一個按鈕時,ListView所選項目不再有虛線邊框。

enter image description here

這是我用來創建窗口和ListView和按鈕的代碼:

// Create Window 
HWND hWnd = CreateWindowEx(0, "WinClass", "My Window", WS_OVERLAPPEDWINDOW, 261, 172, 394, 284, NULL, NULL, hInstance, NULL); 

// Create ListView 
HWND hListView = CreateWindowEx(0, WC_LISTVIEW, "", WS_CHILD | LVS_REPORT | WS_VISIBLE, 0, 0, 232, 190, hWnd, 0, GetModuleHandle(NULL), NULL); 

// Create Button 
HWND hButtonRefresh = CreateWindowEx(NULL, "BUTTON", "OK", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 200, 110, 25, hWnd, NULL, GetModuleHandle(NULL), NULL); 

注:時,我有一個清單文件,使公共控件6這隻發生我對這個效果沒有問題,我只是想明白爲什麼會發生這種情況!

+0

「虛線邊框」表示listview有輸入焦點。據推測,最後創建的任何一個控件默認都會獲得輸入焦點,這意味着當你有一個按鈕時,它擁有它而不是列表視圖。 –

+1

^這。正如可以看到OK是藍色邊框。 – Eregrith

+0

@Jonathan Potter但在這兩個圖像中,我點擊ListView項目,所以ListView有焦點而不是按鈕。 – paul

回答

0

我相信虛線邊框表示默認控件。在第二個屏幕截圖中,轉到「按鈕的屬性」並將「默認按鈕」設置爲false,然後您應該會在第一個屏幕截圖中看到圍繞文本的虛線邊框。

要做到這一點,請在資源視圖中打開對話框,選擇按鈕並從鼠標右鍵菜單中選擇屬性。在「屬性」窗口中,您應該在行爲部分看到默認按鈕 - 只需將其更改爲False。

或者在代碼嘗試是這樣的: -

DWORD style = m_BtnOk.GetStyle(); 
// remove default push button style 
style &= ~BS_DEFPUSHBUTTON; 
// set the style 
::SendMessage(m_BtnClose.GetSafeHwnd(), BM_SETSTYLE, (WPARAM)style, (LPARAM)TRUE); 
+0

如何將默認按鈕設置爲false? – paul

+0

我沒有使用資源,你可以在我的問題中看到我用來創建Button的代碼。 – paul

+0

Doh - 對不起。只需消除確定按鈕行中的BS_DEFPUSHBUTTON即可。 –

1

這只是因爲按鈕具有焦點和列表視圖失去了它,單擊列表視圖和點應該出現。

+0

不,這不是問題。即使當我點擊任何ListView項目時,樣式也保持不變。 – paul

+0

@ paul有人解釋了評論中發生了什麼。你還不明白什麼?你爲什麼在這方面浪費賞金? –

0

正如其他人所指出的,它的目的是表明輸入焦點。如果你圍繞任何原生格式使用標籤,你會看到矩形圍繞開發者設置的索引跳轉。

它出現在所有的原因是因爲它有一個TabStop。由於第一個例子中只有一個元素,因此只有一個製表符停止的可能性,所以它由矩形表示。玩弄TabStop屬性,標籤左右,看看有什麼變化。