//设置产生伪随机数的种子 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(); } }
时间: 2024-03-15 11:42:35 浏览: 110
这段代码是MFC框架下的对话框类CReticeWordDlg的成员函数,包含了窗口初始化、按钮控制和窗口绘制等功能。其中,srand()函数用于设置产生伪随机数的种子,以便在后续的程序执行中使用rand()函数生成伪随机数。randIndex变量用于存储单词索引,初始化为-1。接下来,使用EnableWindow()函数将“认识”、“不认识”、“跳过”三个按钮设为不可用状态。OnSysCommand()函数用于处理系统命令,如果收到的系统命令是IDM_ABOUTBOX,则弹出“关于”对话框。在OnPaint()函数中,若窗口处于最小化状态,则将窗口图标绘制在窗口中央位置。否则调用CDialogEx::OnPaint()函数进行默认的绘制操作。
相关问题
//从文件中读取不认识的单词库 FILE* fp2; fopen_s(&fp2, "unknown.txt", "r"); if (fp2 != NULL) { while (!feof(fp2)) { char line[256] = { 0 }; fgets(line, 256, fp2); if (strlen(line) == 0) { break; } int i = 0; while (line[i] != ' ' && line[i] != '\t') { i++; } line[i] = '\0'; Word word; memset(&word, 0, sizeof(Word)); memcpy(word.word, line, strlen(line)); memcpy(word.explain, line + i + 1, strlen(line + i + 1)); unknown.push_back(word); } fclose(fp2); } //设置产生伪随机数的种子 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); } }
这段代码是用于从一个名为 "unknown.txt" 的文件中读取不认识的单词库,并将其存储在一个名为 "unknown" 的容器中。在读取文件时,它会将每行内容按照空格或制表符进行分割,然后将单词和解释分别存储在一个名为 "Word" 的结构体中,并将该结构体添加到 "unknown" 容器中。除此之外,该代码还进行了一些初始化操作,并将 "认识","不认识"和"跳过"三个按钮设置为不可用状态。在 OnSysCommand 函数中,如果收到 IDM_ABOUTBOX 的消息,则会显示一个关于对话框。
#include <iostream> using namespace std; #include <stdlib.h> #include <time.h> #include <windows.h> //简单选择排序 void main() { int *arr=new int[200000]; for (int i = 1; i < 200000; i++) { arr[i] = i; }//初始化数组 //打乱数组 int index, tmp; srand(time(NULL)); for (int i = 1; i < 200000; i++) { index = rand() % (200000 - i) + i; if (index != i) { tmp = arr[i]; arr[i] = arr[index]; arr[index] = tmp; } } //记录时间 LARGE_INTEGER begin, end; QueryPerformanceCounter(&begin); //简单选择排序 for (int i = 1; i < 199999; i++) { int index = i; for (int j = i + 1; j <= 199999; j++) { if (arr[j] < arr[index])//如果第j个小于第i个则将索引交换 index = j; if (index != i)//索引不等于i就,即上面if语句执行,则进行交换 { int temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } } } QueryPerformanceCounter(&end); cout << "花费了:" << end.QuadPart - begin.QuadPart << "时钟周期" << endl; cout << endl; }优化代码
这段代码主要是实现了一个简单选择排序,并且对一个长度为200000的数组进行了排序。不过在实现上还有一些可以优化的地方,比如数组的初始化可以使用memset函数来代替for循环,以及排序过程中可以使用引用或指针来进行交换操作,避免不必要的拷贝。另外,建议将代码整理成更规范、易读的形式,比如添加注释、缩进、空行等。
阅读全文