详细介绍OnSysCommand()
时间: 2023-11-27 18:03:14 浏览: 67
OnSysCommand()是MFC框架中的一个消息处理函数,它用于处理系统命令消息(WM_SYSCOMMAND)。当用户在窗口的标题栏或系统菜单中选择一个系统命令(如最小化、最大化、关闭等)时,系统会发送WM_SYSCOMMAND消息给窗口,OnSysCommand()函数就被调用来处理此消息。
OnSysCommand()函数的原型如下:
```
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
```
参数说明:
- nID:表示系统命令的标识符,可以是SC_CLOSE、SC_MINIMIZE、SC_MAXIMIZE等。
- lParam:表示鼠标单击的点的坐标,是一个32位有符号整数。
OnSysCommand()函数的作用是处理系统命令消息,通常需要根据nID的值来确定用户选择了哪个系统命令,然后进行相应的处理。例如,当用户选择关闭命令时,可以调用窗口的CloseWindow()或DestroyWindow()函数来关闭窗口;当用户选择最小化命令时,可以调用窗口的ShowWindow(SW_MINIMIZE)函数将窗口最小化等等。
此外,OnSysCommand()函数还可以被子类化,以处理自定义的系统命令。例如,可以在窗口菜单中增加一个“打印”命令,并在OnSysCommand()函数中处理该命令,实现窗口的打印功能。
总之,OnSysCommand()函数是一个很重要的消息处理函数,它可以使窗口具有丰富的系统命令处理能力。
相关问题
void CMfcSnakeDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } }
这是一个 MFC 程序中的对话框类的成员函数,用于处理系统菜单中的命令。当菜单项的 ID 为 IDM_ABOUTBOX(关于对话框)时,创建一个 CAboutDlg 类型的对话框对象,然后调用 DoModal() 函数显示对话框。反之,调用 CDialogEx::OnSysCommand() 函数处理其他的系统菜单命令。需要注意的是,在菜单项的 ID 范围内,IDM_ABOUTBOX 必须在系统命令范围内(0xF000 以下)。
//设置产生伪随机数的种子 srand(time(NULL)); //初始化单词索引 randIndex = -1; //设置认识,不认识,跳过三个按钮为不可用状态 m_btnKnow.EnableWindow(FALSE); m_btnUnknow.EnableWindow(FALSE); m_btnSkip.EnableWindow(FALSE); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CReticeWordDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CReticeWordDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } }
这段代码是MFC框架下的对话框类CReticeWordDlg的成员函数,包含了窗口初始化、按钮控制和窗口绘制等功能。其中,srand()函数用于设置产生伪随机数的种子,以便在后续的程序执行中使用rand()函数生成伪随机数。randIndex变量用于存储单词索引,初始化为-1。接下来,使用EnableWindow()函数将“认识”、“不认识”、“跳过”三个按钮设为不可用状态。OnSysCommand()函数用于处理系统命令,如果收到的系统命令是IDM_ABOUTBOX,则弹出“关于”对话框。在OnPaint()函数中,若窗口处于最小化状态,则将窗口图标绘制在窗口中央位置。否则调用CDialogEx::OnPaint()函数进行默认的绘制操作。