void CMfcSnakeDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } }
时间: 2024-04-02 11:34:18 浏览: 19
这是一个 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()函数进行默认的绘制操作。
// 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;//不认识按钮的控制变量,用于控制按钮是否可用 };
这是一个 MFC 程序的对话框类 CReticeWordDlg,用于背单词程序的实现。该类中包含了一些成员变量和成员函数,如自定义控件 CScreenWnd 用于显示单词和释义,以及用于存储单词的总单词库和不认识的单词库等。其中,RandomGen() 函数用于随机抽取一个单词,SaveUnknow() 函数用于将不认识的单词保存到文本文件。在界面上还有一些按钮控制变量,如 m_btnKnow、m_btnSkip、m_btnStart 和 m_btnUnknow,用于控制各个按钮是否可用。