2011-08-02 33 views
0

根據msdn,http://msdn.microsoft.com/en-us/library/bb774798%28VS.85%29.aspx, 返回TRUE將阻止用戶編輯標籤。我無法阻止用戶在ListView中編輯標籤

所以我寫了下面的代碼: 主營:

WinMain(...) 
{ 
    DialogBox(..., DlgProc) 
} 

DLGPROC:

DlgProc(...) 
{ 
    switch(message) { 
    case WM_NOTIFY: 
     if((NMHDR *)lParam->code == LVN_BEGINLABELEDIT) { 
      return TRUE; 
     return FALSE; 
    ... 
} 

儘管如此,標籤可以編輯。我不想取消樣式LVS_EDITLABELS,因爲有時我想允許用戶編輯標籤。

有誰知道這個問題?謝謝。

+0

從'LVN_BEGINLABELEDIT'返回'TRUE'確實有效。必須有其他事情正在發生干擾。 –

+1

發佈一些更多的代碼,問題肯定在其他地方。你可以製作一個非常小的應用程序,可以在這裏發佈它顯示的問題? – Skizz

+0

是的,我做到了,謝謝大家。 我在返回TRUE之前添加了一行。 SetWindowLongPtr(hwndDlg,DWLP_MSGRESULT,TRUE); 和一切工作正常。微軟在他們的架構中有一些骯髒的工作,哈哈 – jay

回答

3

從DialogProc()返回TRUE並不意味着您認爲它的作用。從MSDN庫文章引述:

通常,對話框過程應該返回TRUE,如果它處理 的消息,FALSE如果沒有。如果對話框過程 返回FALSE,則對話框管理器將執行默認對話框 以響應該消息。

如果對話框過程處理,需要一個特定 返回值的消息,對話框過程應通過立即返回TRUE調用之前SetWindowLong函數(hwndDlg,DWL_MSGRESULT,LRESULT) 設置所需 返回值。請注意,您必須在返回TRUE之前立即致電 SetWindowLong;這樣做可能會導致 DWL_MSGRESULT值被嵌套對話框 框消息覆蓋。

+0

這是答案,謝謝! – jay