分类: WINDOWS
2006-05-03 17:51:24
BOOL TrackPopupMenuEx(
HMENU hmenu, UINT fuFlags, int x, int y, HWND hwnd, LPTPMPARAMS lptpm );
注意hwnd是接收菜单消息的窗口句柄.所以在偶的CTreevView中可以收到菜单消息.这就和一般的 WM_COMMAND消息发送给父窗口 对应上了.
在用CreateWindowEx创建窗口时指定菜单也可以.这时在窗口过程中处理WM_COMMAND即可.
还有个
BOOL SetMenu(
HWND hWnd, HMENU hMenu );
hMenu为NULL,可以清除一个窗口的菜单.如是一有效HMENU,与指定窗口关联新菜单.
还有个:IShellMenu::SetMenu原型如下:
HRESULT SetMenu(
HMENU hmenu, HWND hwnd, DWORD dwFlags );这个函数的作用如下 :This method appends a static menu to the menu band.呵呵,这个band好象是Rebar里的band,还指定了static menu,是不是动态创建的不行,只能是DLL里的资源菜单?偶没用过.不敢多说,是个思路记在这儿.下面是偶WTL用的菜单代码.很爽不是.为了以后添加菜单项方便,这里弄了个循环.CMenu m_popMenu;//初始化菜单
UINT uFlags =MF_STRING;
const int menuCount =2;
LPCTSTR lpszNewItem[menuCount] ={"删除","创建新分组"};
UINT_PTR ID[menuCount] ={ IDM_POP_DELITEM,IDM_POP_CREATEGROUP };
m_popMenu.CreatePopupMenu();
int tmp=menuCount;
while(--tmp>=0){
m_popMenu.AppendMenu(uFlags,ID[tmp],lpszNewItem[tmp]);
}