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 MengottiHave 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 KirbyI 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
| Вернуться в корень Архива |