|
Hello Comunity,
i need to update and sort a file content, that hava a first line as header?
Is there any function in C++ for that, also i have a multiline file and i want to update the line 5
wit new content!
Lines beginnst always with number that are not sorted!
thanks for any help!
break;
|
|
|
|
|
You can't simply add and remove lines from the middle of files. Treat each line line a string, each line like an array and the whole file like an array of strings. If you want to insert a string at index 10 of a sized 20 array, you would need to grow the array and move everything after index 10. This can be a time consuming process.
For the sake of speed, open the file as a memory mapped file and cast it to an array of strings.
|
|
|
|
|
Hello,
thanks for reply, yes, this can take more time!
break;
|
|
|
|
|
break; wrote: Is there any function in C++ for that, also i have a multiline file and i want to update the line 5
wit new content!
Lines beginnst always with number that are not sorted!
there is no direct or random access method.. you have to do that line by line... no alterbative .. if your file is small you can create memory mapped file random update the file in memory!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and you
|
|
|
|
|
|
hi,
Need to create context menu in win32 ,in the list view control when I right click on the listitem .
It will open the popmenu or contextmenu and give the option "Delete" .
then it will remove the file from the listview.
|
|
|
|
|
1. overide the NM_RCLICK message of list control.
2. Inside it create a CMenu object and load menu from the resource.
3. Call TrackPopupMenu of the CMenu object.
nave
|
|
|
|
|
yes , i have doing the same thing from the help but how can i get the pt.x and pt.y.
if(((LPNMHDR)lParam)->code == NM_RCLICK)
{
HMENU hmenuTrackPopup;
POINT pt;
HMENU hMenu=LoadMenu(hInst,TEXT("IDR_MENU1"));
TrackPopupMenu(hmenuTrackPopup,TPM_LEFTALIGN | TPM_RIGHTBUTTON,<code>pt.x, pt.y</code>, 0, hList, NULL);
}
due to that application break this point so how can i handle?
Amit
|
|
|
|
|
|
That point is given to you when the user clicks the mouse.
|
|
|
|
|
use
CPoint pt = GetCurrentMessage()->pt;
nave
|
|
|
|
|
Catch WM_CONTEXTMENU, it gives you the mouse location as well.
Load the menu you want to show (usually load menu from resource id, then load sub menu).
Call TrackPopupMenu.
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Thank you all nice guys!
but still the application is not give me the "delete" popup/context menu.
the code is below.
if(((LPNMHDR)lParam)->code == NM_RCLICK)
{
HMENU hmenuTrackPopup; // shortcut menu
POINT pt;
GetCursorPos(&pt);
HMENU hMenu=LoadMenu(hInst,TEXT("IDR_MENU1"));
hmenuTrackPopup= GetSubMenu(hMenu, 0);
TrackPopupMenu(hmenuTrackPopup,TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,0, hList, NULL);
}
Amit
|
|
|
|
|
i doubt the way you created the context menu in the resource. U must create the Delete menu as submenu.
eg:
Mainmenu
|
|->Delete
then u must specify the id of main menu in the LoadMenu() function
more over if u use CMenu, it will be a little easiler that the above
CMenu PopUpMenu;<br />
PopUpMenu.LoadMenu( IDR_MENU1 );<br />
CPoint pt;<br />
pt = GetCurrentMessage()->pt;<br />
PopUpMenu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN, pt.x, pt.y, this, 0 );
nave
|
|
|
|
|
which includes are necessary for CMenu because i am not working on MFC.
i have replace POINT with CPoint.but how menu ???
Amit
|
|
|
|
|
no pblm ...use sdk calls it self
POINT pt;
HMENU hMenu=LoadMenu(hInst,TEXT("IDR_MENU1"));
Point pt;
pt = GetCurrentMessage()->pt;
HMENU hSubmenu = GetSubMenu( hMenu,0 );
TrackPopupMenu( hSubmenu, TPM_LEFTALIGN, pt.x, pt.y, hList, 0 );
but dont forget to make the delete as submenu.
i found another ppblm in your code
HMENU hMenu=LoadMenu(hInst,TEXT("IDR_MENU1"));
TrackPopupMenu(hmenuTrackPopup,TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x, pt.y, 0, hList, NULL);
in the above code that you pasted earlier, you r loading the menu to hMenu. But your calling the TrackPopupMenu with handle hmenuTrackPopup
nave
|
|
|
|
|
yes thanks !
actually when I received your mail at the same time i have did it.
and when i have compare with your code its same.
Thanks once again.
|
|
|
|
|
hi nave ,
ask you one question how can i handle an event for the delete button
for that i have put my code in
<br />
case WM_COMMAND:<br />
<br />
switch(LOWORD(wParam))<br />
{ <br />
case ID_DELETE_DELETE: <br />
{<br />
int iSlected=0;<br />
iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);<br />
if(iSlected==-1)<br />
{<br />
MessageBox(hList,_T("No Items in ListView"),_T("Error"),MB_OK|MB_ICONINFORMATION);<br />
break;<br />
} <br />
ListView_DeleteItem(hList,iSlected); <br />
}<br />
<br />
break;<br />
<br />
}<br />
<br />
should it work or now i have to write somewhere else?
Amit
|
|
|
|
|
Did you run your code and what happens and also you can use of LVNI_SELECTED
|
|
|
|
|
amitmistry_petlad wrote: iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
better use LVNI_SELECTED
every thing else seems to be fine
nave
|
|
|
|
|
I have changed it but the "delete" is not working.
should i have to change anything else?
Amit
|
|
|
|
|
Whats the value of selected item?
nave
|
|
|
|
|
When i debug at the break point of the WM_COMMAND.
the control does not go there. then where should it goes ?
is it come in listview command ?
if it is call in listview notify command then how could i write ?
LOOK AT CODE:
case WM_PAINT:
hdc = BeginPaint(hDlg, &ps);
EndPaint(hDlg, &ps);
break;
case WM_NOTIFY:
{
switch(LOWORD(wParam))
{
case IDC_LIST4:
LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
if(pnm->hdr.hwndFrom == hList &&pnm->hdr.code == NM_CUSTOMDRAW)
{
return TRUE;
}
if(((LPNMHDR)lParam)->code == LVN_KEYDOWN)
{
{
int iSlected=0;
iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if(iSlected==-1)
{
MessageBox(hList,_T("No Items in ListView"),_T("Error"),MB_OK|MB_ICONINFORMATION);
break;
}
ListView_DeleteItem(hList,iSlected);
}
}
if(((LPNMHDR)lParam)->code == NM_RCLICK)
{
HMENU hMenu = LoadMenu (NULL, MAKEINTRESOURCE (IDR_MENU1));
HMENU hPopupMenu = GetSubMenu (hMenu, 0);
POINT pt;
SetMenuDefaultItem (hPopupMenu, -1, TRUE);
GetCursorPos (&pt);
TrackPopupMenu (hPopupMenu,TPM_LEFTALIGN, pt.x, pt.y, 0, hList, NULL);
DestroyMenu (hPopupMenu);
DestroyMenu (hMenu);
}
if(((LPNMHDR)lParam)->code == NM_CLICK)
{
iSelect=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if(iSelect==-1)
{
break;
}
index=iSelect;
ShowWindow(hWndinoutfiledir,SW_HIDE);
ShowWindow(hwndEncrypt,SW_HIDE);
ShowWindow(hwndSplit,SW_HIDE);
ShowWindow(hwndUpload,SW_HIDE);
ShowWindow(hwndTagEditorDlg ,SW_SHOW);
}
break;
}
}
break;
<code>
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_DELETE_DELETE:
{
int iSlected=0;
iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
if(iSlected==-1)
{
MessageBox(hList,_T("No Items in ListView"),_T("Error"),MB_OK|MB_ICONINFORMATION);
break;
}
ListView_DeleteItem(hList,iSlected);
}
break;
}
break;
}
return FALSE;
}
</code>
Amit
|
|
|
|
|
amitmistry_petlad wrote: TrackPopupMenu (hPopupMenu,TPM_LEFTALIGN, pt.x, pt.y, 0, hList, NULL);
ok i found out the pblm.
u should not specify hList in the TrackPopupMenu function. Instead specify the handle of dialog
( in your case it hWnd ).
nave
|
|
|
|
|
yes ! thanks it done,
but one more, have you seen my code for LVN_KEYDOWN .
Now i want specify it for VK_DELETE only.
right now it works but for all key i want only for "Delete" key from "keyboard"
i had comment the code for VK_DELETE .
HOW ITS WORK FINE?
|
|
|
|
|