|
|
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?
|
|
|
|
|
hmm. i checked it now. Modify the code as below
if(((LPNMHDR)lParam)->code == LVN_KEYDOWN) <br />
{<br />
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)lParam;<br />
if( pLVKeyDow->wVKey == VK_DELETE )<br />
{<br />
}<br />
}
nave
|
|
|
|
|
thank you very much
|
|
|
|
|
If i delect my file and it is in unicode then TCHAR should treat as WCHAR otherwise TCHAR as CHAR
Is it possible ?
|
|
|
|
|
TCHAR only affects the strings that are in your source code. When you read a data file, you need to know what encoding was used to create the file, and use the appropriate data type (char or wchar_t or an equivalent).
|
|
|
|
|
Actually i want TCHAR as WCHAR for unicode type file otherwise CHAR.
But if i enable unicode in project setting .TCHAR always be WCHAR.
But i want for ascii file it should be CHAR.
|
|
|
|
|
you already asked this several hours ago[^], and the answer has already been given to you.
you'll be able to set TCHAR as WCHAR or CHAR only once in your code, and this will be definite for the compile time (you cannot change the meaning of TCHAR at runtime !).
if you might read unicode or ansi files, you must :
1) determine the encoding type
2) use the appropriate type to read the file (wchar_t for unicode files, char otherwise)
nothing more.
so please understand this, and find an alternative to what you're trying to design as your solution, because you're doing it wrong
|
|
|
|
|
You cannot change the meaning of a TCHAR. When reading files, it would be better for you to create two functions, one to read a unicode file, the other to read an ansi file.
#define _UNICODE
#define UNICODE
#include "tchar.h"
TCHAR *ReadAnsiFile( TCHAR* szFileName )
{
TCHAR TcharBuffer[ size of the file ];
OpenFile();
#ifdef UNICODE
char AnsiBuffer[ size of the file ];
ReadIntoAnsiBuffer();
ConvertBufferToUnicode();
#else
ReadIntoTcharBuffer();
#endif
Return TcharBuffer;
}
TCHAR *ReadUnicodeFile( TCHAR* szFileName )
{
TCHAR *TcharBuffer[ size of the file ];
OpenFile();
#ifdef UNICODE
wchar_t UnicodeBuffer[ sizeoffile ];
ReadIntoUnicodeBuffer();
ConvertToAnsi();
#else
ReadIntoTcharBuffer();
#endif
Return TcharBuffer;
}
int main()
{
TCHAR *ReadFile;
if ( FileIsUnicode )
ReadFile = ReadUnicodeFile();
else
ReadFile = ReadAnsiFile();
}
|
|
|
|
|
If you think that you can change reality by just asking the same question again, then I suggest a career in marketing.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|