2011-08-02 32 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