其他分享
首页 > 其他分享> > 03. win32菜单、静态库动态库

03. win32菜单、静态库动态库

作者:互联网

win32菜单及库

菜单分类

菜单项

菜单初始化

菜单加载

窗口类中加载菜单

wndClass.lpszMenuName = MAKEINTRESOURCE(IDR_ MENU1);

创建窗口时加载

HMENU hMenu;
hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_NEW_MENU));
hwnd = CreateWindow(szAppName,"菜单示例",
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT, NULL,hMenu,hInstance,NULL) ;

动态加载

//动态菜单:
HMENU hMenu = nullptr;
hMenu = CreateMenu();//创建了一个新菜单(空菜单)
HMENU h_1 = CreateMenu();
AppendMenu(h_1, //菜单句柄,指明在哪一个菜单的尾部进行追加
0, //菜单风格
10087, //菜单项id
_T("新建(&N)\t Ctrl+N"));//菜单项名
AppendMenu(h_1, MF_SEPARATOR, 0, _T("-"));
AppendMenu(h_1, 0, 10088, _T("打开(&O)\t Ctrl+O"));
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)h_1, _T("文件(&F)"));
HMENU h_2 = CreateMenu();
//第2个参数为坐标,该参数会受到第3个参数(MF_BYCOMMAND or MF_BYPOSITION)的影响
InsertMenu(h_2, 0, MF_BYPOSITION, 10089, _T("a"));
InsertMenu(h_2, 0, MF_BYPOSITION, 10090, _T("b"));
InsertMenu(h_2, 10089, MF_BYCOMMAND, 10091,_T("c"));
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)h_2, _T("abc"));
//使菜单项是否变灰或是否激活
EnableMenuItem(h_1, 10087, MF_GRAYED);
EnableMenuItem(hMenu, 10087, MF_ENABLED);
EnableMenuItem(h_1, 0, MF_DISABLED | MF_BYPOSITION);
SetMenu(hWnd, hMenu);//更新菜单,在窗口显示更新后修改要加

菜单响应

WM_COMMAND消息响应。

右键菜单(右键点击的快捷菜单)

  1. 在资源编辑器中编辑好新的右键菜单

  2. 初始化加载,可以在WM_CREATE内或者在主消息循环之前加载。

    //g_hRMemu是在外部创建的全局变量
    g_hRMemu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1));
    
  3. 在WM_RBUTTONDOWN内可以响应

    //鼠标
    POINT pt;
    pt.x = LOWORD(lParam);//低两位是x坐标
    pt.y = HIWORD(lParam);//高两位是y坐标
    //把客户区坐标转为屏幕坐标(否则是基于整个显示器屏幕)
    ClientToScreen(hWnd, &pt);
    //以屏幕位置确定坐标位置
    GetCursorPos(&pt);
    
    HMENU tempMenu = GetSubMenu(g_hRMemu, 1);//把g_hRMenu里面的0列表示的菜单给到tempMenu
    //弹出右键菜单
    TrackPopupMenu(tempMenu,//哪一个菜单
    TPM_LEFTALIGN | TPM_TOPALIGN,//菜单风格,对齐方式(基于鼠标左上对齐)
    pt.x, pt.y,//鼠标坐标,菜单在哪个坐标开始显示
    0,
    hWnd,//窗口句柄
    nullptr);
    

静态库

动态库

静态库和动态库的区别

  1. 静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系。

  2. 动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。

优点

使用静态库的优点:

  1. 代码装载速度快,执行速度略比动态链接库快
  2. 发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题

使用动态库的优点:

  1. 更加节省内存并减少页面交换
  2. dll文件和exe文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换 DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性
  3. 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数
  4. 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和 测试

标签:03,菜单,pt,hMenu,DLL,win32,MF,菜单项
来源: https://www.cnblogs.com/WZ-1120232314/p/16369235.html