CListCtrl doesn't edit label
Matthias Bohlen -- MATTES@logotec.com
Tuesday, May 14, 1996
Environment: Windows NT, Visual C++ 4.0
Hello,
some minutes ago, I noticed that my CListCtrl-derivative will not
edit the label of an item. The control is inside a CPropertyPage and
uses message reflection through its message map.
The problem:
When the user clicks on a label, it starts to be edited
(LVN_BEGINLABELEDIT comes reflected to my derived class object).
When the user hits the "enter" key, the message LVN_ENDLABELEDIT
comes correctly to my derived class object. I can find the edited
text in the data that comes with the message. BUT: the label returns
to the string value that it had BEFORE the edit operation! What is
this??????
I temporarily threw my handler functions for begin and end label
edit out of the message map, but this did not help!
Temporary work-around:
I called SetItem() once again in my LVN_ENDLABELEDIT handler
function. This writes the edited value into the control again.
The code looks like this:
void my_list_control::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM lv_item = pDispInfo->item;
if (lv_item.pszText != NULL)
{
lv_item.mask = LVIF_TEXT;
SetItem (&lv_item);
}
*pResult = 0;
}
Can anybody tell me why this is so and how I can avoid the redundant
call to SetItem() ?
Thanks for listening...
Matthias
-------------------------------------------------------
Matthias Bohlen | Logotec Software GmbH
Phone: +49 228 64 80 520 | Chateauneufstr. 10
FAX: +49 228 64 80 525 | D-53347 Alfter, Germany
|
E-mail: mattes@logotec.com | CAD systems development
-------------------------------------------------------
Paul Mitchell -- mitchell.p@britishgas.co.uk
Thursday, May 16, 1996
[Mini-digest: 2 responses]
I think you're meant to call SetItem with the new label text in your
LVN_ENDLABELEDIT handler. It gives you the opportunity to validate the
text first. For example, is this a valid filename?
-----
Paul Mitchell
British Gas Plc
-----From: Carlos Morales Mengotti
Have you changed the style of the CListControl?.
You needed it!!.
Use a code like that.
DWORD dwStyle = GetWindowLong(m_ListadoDeNotas.m_hWnd, GWL_STYLE);
SetWindowLong(m_ListadoDeNotas.m_hWnd, GWL_STYLE, dwStyle |=
LVS_EDITLABELS);
Good luck.
--
----------------------------
Carlos Morales Mengotti
C++ & Electronic Publishing
cmengot@arrakis.es
cmengot@ran.es
Apartado 23
28210 Valdemorillo (Spain)
34 - 1 - 897.78.68
34 - 1 - 316.11.13
----------------------------
Poul A. Costinsky -- Poul@wizsoft.com
Sunday, May 19, 1996
You have to set *pResult = 1 to apply editing in the list control
(it's mistake in the MS Help about "no return value" still in VC 4.1).
Hope this helps.
Regards,
Poul.
("`-''-/").___..--''"`-._ ~~~~~~~~~~Poul A. Costinsky~~~~~~~~~~
(`6_ 6 ) `-. ( ).`-.__.`) Poul@wizsoft.com
(_Y_.)' ._ ) `._ `. ``-..-' PoulACost@msn.com
_..`--'_..-_/ /--'_.' ,'
(il).-'' (li).' ((!.- http://www.wizsoft.com/Employee/Poul/poul.htm
----------
From: Matthias Bohlen[SMTP:mattes@logotec.com]
Sent: Tuesday, May 14, 1996 4:57 PM
To: mfc-l@netcom.com
Subject: CListCtrl doesn't edit label
Environment: Windows NT, Visual C++ 4.0
Hello,
some minutes ago, I noticed that my CListCtrl-derivative will not
edit the label of an item. The control is inside a CPropertyPage and
uses message reflection through its message map.
The problem:
When the user clicks on a label, it starts to be edited
(LVN_BEGINLABELEDIT comes reflected to my derived class object).
When the user hits the "enter" key, the message LVN_ENDLABELEDIT
comes correctly to my derived class object. I can find the edited
text in the data that comes with the message. BUT: the label returns
to the string value that it had BEFORE the edit operation! What is
this??????
I temporarily threw my handler functions for begin and end label
edit out of the message map, but this did not help!
Temporary work-around:
I called SetItem() once again in my LVN_ENDLABELEDIT handler
function. This writes the edited value into the control again.
The code looks like this:
void my_list_control::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM lv_item = pDispInfo->item;
if (lv_item.pszText != NULL)
{
lv_item.mask = LVIF_TEXT;
SetItem (&lv_item);
}
*pResult = 0;
}
Can anybody tell me why this is so and how I can avoid the redundant
call to SetItem() ?
Thanks for listening...
Matthias
-------------------------------------------------------
Matthias Bohlen | Logotec Software GmbH
Phone: +49 228 64 80 520 | Chateauneufstr. 10
FAX: +49 228 64 80 525 | D-53347 Alfter, Germany
|
E-mail: mattes@logotec.com | CAD systems development
-------------------------------------------------------
Matthias Bohlen -- MATTES@logotec.com
Tuesday, May 21, 1996
[Mini-digest: 2 responses]
> You have to set *pResult = 1 to apply editing in the list control
> (it's mistake in the MS Help about "no return value" still in VC
> 4.1).
Hello Poul and all the others who gave me a response...
yes, you are right: the return value has to be == 1, then the label
is edited correctly.
Thanks a lot...
Matthias
---------- orginal problem follows here ---------------------
-----From: Dan Kirby
I forwarded your mail to the Windows SDK Doc writers so that hopefully the
documentation can get fixed. It most likely will not be fixed for the next
version of Visual C++ but probably the one after that.
--dan
| Вернуться в корень Архива
|