win32强化练习4.1_更改别人的菜单

来源:互联网 发布:js单选框单击事件 编辑:程序博客网 时间:2024/05/22 12:28

菜单是非常的常用的~

常规的静态的菜单(不需要变化的)可以直接由资源编辑器在.rc文件中建立,然后在程序的注册窗口类中指明,例如:

wcex.lpszMenuName= MAKEINTRESOURCE (IDC_WINMENU);

或者在窗口创建时指定:

HMENU hMenu = LoadMenu(hInst, MAKEINTRESOURCEA(IDR_MENU1));HWND hwnd = CreateWindow("Main","wnd",WS_OVERLAPPEDWINDOW, 0,0,400,300,NULL,hMenu/*菜单所在*/, hInst, NULL);

而当我们需要动态的添加菜单时,我们需要在.cpp文件中自己来创建菜单项:

HMENU hRC = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1));         HMENU hPlugin = CreatePopupMenu();         AppendMenu(hPlugin, MF_STRING, 2011, "File2");         AppendMenu(hPlugin, MF_STRING, 2012, "File3");         AppendMenu(hRC, MF_POPUP, (UINT)hPlugin, "Plugins");     SetMenu(hwndDlg, hRC);
这样已经能够基本搞定自己程序里的菜单了!

而我们的这个练习是去搞定别人程序的菜单,以notepad记事本为例。步骤如下:

1. 打开notepad,打开SPY++,得到Notepad的窗口句柄,例如:


2. 建立一个按钮,点击获取notepad的窗口句柄,然后获取其菜单句柄,接着获取其菜单子项的句柄

3. 使用ModifyMenu更改某个菜单项

4. 使用AppendMenu添加菜单项

2.

case WM_CREATE:CreateWindow("BUTTON", "CHANGE", WS_CHILD | WS_VISIBLE, 10, 10, 80 , 25, hwnd, HMENU(10031), g_hInst, NULL);break;
case 10031:{HWND hDes = (HWND)0x005D0BBE;HMENU hMenu = GetMenu(hDes);HMENU hSub = GetSubMenu(hMenu, 3);
3. 

ModifyMenu(hSub, 0/*更改第几项*/, MF_BYPOSITION, 0, TEXT("被我改了"));AppendMenu(hSub, MF_STRING, 1009, "增加的");AppendMenu(hSub, MF_STRING, 1009, "2次增加的");}break;
可以不断调整程序对菜单进行添加和更改,结果如图:








0 0
原创粉丝点击