15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Problem getting original edit commands while editing a CLi

Michael -- Michael.Dunphy@HBC.honeywell.com
Wednesday, January 08, 1997

[Mini-digest: 2 responses]

You could set a flag in your LVN_BEGINLABELEDIT handler and
clear it in your LVN_ENDLABELEDIT handler. In your handlers for
the ID_EDIT_ commands, execute code for the original behavior
or your new behavior, depending on the value of the flag.

> Environment: Win95, VC++ 4.2b
>  I have a view which is derived from CListView. I enable label editing.
> My view has an ON_COMMAND for ID_EDIT_CLEAR.
> When editing a label, when the user presses the DEL key (which is an
> accelerator for ID_EDIT_CLEAR), instead of erasing the selected portion
> of the label (which is the original command handler), my OnEditClear is
> called.
> Before connecting ID_EDIT_CLEAR to my own command, it worked OK -
> just like it works in the explorer, for example.
> The same problem happens with other ID_EDIT_ commands.
>  If I disable ID_EDIT_CLEAR (in the ON_UPDATE_COMMAND_UI) when
> editing a label, then nothing happens when the user presses DEL.
>  My question is, how can I tell the list view that when editing, call   
the
> original edit commands (I know when I'm editing a label).

-----From: Amir Shoval 


>----------
>From: 	Dunphy, Michael[SMTP:Michael.Dunphy@HBC.honeywell.com]
>Sent: 	=E9=E5=ED =E7=EE=E9=F9=E9 09 =E9=F0=E5=E0=F8 1997 01:59
>To: 	mfc-l@netcom.com
>Cc: 	Amir Shoval
>Subject: 	Re: Problem getting original edit commands while editing a =
CLi
>stView's label
>
>You could set a flag in your LVN_BEGINLABELEDIT handler and
>clear it in your LVN_ENDLABELEDIT handler. In your handlers for
>the ID_EDIT_ commands, execute code for the original behavior
>or your new behavior, depending on the value of the flag.
>
>How exactly can I execute the code for the original behavior?=20
>As I said, I already know when I'm in edit mode. What I'm missing is, =
how
>to alter the ID_EDIT_ commands.
>
>TIA
>	Amir


-----------------------------------------------
Amir Shoval          N.C.C. Israel
amirs@ncc.co.il
-----------------------------------------------

>> Environment: Win95, VC++ 4.2b
>>  I have a view which is derived from CListView. I enable label =
editing.
>> My view has an ON_COMMAND for ID_EDIT_CLEAR.
>> When editing a label, when the user presses the DEL key (which is an
>> accelerator for ID_EDIT_CLEAR), instead of erasing the selected =
portion
>> of the label (which is the original command handler), my OnEditClear =
is
>> called.
>> Before connecting ID_EDIT_CLEAR to my own command, it worked OK -
>> just like it works in the explorer, for example.
>> The same problem happens with other ID_EDIT_ commands.
>>  If I disable ID_EDIT_CLEAR (in the ON_UPDATE_COMMAND_UI) when
>> editing a label, then nothing happens when the user presses DEL.
>>  My question is, how can I tell the list view that when editing, call =
 =20
>the
>> original edit commands (I know when I'm editing a label).
>
>



Michael -- Michael.Dunphy@HBC.honeywell.com
Sunday, January 12, 1997

 > >You could set a flag in your LVN_BEGINLABELEDIT handler and
 > >clear it in your LVN_ENDLABELEDIT handler. In your handlers for
 > >the ID_EDIT_ commands, execute code for the original behavior
 > >or your new behavior, depending on the value of the flag.
 >How exactly can I execute the code for the original behavior?
 >As I said, I already know when I'm in edit mode. What I'm missing is,
 >how to alter the ID_EDIT_ commands.

For your cut/copy/paste/undo handlers:
void CDemoView::OnEditCopy()
{
   if (m_bEditingLabel)
   {
      CEdit* pLabelEdit = GetListCtrl().GetEditControl();
      if (pLabelEdit != NULL);
         pLabelEdit->Copy();
   }
   else
   {
//    Your new code
   }
}

For your ID_EDIT_CLEAR handler:
void CDemoView::OnEditDelete()
{
   if (m_bEditingLabel)
   {
      CEdit* pLabelEdit = GetListCtrl().GetEditControl();
      if (pLabelEdit == NULL)
         return;
      int nStartChar, nEndChar;
      pLabelEdit->GetSel(nStartChar, nEndChar);
      if (nEndChar <= nStartChar)   // if no characters are selected
      {                             // delete first character after   
cursor
         nEndChar = nStartChar + 1;
         pLabelEdit->SetSel(nStartChar, nEndChar, TRUE);
      }
      pLabelEdit->ReplaceSel(_T(""));
   }
   else
   {
//    Your new code
   }
}

I know this extra coding is not the implementation you were looking for;
but I hope it meets your needs.

Cheers,

Mike  Dunphy





| Вернуться в корень Архива |