怎么把MFC和写好的代码联系起来

我已经写好了代码用k近临分类法分类音乐 代码如下


#include <vector>
#include <algorithm>
#include<iostream>;
using namespace std;

// 定义音乐样本的结构体
struct MusicSample {
    int id;
    int slowDuration;
    int fastDuration;
    std::string genre;
};

// 计算欧式距离
double calculateDistance(int slowDuration, int fastDuration, int xSlowDuration, int xFastDuration) {
    int diffSlow = slowDuration - xSlowDuration;
    int diffFast = fastDuration - xFastDuration;
    return sqrt(diffSlow * diffSlow + diffFast * diffFast);
}

// k近邻分类算法
std::string classifyMusic(std::vector<MusicSample>& musicSamples, int xSlowDuration, int xFastDuration, int k) {
    // 计算x与所有样本数据的欧式距离
    std::vector<std::pair<int, double>> distances;
    for (const auto& sample : musicSamples) {
        double distance = calculateDistance(sample.slowDuration, sample.fastDuration, xSlowDuration, xFastDuration);
        distances.push_back(std::make_pair(sample.id, distance));
    }

    // 按照距离递增排序
    std::sort(distances.begin(), distances.end(), [](const std::pair<int, double>& a, const std::pair<int, double>& b) {
        return a.second < b.second;
        });

    // 找到k个距离最近的样本
    std::vector<std::string> genres;
    for (int i = 0; i < k; ++i) {
        int sampleId = distances[i].first;
        for (const auto& sample : musicSamples) {
            if (sample.id == sampleId) {
                genres.push_back(sample.genre);
                break;
            }
        }
    }

    // 统计样本中出现最多的类别
    int countRock = 0;
    int countFolk = 0;
    for (const auto& genre : genres) {
        if (genre == "摇滚") {
            countRock++;
        }
        else if (genre == "民谣") {
            countFolk++;
        }
    }

    // 判定x的分类
    if (countRock > countFolk) {
        return "摇滚";
    }
    else if (countRock < countFolk) {
        return "民谣";
    }
    else {
        return "未知";
    }
}

int main() {
    // 初始化音乐样本数据集
    std::vector<MusicSample> musicSamples = {
        {1, 100, 80, "民谣"},
        {2, 140, 40, "民谣"},
        {3, 20, 160, "摇滚"},
        {4, 110, 70, "民谣"},
        {5, 30, 150, "摇滚"}
    };

    // 输入未知分类的mp3信息
    int xSlowDuration ;
    int xFastDuration ;
    cout << "xSlowDuration="; 
    cin >> xSlowDuration;
    cout<< "xFastDuration=";
    cin >> xFastDuration;
   
 
    int k ;
    cout << "k=";
    cin >> k;

    // 进行分类
    std::string classification = classifyMusic(musicSamples, xSlowDuration, xFastDuration, k);

    // 输出分类结果
    std::cout << "根据k近邻分类算法,判定x的分类为:" << classification << std::endl;

    return 0;
}

然后我设计的MFC版面

img


怎么样可以把它们联系起来

相关的代码放到相对应控件

  • 看下这篇博客,也许你就懂了,链接:海康威视demo-MFC综合示例-MFC分功能示例-成功编译
  • 除此之外, 这篇博客: 计算机图形学 | 基于MFC和二维变换的画图软件中的 2.2.3 等腰和直角三角形 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在使用鼠标拉取的矩形中选取点位置并用画线函数连接点实现。三角形包括3个顶点。拉取矩形的起点坐标为(pStart.x,pStart.y),终点坐标为(pEnd.x,pEnd.y)。根据两种三角形在矩形中绘制时的对应比例,等腰三角形3个顶点坐标分别为:
    P1 (pStart.x+pEnd.x)/2,pStart.y);
    P2 (pStart.x,pEnd.y);
    P3 (pEnd.x,pEnd.y);
    直角三角形的三个顶点坐标为:
    P1 (pStart.x,pStart.y);
    P2 (pEnd.x,pEnd.y);
    P3 (pStart.x,pEnd.y);

  • 以下回答由chatgpt基于相关博客总结生成:

    要将已编写的音乐分类代码与MFC界面进行整合,可以按照以下步骤进行操作:

    1. 将音乐分类代码封装为一个函数或类:首先,将已编写的音乐分类代码封装为一个函数或类。如果是一个函数,可以将代码封装在一个新的.cpp文件中,并在该文件中声明和定义该函数。如果是一个类,则可以创建一个新的.h和.cpp文件,将代码封装在类中。

    2. 在MFC界面的.cpp文件中引入音乐分类代码的头文件:在MFC界面的.cpp文件中,使用#include指令引入音乐分类代码的头文件。例如,如果音乐分类代码封装在一个.h文件中,可以在MFC界面的.cpp文件的顶部添加#include "music_classification.h"。

    3. 在MFC界面的.cpp文件中调用音乐分类代码的函数或类:在MFC界面的.cpp文件中,可以调用封装的音乐分类函数或类。根据音乐分类代码的具体实现方式,可能需要创建一个对象,然后调用相应的函数,或者直接调用函数。

    4. 处理音乐分类结果:根据音乐分类代码的返回类型和需求,可以在MFC界面中处理音乐分类的结果。例如,可以在界面上显示分类结果,或者根据分类结果执行相应的操作。

    以下是一个示例代码,演示如何将音乐分类代码与MFC界面进行整合:

    // music_classification.h
    
    #pragma once
    
    // 假设音乐分类的函数名为classifyMusic
    int classifyMusic(const std::string& musicFile);
    
    // MFC界面的.cpp文件
    
    #include "music_classification.h"
    
    // 假设MFC界面的按钮点击事件函数为OnButtonClicked
    void CMyMFCDialog::OnButtonClicked()
    {
        // 获取用户选择的音乐文件路径,假设存储在musicFilePath中
    
        // 调用音乐分类函数进行分类
        int result = classifyMusic(musicFilePath);
    
        // 处理分类结果,例如在界面上显示结果
        CString info;
        info.Format(_T("音乐分类结果:%d"), result);
        GetDlgItem(IDC_RESULT_LABEL)->SetWindowText(info);
    }
    

    请注意,上述代码是一个简化示例,具体实现可能需要根据具体情况进行调整和修改。另外,在实际过程中还可能需要处理异常情况、优化代码等。以上是一种常见的将已编写的音乐分类代码与MFC界面进行整合的方法,希望能对你有所帮助。如果你有任何进一步的问题,请随时追问。