【问题标题】:I cannot prevent user from editing labels in ListView我无法阻止用户在 ListView 中编辑标签
【发布时间】:2011-08-02 16:56:46
【问题描述】:

根据msdn,http://msdn.microsoft.com/en-us/library/bb774798%28VS.85%29.aspx, 返回 TRUE 会阻止用户编辑标签。

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

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

DlgProc:

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

仍然可以编辑标签。我不想取消样式 LVS_EDITLABELS,因为有时我想允许用户编辑标签。

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

【问题讨论】:

  • LVN_BEGINLABELEDIT 返回 TRUE 确实有效。一定有其他事情正在发生干扰。
  • 再贴一些代码,问题肯定出在其他地方。你能做一个非常小的应用程序,可以在这里发布来显示问题吗?
  • 是的,我做到了,谢谢大家。我在返回 TRUE 之前添加了一行。 SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);一切正常。微软在他们的架构中有一些肮脏的工作,哈哈

标签: c windows listview sdk


【解决方案1】:

从 DialogProc() 返回 TRUE 并不意味着你认为它会做什么。引用 MSDN 库文章:

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

如果对话框过程处理的消息需要 具体返回值,对话框程序应设置所需 通过调用 SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) 返回值 在返回 TRUE 之前。请注意,您必须调用 SetWindowLong 在返回 TRUE 之前;早点这样做可能 导致 DWL_MSGRESULT 值被嵌套对话框覆盖 框消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多