当然,如果POPPAD2程序不使用子窗口编辑控件,那么我们将面临一些问题,这涉及如何完成「Edit」菜单中的「Undo」、「Cut」、「Copy」、「Paste」、「Clear」和「Select All」选项。正是编辑控件使得这种处理变得容易,因为对于每一个选项我们只需向编辑控件发送一个消息即可:

case IDM_UNDO :

SendMessage (hwndEdit, WM_UNDO, 0, 0) ;

return 0 ;

case IDM_CUT :

SendMessage (hwndEdit, WM_CUT, 0, 0) ;

return 0 ;

case IDM_COPY :

SendMessage (hwndEdit, WM_COPY, 0, 0) ;

return 0 ;

case IDM_PASTE :

SendMessage (hwndEdit, WM_PASTE, 0, 0) ;

return 0 ;

case IDM_DEL :

SendMessage (hwndEdit, WM_DEL, 0, 0) ;

return 0 ;

case IDM_SELALL :

SendMessage (hwndEdit, EM_SETSEL, 0, -1) ;

return 0 ;

注意,我们可以更进一步简化这些处理-只要使IDM_UNDO、IDM_CUT等等的值等于相对应的窗口消息WM_UNDO、WM_CUT的值。

「File」弹出式菜单上的「About」选项启动一个简单的消息框:

case IDM_ABOUT :

MessageBox (hwnd, TEXT ("POPPAD2 (c) Charles Petzold, 1998"),

szAppName, MB_OK | MB_ICONINFORMATION) ;

return 0 ;

在下一章中,我们将把它变成一个对话框。当您从菜单中选择「Help」选项或者按下F1快捷键时,同样可以启动一个消息框。

「Exit」选项向窗口消息处理程序发送一个WM_CLOSE消息:

case IDM_EXIT :

SendMessage (hwnd, WM_CLOSE, 0, 0) ;

return 0 ;

这正是DefWindowProc收到一个wParam等于SC_CLOSE的WM_SYSCOMMAND消息时所完成的工作。

在前面的那些程序中,我们没有在窗口消息处理程序中处理WM_CLOSE消息,而只是简单地把它送给DefWindowProc。DefWindowProc对WM_CLOSE的处理非常简单:呼叫DestroyWindow函数。可以不把WM_CLOSE消息送给DefWindowProc,而让POPPAD2来处理它。这个事实到目前为止并不重要,但是在第十一章中当POPPAD可以真正编辑文字时,它就变得非常重要了。

case WM_CLOSE :

if (IDYES == AskConfirmation (hwnd))

DestroyWindow (hwnd) ;

return 0 ;

AskConfirmation是POPPAD2中的一个函数,它显示一个请求确认关闭程序的消息框:

AskConfirmation (HWND hwnd)

{

return MessageBox (hwnd, TEXT ("Really want to close Poppad2?"),

szAppName, MB_YESNO | MB_ICONQUESTION) ;

}

如果选择了Yes按钮的话,消息框(以及AskConfirmation函数)将传回IDYES。只有这样,程序才会呼叫DestroyWindow,否则,程序不会结束。

如果要在程序结束之前确认使用者真的要结束程序,那么您还必须处理WM_QUERYENDSESSION消息。当使用者要关闭Windows时,Windows开始向每个窗口消息处理程序发送一个WM_QUERYENDSESSION消息。如果有任何一个窗口消息处理程序处理这个消息后传回0,那么Windows将不会结束。我们如下处理了WM_QUERYENDSESSION:

case WM_QUERYENDSESSION :

if (IDYES == AskConfirmation (hwnd))

return 1 ;

else

return 0 ;

如果要在程序结束之前要求使用者的确认,必须处理WM_CLOSE和WM_QUERYENDSESSION这两个消息,这就是为什么我们使POPPAD2中的「Exit」菜单选项只向窗口消息处理程序发送一个WM_CLOSE消息的原因。这样做,我们避免了在别处进行请求确认的动作。

如果要处理WM_QUERYENDSESSION消息,那么您也许还会对WM_ENDSESSION消息感兴趣。Windows把这个消息发送给先前收到WM_QUERYENDSESSION消息的每个窗口消息处理程序。如果由于另一个程序从WM_QUERYENDSESSION传回了0而不能结束Windows的执行,那么WM_ENDSESSION的wParam参数为0。WM_ENDSESSION消息实际上回答了这个问题:我告诉过Windows可以把我结束掉,但是我真的被结束掉了吗?

尽管在POPPAD2的「File」菜单中我加上了常见的「New」、「Open」、「Save」和「Save As」选项,但是它们现在并不起作用。要处理这些命令,我们需要使用对话框。现在是讨论对话框的时机,也是您准备学习它们的时候了。

c语言菜单 键盘,三、Windows键盘快捷键—处理菜单项相关推荐

  1. 180126—【Mac OS X虚拟机】使用备忘录—Mac键盘与windows键盘的对应

    俗话说:在没有对比的情况下,对一个东西的认知总是不够全面而透彻的.对比,在大部分情况下会打破许多你习以为常,想当然的应当,给你一个从未有过的看待事物.思考问题的角度.方法. 好吧我承认这是我说的. 当 ...

  2. Android UI设计 下拉菜单Spinner用法 动态添加删除Spinner菜单项

    Spinner是一种下接菜单,类似HTML中的select标签,点击后弹出一个对话框,显示几个供选择的选项,手机屏幕大小有限,如果都用RadioGroup单选按钮,会占用很大的空间.今天的例子最终效果 ...

  3. c语言菜单 键盘,三、Windows键盘快捷键—启用菜单项

    窗口消息处理程序的工作包括启用和无效化「Edit」菜单中的选项,这项工作在处理WM_INITMENUPOPUP时完成.首先,程序检查是否要显示「Edit」弹出式菜单.因为菜单里「Edit」的位置索引( ...

  4. C语言笔记 第三章 键盘输入与输出

    文章目录 1 printf() 1.1 整型 1.2 字符型 1.3 浮点型 1.4 其他 1.4.1 标志 1.4.2 输出最小宽度 1.4.3 精度 1.4.4 类型长度 1.5 转义字符 2 s ...

  5. Mac键盘和Windows键盘对应表

    Boot Camp: Apple Keyboard (Ultra–thin USB) keyboard mapping in Windows Summary Learn how Boot Camp m ...

  6. Java菜单(菜单条、菜单和菜单项)

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...

  7. 13、Java菜单条、菜单、菜单项

    13.Java菜单条.菜单.菜单项 一般用Java做界面时,都得牵涉到菜单条.菜单.菜单项的设计.菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置. 13.1.菜单条(Menubar) Frame ...

  8. 如何在系统菜单中添加一个自己的菜单项

    CSDN地址: http://topic.csdn.net/u/20080722/18/8517e419-7788-4d1c-9029-7a806f5da46c.html 全文: 如题,目前我要做的就 ...

  9. bootstrap 导航菜单 折叠位置_python测试开发django44.xadmin自定义菜单项

    前言 xadmin后台的菜单项是放到一个app下的,并且里面的排序是按字母a-z排序,有时候我们需要划分多个项,需要自定义菜单列表,可以通过重写CommAdminView类实现. xadmin后台提供 ...

最新文章

  1. 用ESP32玩转真彩屏
  2. OA学习笔记-006-SPRING2.5与hibernate3.5整合
  3. Chrome OS 开发者版现可备份和恢复 Linux 容器
  4. LVGL学习记录:Roller滚轮
  5. 项目日报模板_能力再强也要常向领导汇报工作,掌握万能模板,不做职场小透明...
  6. sohutv cachecloud启动
  7. STM32外设驱动总结(公司项目需要)
  8. 计算机网络的三级结构是什么,计算机的三级存储结构是什么
  9. 电脑回收站清空了能恢复吗?
  10. 《平安夜》钢琴谱上的虚线表示什么?
  11. 货郎担问题(TSP问题)
  12. linux与windows内核哪个难学,国产操作系统为何都基于Linux内核?又和Windows像?
  13. JAVA中下载文件名含有中文乱码一种少见的解决方案
  14. (转)Linux下管道的原理
  15. Mysql-如何建表更符合业务
  16. 备注: ubt 16.04 安装 gtx 1060 --- 成功运行 tensorflow - gpu
  17. OpenCV实践:去除票据中的红色印章
  18. 电脑网易云音乐,拿下华研,网易云音乐终于解决1%的大难题,可阿里音乐以后咋办?...
  19. PMP项目管理 考试题型,六大解题原则定要牢牢记住!
  20. Android的招聘要求

热门文章

  1. investment
  2. word中插入endnote 为什么会是大括号,而且后面没有文献
  3. CSSHTMLREM制作手机端网页(小练习)
  4. C Primer Plus编程题-第五章 运算符、表达式和语句
  5. 如何使上下文信息更有用? 关于上下文感知的神经对话模型的实证研究
  6. 幸福温馨抑或婚姻枷锁——戴尔与EMC的蜜月期究竟进展如何?
  7. Postman参数化
  8. linux下float的寄存器,检测x86上Linux的非正常浮动操作(Detecting denormal float operations on Linux for x86)...
  9. 华为手机如何调时间显示_华为手机照相有时间日期显示怎样设置
  10. 爬虫内涵段子贴吧内容