您的位置:首页 > 其它

关于调用系统菜单以及系统消息的问题

2007-05-17 10:29 302 查看
BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

switch(message)
{
case WM_INITDIALOG: // 初始化对话框
::SetWindowText(hDlg,"第一个对话框!");
HWND hhpro;
hhpro=::GetDlgItem(hDlg,IDC_PRO1);
::SendMessage(hhpro,PBM_SETRANGE,0,MAKELPARAM(0,20));
::SendMessage(hhpro,PBM_SETSTEP,1,0);
::SendMessage(hhpro,PBM_SETBKCOLOR,0,RGB(0,0,0xff));
::SendMessage(hhpro,PBM_SETBARCOLOR,0,RGB(0xff,0,0));
HMENU hSysMenu;
hSysMenu = ::GetSystemMenu(hDlg, FALSE);
::AppendMenu(hSysMenu, MF_SEPARATOR, 0, NULL);
::AppendMenu(hSysMenu, MF_STRING, IDM_TOPMOST, "总在最前");
break;

case WM_CONTEXTMENU:
POINT pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam);
{
// 取得系统菜单的句柄
HMENU hSysMenu = ::GetSystemMenu(hDlg, FALSE);

// 弹出系统菜单
int nID = ::TrackPopupMenu(hSysMenu,TPM_LEFTALIGN|TPM_RETURNCMD,
pt.x, pt.y, 0, hDlg, NULL);
if(nID > 0)
::SendMessage(hDlg, WM_SYSCOMMAND, nID, 0); //注意第二个参数
break;
}
case WM_SYSCOMMAND:

switch(LOWORD(wParam))
{
case IDM_TOPMOST:
::MessageBox(NULL,"top most now22222222","cap",MB_OK); //第一个地方响应菜单
break;
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_TOPMOST:
::MessageBox(NULL,"top most now","cap",MB_OK); //第二个地方响应菜单
break;
}

如果上面的::SendMessage的第二个参数为WM_SYSCOMMAND,那么下面响应自己添加的菜单的地方因该为第一个响应菜单的地方
如果上面的:SendMessage的第二个参数为WM_COMMAND,那么下面的响应自己添加的菜单的地方应该为第二个响应菜单的地方,但是这个时候默认的菜单就会没有用了,这个时候只能响应自己编写的菜单
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐