CListCtrl Column identifizieren
-
Hi,
ich hab ein CListCtrl mit mehreren Spalten und Zeilen. Wenn ich nun rechtsklicke soll sich ein KontextMenu öffnen mit dem ich die Spalte umbenennen kann, leider habe ich Probleme die Spalte, bzw das SubItem zu identifizieren.
(Für andere Vorschläge bin ich genauso froh, es muss nur darauf hinaus laufen das ich duch eine Benutzeraktion den Spaltenkopf umbenennen kann)danke im vorraus
P.S. der teil des Quelletextes den es betrifft sieht in etwa so aus:
void CMyListCtrl_Excel::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menue; int* item = new int(HitTest(point)); menue.LoadMenu(IDR_EXCEL_CONTEXT); menue.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); } void CMyListCtrl_Excel::OnExcelcontextPlatzhalter() { LPLVHITTESTINFO pInfo = NULL; n = SubItemHitTest(pInfo ); LV_COLUMN col; col.pszText = "Platzhalter"; SetColumn(n,&col); }n ist hierbei immer -1
-
Mal Schaun...
-
ach genau, das hab ich inzwischen gelöst, obs elegant war ist die andere Frage aber so hab ichs gemacht:
void CMyListCtrl_Excel::OnContextMenu(CWnd* pWnd, CPoint point) { int x = click.x; int y = click.y; TRACE("--> %i %i",x,y); CHeaderCtrl* header = GetHeaderCtrl(); CRect rect; int MaxCnt = header->GetItemCount(); for (cnt=0;cnt<MaxCnt;cnt++) { header->GetItemRect(cnt,&rect); if (rect.left < x && rect.right >x) { CMenu menue; menue.LoadMenu(IDR_EXCEL_CONTEXT); menue.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); break; } } } void CMyListCtrl_Excel::OnExcelcontextPlatzhalter() { LVCOLUMN pColumn; GetColumn(cnt,&pColumn); pColumn.pszText = "Test"; SetColumn(cnt,&pColumn); } void CMyListCtrl_Excel::OnParentNotify(UINT message, LPARAM lParam) { CListCtrl::OnParentNotify(message, lParam); WORD x,y; y = lParam >> 16; x = lParam & 0xFFFF; click.x = x; click.y = y; }ich hab in dem Code noch nicht aufgeräumt kann also sein das da noch das eine oder andere überflüssige drin ist

-
Falls noch wer wie ich auf diesen älteren Thread hier stösst, und dieselbe Problemstellung hat. Mit der Ausgabe vom Menü bin ich so viel besser klargekommen:
RECT rect; this->GetWindowRect(&rect); CMenu menue; menue.LoadMenu(Menüname); menue.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,rect.left+point.x,rect.top+point.y,this);
-
LPLVHITTESTINFO pInfo = NULL; n = SubItemHitTest(pInfo );Da sist doch auch Blödsinn.
Fülle die entsprechende Struktur LVHITTESTINFO aus und übergib den Zeiger, dann bekommst Du auch ein Ergebnis.