// MFCTestDlg.h: Headerdatei // #pragma once // CMFCTestDlg-Dialogfeld class CMFCTestDlg : public CDialogEx { public: struct MyStruct { double Price; }; double Threshold = 0.0; bool PriceRanges(MyStruct ms) { return (ms.Price <= Threshold); } // Konstruktion public: CMFCTestDlg(CWnd* pParent = nullptr); // Standardkonstruktor // Dialogfelddaten #ifdef AFX_DESIGN_TIME enum { IDD = IDD_MFCTEST_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung // Implementierung protected: HICON m_hIcon; // Generierte Funktionen für die Meldungstabellen virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButtonStd1(); int STD_FindIf(); }; // MFCTestDlg.cpp: Implementierungsdatei // #include "pch.h" #include "framework.h" #include "MFCTest.h" #include "MFCTestDlg.h" #include "afxdialogex.h" #include // std::cout #include // std::find_if #include // std::vector #include #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg-Dialogfeld für Anwendungsbefehl "Info" class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialogfelddaten #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung // Implementierung protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCTestDlg-Dialogfeld CMFCTestDlg::CMFCTestDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MFCTEST_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCTestDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCTestDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_STD_1, &CMFCTestDlg::OnBnClickedButtonStd1) END_MESSAGE_MAP() // CMFCTestDlg-Meldungshandler BOOL CMFCTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden //ShowWindow(SW_MAXIMIZE); //ShowWindow(SW_MINIMIZE); // TODO: Hier zusätzliche Initialisierung einfügen return TRUE; // TRUE zurückgeben, wenn der Fokus nicht auf ein Steuerelement gesetzt wird } void CMFCTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das // Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt. void CMFCTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext zum Zeichnen SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Symbol in Clientrechteck zentrieren 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; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer // das minimierte Fenster mit der Maus zieht. HCURSOR CMFCTestDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CMFCTestDlg::OnBnClickedButtonStd1() { STD_FindIf(); } int CMFCTestDlg::STD_FindIf() { std::vector myvector; MyStruct mystruxt; mystruxt.Price = 35.00; myvector.push_back(mystruxt); mystruxt.Price = 41.00; myvector.push_back(mystruxt); mystruxt.Price = 22.50; myvector.push_back(mystruxt); mystruxt.Price = 11.00; myvector.push_back(mystruxt); Threshold = 30.34; //threshold = 10.00; //std::vector::iterator it = std::find_if(myvector.begin(), myvector.end(), PriceRanges); std::vector::iterator it = std::find_if(myvector.begin(), myvector.end(), [](const MyStruct& d) { if (d.Price <= 23.33) return true; }); //std::vector::iterator it = std::find_if(myvector.begin(), myvector.end(), PriceRanges); std::vector myvectorResult; std::copy_if(myvector.begin(), myvector.end(), std::back_inserter(myvectorResult), [](const MyStruct& d) { if (d.Price <= 23.33) return true; }); if (it != myvector.end()) { TRACE1("Fixed = %f", std::fixed); TRACE1("Fixed = %f", std::setprecision(2)); TRACE1("it->price = %f", it->Price); //TRACE1("Fixed = %f", std::fixed); //std::cout << std::fixed; //std::cout << std::setprecision(2); //std::cout << "The first value <= threshold of " << threshold << " is " << it->price << '\n'; } else { TRACE1("No struct found in vector with a Price %f", Threshold); //std::cout << "No struct found in vector with a Price <= " << threshold << std::endl; } return 0; }