bool wxTrunkListView::EndEditLabel(bool cancel) { #ifdef __WXMSW__ #if (wxVERSION_NUMBER >= 2901) return base::EndEditLabel(cancel); #else HWND hwnd = ListView_GetEditControl((HWND)GetHWND()); bool ok = (hwnd != NULL); if (ok) { #ifdef ListView_CancelEditLabel if (cancel && (wxApp::GetComCtl32Version() >= 600)) { ListView_CancelEditLabel((HWND)GetHWND()); return ok; } #endif if (::IsWindowVisible(hwnd)) ::SendMessage(hwnd, WM_KEYDOWN, cancel ? VK_ESCAPE : VK_RETURN, 0); else ::SendMessage(hwnd, WM_CLOSE, 0, 0); } return ok; #endif #else return false; #endif }
static BOOL Directories_OnBeginLabelEdit(HWND hDlg, NMHDR* pNMHDR) { int nType; BOOL bResult = FALSE; NMLVDISPINFO* pDispInfo = (NMLVDISPINFO*)pNMHDR; LVITEM* pItem = &pDispInfo->item; nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO)); switch (nType) { case ROM: case SAMPLE: /* Last item is placeholder for append */ if (pItem->iItem == ListView_GetItemCount(GetDlgItem(hDlg, IDC_DIR_LIST)) - 1) { if (MAX_DIRS <= DirInfo_NumDir(pDirInfo, nType)) return TRUE; /* don't edit */ Edit_SetText(ListView_GetEditControl(GetDlgItem(hDlg, IDC_DIR_LIST)), ""); } break; } return bResult; }
static BOOL OnBeginLabelEdit(LPNMLVDISPINFO pnmv) { HWND hwndEdit; hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom); if (hwndEdit == NULL) return TRUE; SendMessage(hwndEdit, EM_SETLIMITTEXT, 20, 0); return FALSE; }
void Explorerplusplus::OnFileRename(void) { HWND hFocus; if(m_bListViewRenaming) { SendMessage(ListView_GetEditControl(m_hActiveListView), WM_APP_KEYDOWN,VK_F2,0); } else { hFocus = GetFocus(); if(hFocus == m_hActiveListView) { OnListViewFileRename(); } else if(hFocus == m_hTreeView) { OnTreeViewFileRename(); } } }
BOOL WINAPI UIProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam) { static GPtr globals = NULL; // need to be static switch (wMsg) { case WM_INITDIALOG: { LV_ITEM LvItem; LV_COLUMN LstColVal, LstColProp; int i; CenterDialog(hDlg); // set up globals globals = (GPtr) lParam; gList = GetDlgItem(hDlg,1011); // get the ID of the ListView LVProcPrev = (WNDPROC)SetWindowLong(gList, GWL_WNDPROC, (DWORD)LVProc); // Here we put the info on the Column headers // this is not data, only name of each header we like memset(&LstColVal,0,sizeof(LstColVal)); // Reset Column LstColVal.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM|LVCF_ORDER; // Type of mask LstColVal.cx = 0x64; // width between each coloum LstColVal.pszText = "Value"; // LstColVal.iOrder = 1; // put editable field on right side LstColProp = LstColVal; LstColProp.pszText = "Property"; LstColProp.iOrder = 0; // Inserting Columns as much as we want ListView_InsertColumn(gList, 0, &LstColVal); ListView_InsertColumn(gList, 1, &LstColProp); // Setting common properties Of Items: memset(&LvItem,0,sizeof(LvItem)); // Reset Item Struct LvItem.mask = LVIF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; // Text Style LvItem.cchTextMax = 256; // Max size of test // allocate mem for items ListView_SetItemCount(gList, PI_MAX); // insert items for(i=0; i<PI_MAX; i++) { ListView_SetPair(gList, LvItem, i,its(gIntProps[i].value), gIntProps[i].name ); } ShowWindow(hDlg,SW_NORMAL); UpdateWindow(hDlg); return FALSE; } case WM_NOTIFY: { switch( ((LPNMHDR)lParam)->code ) { case LVN_BEGINLABELEDIT: { break; } case LVN_ENDLABELEDIT: { int iIndex; char tempstr[255]=""; HWND hEdit; iIndex = ListView_GetNextItem(gList,-1,LVNI_FOCUSED); if( iIndex != - 1 ) { //save to list hEdit = ListView_GetEditControl(gList); GetWindowText(hEdit, tempstr, sizeof(tempstr)); ListView_SetItemText(gList, iIndex,0,tempstr); //save to globals gIntProps[iIndex].value = ListView_ReadInt(gList, iIndex, 0); } break; } } break; } case WM_COMMAND: { int item; int cmd; item = COMMANDID (wParam); // WIN32 Change cmd = HIWORD(wParam); switch (item) { case ok: if (cmd == BN_CLICKED) state = STATE_AGAIN; break; case cancel: if (cmd == BN_CLICKED) state = STATE_CANCEL; break; } return FALSE; } } return FALSE; }
uint32 FolderWindow::onMessage(uint32 message, uint32 wParam, uint32 lParam) { switch (message) { case WM_CONTEXTMENU: { POINT pt; GetCursorPos(&pt); int count = ListView_GetSelectedCount(list->getHandle()); int item = ListView_GetNextItem(list->getHandle(), -1, LVNI_SELECTED); if (item >= 0) { int pos = list->getItemParam(item); while (count > 1 && item >= 0 && items[pos].type != ITEM_FOLDER && items[pos].type != ITEM_REPLAY) { item = ListView_GetNextItem(list->getHandle(), item, LVNI_SELECTED); pos = (item > 0 ? list->getItemParam(item) : -1); } EnableMenuItem(ctxMenu, ID_MENU_OPEN, count > 1 ? MF_GRAYED : MF_ENABLED); if (pos >= 0 && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) { EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_ENABLED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, count > 1 ? MF_GRAYED : MF_ENABLED); } else { EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, MF_GRAYED); } } else { EnableMenuItem(ctxMenu, ID_MENU_OPEN, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_BACKUP, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_COPY, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_DELETE, MF_GRAYED); EnableMenuItem(ctxMenu, ID_MENU_RENAME, MF_GRAYED); } ClipboardReader cbReader(CF_HDROP); EnableMenuItem(ctxMenu, ID_MENU_PASTE, cbReader.getData() ? MF_ENABLED : MF_GRAYED); int result = TrackPopupMenuEx(ctxMenu, TPM_HORIZONTAL | TPM_LEFTALIGN | TPM_RETURNCMD | TPM_NONOTIFY, pt.x, pt.y, list->getHandle(), NULL); switch (result) { case ID_MENU_OPEN: { NMITEMACTIVATE ia; memset(&ia, 0, sizeof ia); ia.hdr.code = LVN_ITEMACTIVATE; ia.hdr.hwndFrom = list->getHandle(); ia.iItem = item; onMessage(WM_NOTIFY, 0, (uint32) &ia); } break; case ID_MENU_BACKUP: { BatchDialog batch(BatchDialog::mCopy); for (int item = ListView_GetNextItem(list->getHandle(), -1, LVNI_SELECTED); item >= 0; item = ListView_GetNextItem(list->getHandle(), item, LVNI_SELECTED)) { int pos = list->getItemParam(item); if (pos >= 0 && items[pos].type == ITEM_REPLAY) batch.addReplay(items[pos].path); else if (pos >= 0 && items[pos].type == ITEM_FOLDER) batch.addFolder(items[pos].path); } batch.run(list->getHandle()); } break; case ID_MENU_COPY: case ID_MENU_PASTE: case ID_MENU_DELETE: case ID_MENU_RENAME: { NMLVKEYDOWN kd; memset(&kd, 0, sizeof kd); kd.hdr.code = LVN_KEYDOWN; kd.hdr.hwndFrom = list->getHandle(); if (result == ID_MENU_COPY) kd.wVKey = 'C'; else if (result == ID_MENU_PASTE) kd.wVKey = 'V'; else if (result == ID_MENU_DELETE) kd.wVKey = VK_DELETE; else if (result == ID_MENU_RENAME) kd.wVKey = VK_F2; onMessage(WM_NOTIFY, VK_CONTROL, (uint32) &kd); } break; case ID_MENU_FOLDER: { String newdir = "New Folder"; String fulldir = String::buildFullName(path, newdir); FileInfo fi; for (int num = 1; pathFileExists(fulldir); num++) { newdir = String::format("New Folder (%d)", num); fulldir = String::buildFullName(path, newdir); } if (CreateDirectory(fulldir, NULL)) { int pos = list->addItem(newdir, getApp()->getImageLibrary()->getListIndex("IconClosedFolder"), items.length()); ViewItem& item = items.push(); item.path = fulldir; item.pos = pos; item.type = ITEM_FOLDER; ListView_EditLabel(list->getHandle(), pos); } } break; } } break; case WM_NOTIFY: { NMHDR* pnm = (NMHDR*) lParam; if (pnm->code == LVN_ITEMACTIVATE) { NMITEMACTIVATE* pia = (NMITEMACTIVATE*) pnm; int pos = -1; if (pia->iItem >= 0) pos = list->getItemParam(pia->iItem); if (pos >= 0 && pos < items.length()) { if (items[pos].type == ITEM_UPFOLDER || items[pos].type == ITEM_FOLDER) mainWnd->pushView(new FolderViewItem(items[pos].path)); else if (items[pos].type == ITEM_REPLAY) mainWnd->pushView(new ReplayViewItem(items[pos].path)); } } else if (pnm->code == LVN_BEGINDRAG) { Array<String> sel; getSelList(sel); if (sel.length()) { HGLOBAL data = CreateFileDrop(sel); if (data) { selfDrag = true; DoDragDrop(CF_HDROP, data, DROPEFFECT_MOVE | DROPEFFECT_COPY | DROPEFFECT_LINK); selfDrag = false; } } return TRUE; } else if (pnm->code == LVN_BEGINLABELEDIT) { NMLVDISPINFO* di = (NMLVDISPINFO*) lParam; int pos = -1; if (di->item.iItem >= 0) pos = list->getItemParam(di->item.iItem); if (pos >= 0 && pos < items.length() && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) return FALSE; return TRUE; } else if (pnm->code == LVN_ENDLABELEDIT) { NMLVDISPINFO* di = (NMLVDISPINFO*) lParam; int pos = -1; if (di->item.iItem >= 0) pos = list->getItemParam(di->item.iItem); if (di->item.pszText && pos >= 0 && pos < items.length() && (items[pos].type == ITEM_FOLDER || items[pos].type == ITEM_REPLAY)) { String src = items[pos].path; String dst = String::buildFullName(String::getPath(src), di->item.pszText); src += '\0'; if (items[pos].type == ITEM_REPLAY) dst += ".w3g"; dst += '\0'; SHFILEOPSTRUCT op; memset(&op, 0, sizeof op); op.wFunc = FO_RENAME; op.pFrom = src; op.pTo = dst; if (SHFileOperationEx(&op) == 0) { items[pos].path = String::buildFullName(String::getPath(items[pos].path), di->item.pszText); if (items[pos].type == ITEM_REPLAY) items[pos].path += ".w3g"; return TRUE; } } rebuild(); return FALSE; } else if (pnm->code == LVN_COLUMNCLICK) { NMLISTVIEW* lv = (NMLISTVIEW*) lParam; bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int col = lv->iSubItem; for (int i = 0; i < col && col < colCount - 1; i++) if (!colShow[i]) col++; int pos = 0; while (pos < colCount - 1 && cfg.colSort[pos] != col && cfg.colSort[pos] != ~col) pos++; if (pos == 0) cfg.colSort[0] = ~cfg.colSort[0]; else { for (int i = pos; i > 0; i--) cfg.colSort[i] = cfg.colSort[i - 1]; cfg.colSort[0] = col; } rebuild(); } else if (pnm->code == HDN_ENDDRAG) PostMessage(list->getHandle(), WM_POSTHEADERDRAG, 0, 0); else if (pnm->code == HDN_ENDTRACK) { NMHEADER* nhdr = (NMHEADER*) pnm; bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int count = 0; int colUnpos[colCount]; for (int i = 0; i < colCount; i++) if (colShow[i]) colUnpos[count++] = i; if (nhdr->iItem >= 0 && nhdr->iItem < count && nhdr->pitem && nhdr->pitem->mask & HDI_WIDTH) { int col = colUnpos[nhdr->iItem]; cfg.colWidth[col] = nhdr->pitem->cxy; } } else if (pnm->code == LVN_KEYDOWN) { NMLVKEYDOWN* kd = (NMLVKEYDOWN*) lParam; bool controlKey = ((GetAsyncKeyState(VK_CONTROL) & 0x8000) || wParam == VK_CONTROL); if (kd->wVKey == 'C' && controlKey) { Array<String> sel; getSelList(sel); if (sel.length()) { HGLOBAL hDrop = CreateFileDrop(sel); SetClipboard(CF_HDROP, hDrop); } } else if (kd->wVKey == 'V' && controlKey) { ClipboardReader clip(CF_HDROP); HGLOBAL hDrop = clip.getData(); if (hDrop) doPaste(hDrop, DROPEFFECT_COPY, path); } else if (kd->wVKey == VK_DELETE) { Array<String> sel; getSelList(sel); if (sel.length()) { char* str = FileListToString(sel); SHFILEOPSTRUCT fileop; memset(&fileop, 0, sizeof fileop); fileop.wFunc = FO_DELETE; fileop.pFrom = str; SHFileOperationEx(&fileop); } } else if (kd->wVKey == VK_F2) { SetFocus(list->getHandle()); int sel = ListView_GetNextItem(list->getHandle(), -1, LVNI_FOCUSED); if (sel < 0) sel = 0; ListView_EditLabel(list->getHandle(), sel); } } } break; case WM_DRAGOVER: case WM_DRAGLEAVE: { LVHITTESTINFO ht; LVITEM lvi; memset(&lvi, 0, sizeof lvi); if (message == WM_DRAGOVER) { ht.pt.x = LOWORD(lParam); ht.pt.y = HIWORD(lParam); ListView_HitTest(list->getHandle(), &ht); if (ht.iItem >= 0) { lvi.iItem = ht.iItem; lvi.mask = LVIF_PARAM | LVIF_STATE; lvi.stateMask = LVIS_SELECTED; ListView_GetItem(list->getHandle(), &lvi); if (lvi.lParam < 0 || lvi.lParam >= items.length() || (items[lvi.lParam].type != ITEM_UPFOLDER && items[lvi.lParam].type != ITEM_FOLDER)) ht.iItem = -1; if (selfDrag && (lvi.state & LVIS_SELECTED)) ht.iItem = -1; } if (wParam && selfDrag && ht.iItem == -1 && *(DWORD*) wParam == DROPEFFECT_MOVE) *(DWORD*) wParam = DROPEFFECT_NONE; } else ht.iItem = -1; if (ht.iItem != list->highlight) { lvi.mask = LVIF_STATE; lvi.stateMask = LVIS_DROPHILITED; if (list->highlight >= 0) { lvi.iItem = list->highlight; ListView_SetItem(list->getHandle(), &lvi); } if (ht.iItem >= 0) { lvi.state = LVIS_DROPHILITED; lvi.iItem = ht.iItem; ListView_SetItem(list->getHandle(), &lvi); } list->highlight = ht.iItem; } } break; case WM_DRAGDROP: if (lParam == DROPEFFECT_MOVE || lParam == DROPEFFECT_COPY) { String opTo = path; if (list->highlight >= 0) { int param = list->getItemParam(list->highlight); if (param >= 0 && param < items.length() && (items[param].type == ITEM_UPFOLDER || items[param].type == ITEM_FOLDER)) opTo = items[param].path; } doPaste((HGLOBAL) wParam, lParam, opTo); } return 0; case WM_POSTHEADERDRAG: { bool colShow[colCount] = {true, cfg.selColumns & COL_SAVED, cfg.selColumns & COL_SIZE, cfg.selColumns & COL_NAME, cfg.selColumns & COL_RATIO, cfg.selColumns & COL_LENGTH, cfg.selColumns & COL_MODE }; int count = 0; int colUnpos[colCount]; for (int i = 0; i < colCount; i++) if (colShow[i]) colUnpos[count++] = i; int colOrder[colCount]; ListView_GetColumnOrderArray(list->getHandle(), count, colOrder); int pos = 0; for (int i = 0; i < colCount; i++) if (colShow[cfg.colOrder[i]]) cfg.colOrder[i] = colUnpos[colOrder[pos++]]; } break; case WM_REBUILDLIST: if (ListView_GetEditControl(list->getHandle()) == NULL) rebuild(); break; case WM_UPDATELISTITEM: updateListItem(wParam, lParam); break; default: return M_UNHANDLED; } return 0; }
//================================About dialog window=============================// BOOL CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { // This Window Message will close the dialog // //============================================// case WM_CLOSE: { PostQuitMessage(0); EndDialog(hWnd,0); // kill dialog } break; case WM_NOTIFY: { switch(LOWORD(wParam)) { case IDC_LIST: LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam; if(pnm->hdr.hwndFrom == hList &&pnm->hdr.code == NM_CUSTOMDRAW) { SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)ProcessCustomDraw(lParam)); return TRUE; } if(((LPNMHDR)lParam)->code == NM_DBLCLK) { char Text[255]={0}; char Temp[255]={0}; char Temp1[255]={0}; int iSlected=0; int j=0; iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); if(iSlected==-1) { MessageBox(hWnd,"No Items in ListView","Error",MB_OK|MB_ICONINFORMATION); break; } memset(&LvItem,0,sizeof(LvItem)); LvItem.mask=LVIF_TEXT; LvItem.iSubItem=0; LvItem.pszText=Text; LvItem.cchTextMax=256; LvItem.iItem=iSlected; SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem); sprintf(Temp1,Text); for(j=1;j<=5;j++) { LvItem.iSubItem=j; SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem); sprintf(Temp," %s",Text); lstrcat(Temp1,Temp); } MessageBox(hWnd,Temp1,"test",MB_OK); } if(((LPNMHDR)lParam)->code == NM_CLICK) { iSelect=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); if(iSelect==-1) { break; } index=iSelect; flag=1; } if(((LPNMHDR)lParam)->code == LVN_BEGINLABELEDIT) { //Editing=1; hEdit=ListView_GetEditControl(hList); GetWindowText(hEdit, tempstr, sizeof(tempstr)); } if(((LPNMHDR)lParam)->code == LVN_ENDLABELEDIT) { int iIndex; char text[255]=""; tchar = (TCHAR)msg.wParam; if(tchar == 0x1b) escKey=1; iIndex=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); if(iIndex==-1) break; LvItem.iSubItem=0; if(escKey==0) { LvItem.pszText=text; GetWindowText(hEdit, text, sizeof(text)); SendMessage(hList,LVM_SETITEMTEXT,(WPARAM)iIndex,(LPARAM)&LvItem); } else{ LvItem.pszText=tempstr; SendMessage(hList,LVM_SETITEMTEXT,(WPARAM)iIndex,(LPARAM)&LvItem); escKey=0; } //Editing=0; } break; } } case WM_PAINT: { return 0; } break; // This Window Message is the heart of the dialog // //================================================// case WM_INITDIALOG: { int i; char Temp[255]; LVBKIMAGE plvbki={0}; char url[]="C:\\a.jpg"; InitCommonControls(); hList=GetDlgItem(hWnd,IDC_LIST); // get the ID of the ListView memset(&plvbki,0,sizeof(plvbki)); plvbki.ulFlags=LVBKIF_SOURCE_URL; plvbki.pszImage=url; plvbki.xOffsetPercent=40; plvbki.yOffsetPercent=15; OleInitialize(NULL); SendMessage(hList,LVM_SETTEXTBKCOLOR, 0,(LPARAM)CLR_NONE); SendMessage(hList,LVM_SETBKIMAGE,0,(LPARAM)(LPLVBKIMAGE)&plvbki); SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT); // Set style SendMessageA(hWnd,WM_SETICON,(WPARAM) 1,(LPARAM) LoadIconA(hInst,MAKEINTRESOURCE(IDI_ICON1))); // Here we put the info on the Coulom headers // this is not data, only name of each header we like memset(&LvCol,0,sizeof(LvCol)); // Reset Coluom LvCol.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; // Type of mask LvCol.cx=0x28; // width between each coloum LvCol.pszText="Item"; // First Header LvCol.cx=0x42; // Inserting Couloms as much as we want SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol); // Insert/Show the coloum LvCol.pszText="Sub Item1"; // Next coloum SendMessage(hList,LVM_INSERTCOLUMN,1,(LPARAM)&LvCol); // ... LvCol.pszText="Sub Item2"; // SendMessage(hList,LVM_INSERTCOLUMN,2,(LPARAM)&LvCol); // LvCol.pszText="Sub Item3"; // SendMessage(hList,LVM_INSERTCOLUMN,3,(LPARAM)&LvCol); // LvCol.pszText="Sub Item4"; // SendMessage(hList,LVM_INSERTCOLUMN,4,(LPARAM)&LvCol); // LvCol.pszText="Sub Item5"; // SendMessage(hList,LVM_INSERTCOLUMN,5,(LPARAM)&LvCol); // ...same as above memset(&LvItem,0,sizeof(LvItem)); // Reset Item Struct // Setting properties Of Items: LvItem.mask=LVIF_TEXT; // Text Style LvItem.cchTextMax = 256; // Max size of test LvItem.iItem=0; // choose item LvItem.iSubItem=0; // Put in first coluom LvItem.pszText="Item 0"; // Text to display (can be from a char variable) (Items) SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem); // Send to the Listview for(i=1;i<=5;i++) // Add SubItems in a loop { LvItem.iSubItem=i; sprintf(Temp,"SubItem %d",i); LvItem.pszText=Temp; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems } // lets add a new Item: LvItem.iItem=1; // choose item LvItem.iSubItem=0; // Put in first coluom LvItem.pszText="Item 1"; // Text to display (can be from a char variable) (Items) SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem); // Send to the Listview for(i=1;i<=5;i++) // Add SubItems in a loop { LvItem.iSubItem=i; sprintf(Temp,"SubItem %d",i); LvItem.pszText=Temp; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter etxt to SubItems } //ListView_SetItemState(hList,0,LVIS_SELECTED ,LVIF_STATE); ShowWindow(hWnd,SW_NORMAL); UpdateWindow(hWnd); while(TRUE) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { /* if(msg.message==WM_CHAR) { tchar = (TCHAR)msg.wParam; if(tchar == 0x1b) escKey=1; } */ if(msg.message==WM_QUIT)// killing while looking for a message { break; } TranslateMessage(&msg); DispatchMessage(&msg); } } } break; // This Window Message will control the dialog // //==============================================// case WM_COMMAND: { switch(LOWORD(wParam)) // what we press on? { case IDC_ADDITEM: { int iItem; char ItemText[100]; iItem=SendMessage(hList,LVM_GETITEMCOUNT,0,0); GetDlgItemText(hWnd,IDC_ADD,ItemText,100); if((lstrlen(ItemText))==0) { MessageBox(hWnd,"Please Write Some Text","Error",MB_OK|MB_ICONINFORMATION); break; } LvItem.iItem=iItem; // choose item LvItem.iSubItem=0; // Put in first coluom LvItem.pszText=ItemText; // Text to display (can be from a char variable) (Items) SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem); // Send to the Listview } break; case IDC_ADDSUBITEM: { int Item,i; char SubItemText[100]; Item=SendMessage(hList,LVM_GETITEMCOUNT,0,0); GetDlgItemText(hWnd,IDC_ADDSUB,SubItemText,100); if((lstrlen(SubItemText))==0) { MessageBox(hWnd,"Please Write Some Text","Error",MB_OK|MB_ICONINFORMATION); break; } LvItem.iItem=Item-1; // choose item for(i=1;i<=5;i++) { LvItem.pszText=SubItemText; // Text to display (can be from a char variable) (Items) LvItem.iSubItem=i; // Put in first coluom SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); } } break; case IDC_BOTH: { int itemIndex,j; char iSubItemText[100]=""; char iItemText[100]=""; itemIndex=SendMessage(hList,LVM_GETITEMCOUNT,0,0); GetDlgItemText(hWnd,IDC_ADD,iItemText,100); GetDlgItemText(hWnd,IDC_ADDSUB,iSubItemText,100); if((lstrlen(iSubItemText) && lstrlen(iItemText))==0) { MessageBox(hWnd,"Please Write Some Text","Error",MB_OK|MB_ICONINFORMATION); break; } LvItem.iItem=itemIndex; // choose item LvItem.iSubItem=0; LvItem.pszText=iItemText; SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem); for(j=1;j<=5;j++) { LvItem.pszText=iSubItemText; // Text to display (can be from a char variable) (Items) LvItem.iSubItem=j; // Put in first coluom SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); } } break; case IDC_DELALL: SendMessage(hList,LVM_DELETEALLITEMS,0,0); break; case IDC_DELSELITEM: if(flag) SendMessage(hList,LVM_DELETEITEM,iSelect,0); flag=0; break; case IDC_RENAME: { if(index==-1) { MessageBox(hWnd,"Nothing to rename","error",MB_OK); } else{ //Editing=1; SendMessage(hList,LVM_EDITLABEL ,(WPARAM)index,(LPARAM)0); } } break; case IDC_SELECT_ALL: { ListView_SetItemState(hList, -1, 0, LVIS_SELECTED); // deselect all SendMessage(hList,LVM_ENSUREVISIBLE ,(WPARAM)-1,FALSE); // Send to the Listview ListView_SetItemState(hList,-1,LVIS_SELECTED ,LVIS_SELECTED); } break; case IDC_LAST_ITEM: { int items; items = SendMessage(hList,LVM_GETITEMCOUNT ,(WPARAM)0,(LPARAM)0); items--; ListView_SetItemState(hList, -1, 0, LVIS_SELECTED); // deselect all SendMessage(hList,LVM_ENSUREVISIBLE ,(WPARAM)items,FALSE); // Send to the Listview ListView_SetItemState(hList,items,LVIS_SELECTED ,LVIS_SELECTED); ListView_SetItemState(hList,items,LVIS_FOCUSED ,LVIS_FOCUSED); } break; } } break; default: { return FALSE; } } return TRUE; }