C 我无法阻止用户在ListView中编辑标签

C 我无法阻止用户在ListView中编辑标签,c,windows,listview,sdk,C,Windows,Listview,Sdk,根据msdn, 返回TRUE将阻止用户编辑标签 所以我写了下面的代码: 主要内容: DlgProc: DlgProc(...) { switch(message) { case WM_NOTIFY: if((NMHDR *)lParam->code == LVN_BEGINLABELEDIT) { return TRUE; return FALSE; ... } 不过,标签还是可以编辑的。我不想取消样式LVS

根据msdn, 返回TRUE将阻止用户编辑标签

所以我写了下面的代码: 主要内容:

DlgProc:

DlgProc(...)
{
    switch(message) {
    case WM_NOTIFY:
        if((NMHDR *)lParam->code == LVN_BEGINLABELEDIT) {
            return TRUE;
        return FALSE;
    ...
}
不过,标签还是可以编辑的。我不想取消样式LVS_EDITLABELS,因为有时我希望允许用户编辑标签


有人知道这个问题吗?谢谢。

从DialogProc()返回TRUE并不意味着它的作用。引用MSDN库文章:

通常,对话框过程在处理时应返回TRUE 消息,如果没有,则为FALSE。如果对话框中的程序 返回FALSE,对话框管理器将执行默认对话框 操作以响应消息

如果对话框过程处理的消息需要 具体返回值时,对话框程序应设置所需的 通过调用SetWindowLong(hwndDlg、DWL\u MSGRESULT、lResult)返回值 在返回TRUE之前。注意,你必须打电话 在返回TRUE之前立即设置WindowLong;5月初这样做 导致嵌套对话框覆盖DWL_MSGRESULT值 框消息


从DialogProc()返回TRUE并不意味着它的作用。引用MSDN库文章:

通常,对话框过程在处理时应返回TRUE 消息,如果没有,则为FALSE。如果对话框中的程序 返回FALSE,对话框管理器将执行默认对话框 操作以响应消息

如果对话框过程处理的消息需要 具体返回值时,对话框程序应设置所需的 通过调用SetWindowLong(hwndDlg、DWL\u MSGRESULT、lResult)返回值 在返回TRUE之前。注意,你必须打电话 在返回TRUE之前立即设置WindowLong;5月初这样做 导致嵌套对话框覆盖DWL_MSGRESULT值 框消息


LVN_BEGINLABELEDIT
返回
TRUE
确实有效。一定是发生了其他干扰。再发一些代码,问题肯定在别处。你能做一个很小的应用程序,可以发布在这里,显示问题吗?是的,我做了,谢谢大家。我在返回TRUE之前添加了一行。SetWindowLongPtr(hwndDlg,DWLP_MSGRESULT,TRUE);一切正常。微软在他们的体系结构中做了一些肮脏的工作,从LVN_BEGINLABELEDIT中恢复
TRUE
是可行的。一定是发生了其他干扰。再发一些代码,问题肯定在别处。你能做一个很小的应用程序,可以发布在这里,显示问题吗?是的,我做了,谢谢大家。我在返回TRUE之前添加了一行。SetWindowLongPtr(hwndDlg,DWLP_MSGRESULT,TRUE);一切正常。微软在他们的架构中做了一些肮脏的工作,哈哈
DlgProc(...)
{
    switch(message) {
    case WM_NOTIFY:
        if((NMHDR *)lParam->code == LVN_BEGINLABELEDIT) {
            return TRUE;
        return FALSE;
    ...
}