2010-07-04 25 views
1

我有一个在小图标模式下的无模式Win32对话框的列表视图,其中LVS_EDITLABELS集合。不管编辑是通过鼠标点击还是以编程方式通过调用ListView_LabelEdit()开始,并且无论编辑完成时是否打ESC或RETURN,当收到LVN_ENDLABELEDIT通知时,pszTextNMLVDISPINFO始终为NULL,因此表示取消了编辑。从此通知返回TRUE不起作用。Inplace Win32 listview编辑总是被取消

我发现知识库文章http://support.microsoft.com/kb/130691适用于treeview。即使在那里找到的建议和继承编辑控件也不起作用。

我怀疑默认的对话框逻辑正在吃掉返回并取消编辑,我不知道如何防止这种情况。

+0

听起来很有道理。落实WM_GETDLGCODE消息处理程序的对话框窗口过程中。 – 2010-07-04 14:09:47

+0

对不起我忘了我已经做了太。我在对话框和控件上都实现了一个处理程序,它们都不会被调用。 – wpfwannabe 2010-07-04 16:35:42

回答

1

LVN_ENDLABELEDIT适用于我,并返回正确的文本。问题是,当您按下RETURN或ESC对话框将其作为IDOK或IDCANCEL进行处理并关闭取消编辑标签的对话框时。 所以,如果你对此有何评论这几行代码,你会得到正确的文本:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
{ 
    EndDialog(hDlg, LOWORD(wParam)); 
    return (INT_PTR)TRUE; 
} 

它的工作原理相同的吗? cource这不是一个解决方案只是一个提示。

1

在对话框的消息处理程序,您需要使用:

COMMAND_HANDLER(IDCANCEL, 0, OnCancel) 
COMMAND_HANDLER(IDOK, 0, OnOK) 

否则,你得到你所观察到的行为。我不知道为什么会出现这种情况,但我怀疑编辑标签逻辑使用与IDCANCELIDOK相同的ID,但使用按照http://msdn.microsoft.com/en-us/library/ms647591%28VS.85%29.aspx控制定义的通知代码。

0

好的,感谢大家的贡献。经过几个小时的调试后,结果是子类代码在所有WM_NOTIFY和WM_COMMAND消息中没有将它们委托给子类别的过程。我既不使用MFC也不使用ATL,而是使用我自己的包装器。一旦我开始委托WM_COMMAND和WM_NOTIFY,它会自动开始按预期工作。

所以,这是我自己的错:(尽管如此,一为所有努力。