关于调用系统菜单以及系统消息的问题
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,那么下面的响应自己添加的菜单的地方应该为第二个响应菜单的地方,但是这个时候默认的菜单就会没有用了,这个时候只能响应自己编写的菜单
{
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,那么下面的响应自己添加的菜单的地方应该为第二个响应菜单的地方,但是这个时候默认的菜单就会没有用了,这个时候只能响应自己编写的菜单
相关文章推荐
- shareSDK分享平台分享内容出去显示“来自XXX”的问题及其如何修改分享菜单的背景图片以及调用无UI方法自定义UI分享
- 关于onConfigurationChanged以及onConfigurationChanged 未被调用的问题
- win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
- 关于Android 4.4(华为)调用系统相机问题
- 关于arguments,caller以及匿名函数调用的问题
- 关于“无法显式调用运算符或访问器”的问题以及Reflector反编译dll文件再生成dll文件的问题
- Android调用系统相机拍照像素太低以及内存溢出问题
- 关于SecureCRT的安装和破解问题以及xp系统的串口问题
- 拦截系统调用的实现以及要注意的问题
- 将C语言编译成DLL并用C#进行调用以及关于从C#传输中文路径到C的DLL中打开文件的问题
- 关于android6.0系统源码中出现DeskClock调用v7包中ActionBar其无法用物理按键控制其Tab上焦点的问题
- 关于小米4 以及酷派手机安卓开发 调用相机相册适配的问题
- 关于android 调用系统图片浏览器并返回图片路径问题
- 关于标签栏(UITabBarItem)的系统颜色和图片以及标题颜色的问题
- 关于SecureCRT的安装和破解问题以及xp系统的串口问题
- 关于WM_MOUSEHOVER和WM_MOUSELEAVE消息的用法以及按钮的变色问题!
- Android关于创建AIDL以及调用AIDL的问题
- 关于struts2.5以后 遇到的几点改变以及动态调用方法问题
- 外部系统调用EAS 凭证webserivce标准接口问题总结以及流程
- 关于三星手机调用系统相机之后activity被销毁导致数据丢失问题