OnSysCommand( UINT nID, LPARAM lParam );分析

本文详细介绍了CWnd::OnSysCommand函数的功能及其参数,包括处理系统命令如窗口关闭、最大化、最小化等操作的方法。同时解释了如何响应来自控制菜单的命令以及如何处理系统级的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CWnd::OnSysCommand

afx_msg void OnSysCommand( UINT nID, LPARAM lParam );

参数:
nID指定了请求的系统命令的类型。这个参数可以是下列值之一:
SC_CLOSE关闭CWnd对象。
SC_HOTKEY激活与应用程序指定的热键相关的CWnd对象。lParam的低位字标识了要激活的窗口的HWND句柄。
SC_HSCROLL水平滚动。
SC_KEYMENU通过击键获得菜单。
SC_MAXIMIZE (或SC_ZOOM)最大化CWnd对象。
SC_MINIMIZE (或SC_ICON)最小化CWnd对象。
SC_MOUSEMENU通过鼠标点击获得菜单。
SC_MOVE移动CWnd对象。
SC_NEXTWINDOW移动到下一个窗口。
SC_PREVWINDOW移动到前一个窗口。
SC_RESTORE将窗口恢复为普通的位置和大小。
SC_SCREENSAVE执行SYSTEM.INI文件中[boot]部分指定的屏幕保护应用程序。
SC_SIZE调整CWnd对象的大小。
SC_TASKLIST执行或激活Windows的任务管理器应用程序。
SC_VSCROLL垂直滚动。
lParam如果控制菜单是通过鼠标选择的,则lParam中包含了光标的位置。低位字包含了x轴坐标,高位字包含了y轴坐标;否则这个参数没有使用。
·SC_HOTKEY激活与应用程序指定的热键相关的窗口。lParam的低位字标识了要激活的窗口。
·SC_SCREENSAVE在控制面板的桌面部分执行屏幕保护应用程序。

说明:
当用户从控制菜单选择了一个命令,或者用户选择了最大化户最小化按钮时,框架调用这个函数。
在缺省情况下,OnSysCommand执行控制菜单对前面表格中描述的预定义动作的请求。
在WM_SYSCOMMAND消息中,nID参数的低四位被Windows内部使用。当应用程序测试nID的值时,它必须用位与操作符AND将值0xFFF0与nID的值组合在一起以获得正确的结果。
控制菜单中的菜单项可以用GetSystemMenu,AppendMenu,InsertMenu和ModifyMenu成员函数来修改。修改了控制菜单的应用程序必须处理WM_SYSCOMMAND消息,并且应用程序没有处理的任何WM_SYSCOMMAND消息都必须被发送给OnSysCommand。应用程序加入的任何命令值必须由应用程序处理,并且不能被传递给OnSysCommand
应用程序可以在任何时候通过向OnSysCommand发送WM_SYSCOMMAND消息来执行任何系统命令。
为选择控制菜单中的项的加速键(快捷方式)被转换为OnSysCommand调用;所有其它的加速键被转换为WM_COMMAND消息。
注意 框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。

// ReticeWordDlg.h: 头文件 // #pragma once #include "CScreenWnd.h" #include <vector> typedef struct Word { char word[50]; char explain[50]; }Word; // CReticeWordDlg 对话框 class CReticeWordDlg : public CDialogEx { // 构造 public: CReticeWordDlg(CWnd* pParent = nullptr); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_RETICEWORD_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 void RandomGen();//随机抽取一个单词 void SaveUnknow();//将不认识的单词保存到文本文件 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); virtual BOOL OnInitDialog();//初始化函数 afx_msg void OnBnClickedButtonStart();//点击开始按钮 afx_msg void OnBnClickedButtonKnow();//点击认识按钮 afx_msg void OnBnClickedButtonUnknow();//点击不认识按钮 afx_msg void OnBnClickedButtonSkip();//点击跳过按钮 afx_msg void OnBnClickedButtonDetail();//点击显示注释按钮 DECLARE_MESSAGE_MAP() public: CScreenWnd m_screen;//自定义控件,用于显示单词以及释义 std::vector<Word> words;//总单词库 std::vector<Word> unknown;//不认识的单词库 BOOL mode;//FALSE表示从总单词库中随机抽取单词,TRUE表示从不认识的单词库中抽取单词 int randIndex;//当前抽取的单词在词库中的索引 CButton m_btnKnow;//认识按钮的控制变量,用于控制按钮是否可用 CButton m_btnSkip;//跳过按钮的控制变量,用于控制按钮是否可用 CButton m_btnStart;//开始按钮的控制变量,用于控制按钮是否可用 CButton m_btnUnknow;//不认识按钮的控制变量,用于控制按钮是否可用 };
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值