第三篇 菜单、图标与光标的使用
来源:互联网 发布:人工智能股票龙头科大 编辑:程序博客网 时间:2024/05/29 14:47
这篇博文将会简单介绍下菜单、图标与光标在Windows窗口程序中如何使用。
一、菜单、图标、光标都是作为资源在资源文件中定义的。
1、菜单的定义方法:
菜单ID MENU [DISCARDABLE]
BEGIN
菜单项定义
END
菜单项定义:
定义普通菜单项:
MENUITEM 菜单文字 ,命令ID [,选项列表]
定义分割线:
MENUITEM SEPARATOR
定义弹出式菜单:
POPUP 菜单文字 [,选项列表]
BEGIN
菜单项定义
END
2、图标与光标的定义
图标ID ICON [DISCARDABLE] 图标文件名
光标ID CURSOR [DISCARDABLE] 光标文件名
3、注意
所谓的XXID都是用户自定义的一些数值,范围是0~0FFFFH
DISCARDABLE是内存选项,表示在不用时可以自动释放内存
4、例子
#include <resource.h>//菜单选项#defineIDM_MAIN0x1000#define IDM_ICOHEAD0x2000#defineIDM_ICOARROW0x2001#defineIDM_CURDINOSAUR0x2002#defineIDM_CURHAND0x2003//图标#defineICON_HEAD0x3000#define ICON_ARROW0x3001//光标#defineCUR_HAND0x4000ICON_ARROWicondiscardable "Arrow.ico"ICON_HEADicondiscardable "Head.ico"CUR_HANDcursordiscardable "Hand.cur"IDM_MAINmenudiscardableBEGINpopup"图标与光标选项(&C)..."BEGINmenuitem"头像图标",IDM_ICOHEADmenuitem"箭头图标",IDM_ICOARROWmenuitemseparatormenuitem"恐龙光标",IDM_CURDINOSAURmenuitem"手掌光标",IDM_CURHANDENDEND
二、在主窗口程序中使用菜单、图标、光标资源
1、如何建立窗口:第二篇 第一个窗口程序
2、使用方法
①使用菜单
首先,在获得模块句柄后将菜单(由菜单ID—IDM_MAIN指定)加载进应用程序
invokeGetModuleHandle,NULLmovhInstance,eaxinvokeLoadMenu,hInstance,IDM_MAINmovhMenu,eax
其次,在建立窗口时将菜单句柄hMenu作为参数传递进去
invokeCreateWindowEx,WS_EX_CLIENTEDGE,\offset szClassName,offset szClassName,\WS_OVERLAPPEDWINDOW,\200,200,300,200,\NULL,hMenu,hInstance,NULL
②使用光标与图标的方法
在调用CreateWindowEx建立窗口时,在函数返回前系统会向窗口程序发出WM_CREATE消息。我们可以
此时加载光标与图标资源。然后紧接着调用SendMessage函数将缺省建立的图标与光标类型发送给窗口程
序处理。
.ifeax == WM_CREATEinvokeLoadIcon,hInstance,ICON_HEADmovhIconHead,eaxinvokeLoadIcon,hInstance,ICON_ARROWmovhIconArrow,eaxinvokeLoadCursor,hInstance,CUR_HANDmovhCurHand,eaxinvokeLoadCursorFromFile,addr szCursorFilemovhCurDinosaur,eaxinvokeSendMessage,hWnd,WM_COMMAND,IDM_ICOHEAD,NULLinvokeSendMessage,hWnd,WM_COMMAND,IDM_CURHAND,NULL
3、例子
.386.model flat,stdcalloption casemap:noneincludewindows.incincludeuser32.incincludelibuser32.libincludekernel32.incincludelibkernel32.lib;下面的equ定义千万不要写成0x...;菜单ID的定义IDM_MAINequ1000hIDM_ICOHEADequ2000hIDM_ICOARROWequ2001hIDM_CURDINOSAURequ2002hIDM_CURHANDequ2003h;图标ID的定义ICON_HEADequ3000hICON_ARROWequ3001h;静态光标文件的定义CUR_HANDequ4000h;句柄定义.data?hInstancedd?hMenudd?hWinMaindd?hCurDinosaurdd?hCurHanddd?hIconHeaddd?hIconArrowdd?.constszCursorFiledb'Dinosaur.ani',0 ;存储于磁盘上的动态光标文件 szClassNamedb'Icon and Cursor!',0.code_QuitprocinvokeDestroyWindow,hWinMaininvokePostQuitMessage,NULLret_Quitendp_WinMainProcprocuses ebx edi esi hWnd,uMsg,wParam,lParammoveax,uMsg.ifeax == WM_CREATEinvokeLoadIcon,hInstance,ICON_HEADmovhIconHead,eaxinvokeLoadIcon,hInstance,ICON_ARROWmovhIconArrow,eaxinvokeLoadCursor,hInstance,CUR_HANDmovhCurHand,eaxinvokeLoadCursorFromFile,addr szCursorFilemovhCurDinosaur,eaxinvokeSendMessage,hWnd,WM_COMMAND,IDM_ICOHEAD,NULLinvokeSendMessage,hWnd,WM_COMMAND,IDM_CURHAND,NULL.elseifeax == WM_COMMANDmoveax,wParammovzxeax,ax.ifeax == IDM_ICOHEAD;ICON_BIG是WM_SETICON中预定义的invokeSendMessage,hWnd,WM_SETICON,ICON_BIG,hIconHead invokeCheckMenuRadioItem,hMenu,IDM_ICOHEAD,IDM_ICOARROW,\IDM_ICOHEAD,MF_BYCOMMAND.elseifeax == IDM_ICOARROW;ICON_SMALL是WM_SETICON中预定义的invokeSendMessage,hWnd,WM_SETICON,ICON_SMALL,hIconArrow invokeCheckMenuRadioItem,hMenu,IDM_ICOHEAD,IDM_ICOARROW,\IDM_ICOARROW,MF_BYCOMMAND.elseifeax == IDM_CURDINOSAURinvokeSetClassLong,hWnd,GCL_HCURSOR,hCurDinosaurinvokeCheckMenuRadioItem,hMenu,IDM_CURDINOSAUR,IDM_CURHAND,\IDM_CURDINOSAUR,MF_BYCOMMAND.elseifeax == IDM_CURHANDinvokeSetClassLong,hWnd,GCL_HCURSOR,hCurHandinvokeCheckMenuRadioItem,hMenu,IDM_CURDINOSAUR,IDM_CURHAND,\IDM_CURHAND,MF_BYCOMMAND.endif.elseifeax == WM_CLOSEinvoke_Quit.elseinvokeDefWindowProc,hWnd,uMsg,wParam,lParamret.endifmoveax,0ret_WinMainProcendp_WinMainproclocal@stWndClass:WNDCLASSEXlocal@stMsg:MSGinvokeGetModuleHandle,NULLmovhInstance,eaxinvokeLoadMenu,hInstance,IDM_MAINmovhMenu,eaxinvokeRtlZeroMemory,addr @stWndClass,sizeof @stWndClasspushhInstancepop@stWndClass.hInstancemov@stWndClass.cbSize,sizeof @stWndClassmov@stWndClass.style,CS_HREDRAW or CS_VREDRAWmov@stWndClass.lpfnWndProc,offset _WinMainProcmov@stWndClass.hbrBackground,COLOR_WINDOW + 1mov@stWndClass.lpszClassName,offset szClassNameinvokeRegisterClassEx,addr @stWndClassinvokeCreateWindowEx,WS_EX_CLIENTEDGE,\offset szClassName,offset szClassName,\WS_OVERLAPPEDWINDOW,\200,200,300,200,\NULL,hMenu,hInstance,NULLmovhWinMain,eaxinvokeShowWindow,hWinMain,SW_SHOWNORMALinvokeUpdateWindow,hWinMain.whileTRUEinvokeGetMessage,addr @stMsg,NULL,0,0.break.ifeax == 0invokeTranslateMessage,addr @stMsginvokeDispatchMessage,addr @stMsg.endwret_WinMainendpstart:invoke_WinMaininvokeExitProcess,NULLendstart
三、代码中图标与光标文件下载
图标与光标文件
四、关于本篇博文的例子
程序运行起来后,选择菜单中的项目可以看到图标与光标的改变。
- 第三篇 菜单、图标与光标的使用
- 关于图标和光标资源的使用
- Windows 系统使用的各种图标、光标
- Windows程序设计之图标光标菜单
- 简单的第三方图标使用
- 第三篇:menu菜单的创建以及使用
- 菜单 有图标的菜单
- 第三章 光标的来袭
- Windows编程基础 第六章 系统菜单 上下文相关菜单 图标 光标 字符串 菜单 加速键
- Ubuntu下与菜单和图标相关的几个文件夹
- Ubuntu下与菜单和图标相关的几个文件夹
- 修改窗口的图标 修改视窗光标
- MFC更改对话框的图标以及光标
- windows程序设计(16):使用自己的图标,光标和字符串表
- 对话框与菜单的使用
- 光标的使用
- 光标的使用
- MySQL光标的使用
- 堆与堆排序
- 那些动物可以看见紫外线,红外线
- 李开复:算法的力量
- asp.net<Web版> ---将excel表数据导入到数据库问题<一>---未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序
- 确定比赛名次
- 第三篇 菜单、图标与光标的使用
- java的getClass()函数
- 黑马程序员_c#面向对象基础:属性
- 用p6spy完整显示hibernate的SQL语句_转
- [Leetcode] Combination Sum II
- http mock service
- 面向对象
- 解决OpenCv中没有找到tbb_debug.dll的方法+OpenCv项目环境配置
- java_选择排序