Я не могу запретить пользователю редактировать ярлыки в ListView - PullRequest
0 голосов
/ 02 августа 2011

По данным MSDN, http://msdn.microsoft.com/en-us/library/bb774798%28VS.85%29.aspx, возвращение TRUE не позволяет пользователю редактировать метки.

Итак, я написал код ниже: Main:

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

DlgProc:

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

Тем не менее, ярлыки можно редактировать. Я не хочу отменять стиль LVS_EDITLABELS, потому что иногда я хотел бы позволить пользователям редактировать метки.

Кто-нибудь знает проблему? Спасибо.

1 Ответ

3 голосов
/ 02 августа 2011

Возвращение TRUE из DialogProc () не означает, что вы думаете, что оно делает.Цитирование из статьи библиотеки MSDN:

Как правило, процедура диалогового окна должна возвращать значение ИСТИНА, если оно обработало сообщение, и ЛОЖЬ, если это не так.Если процедура диалогового окна возвращает FALSE, диспетчер диалогов выполняет диалоговую операцию по умолчанию в ответ на сообщение.

Если процедура диалогового окна обрабатывает сообщение, которое требует определенного возвращаемого значения, процедура диалогового окна должна установитьжелаемое возвращаемое значение путем вызова SetWindowLong (hwndDlg, DWL_MSGRESULT, lResult) непосредственно перед возвратом TRUE.Обратите внимание, что вы должны вызвать SetWindowLong непосредственно перед возвратом TRUE;это может привести к тому, что значение DWL_MSGRESULT будет перезаписано вложенным сообщением диалогового окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...