#pragma once #ifndef _EDIT_WITHBTN_H_ #define _EDIT_WITHBTN_H_ #include // 带按钮的编辑框,增加设置按钮功能的接口和按钮文本 // 需要调用EnableBrowseButton()使能,然后对_OnBrowseFunc赋值 class CEditWithBtn : public CBCGPEdit { public: CEditWithBtn(LPCTSTR szLabel=_T("...")) { EnableBrowseButton(TRUE, szLabel); } // 执行点击按钮后的回调函数 void OnBrowse() override { if (_OnBrowseFunc) _OnBrowseFunc(); } // 执行更新后的回调函数 void OnAfterUpdate() override { if (_OnAfterUpdateFunc) _OnAfterUpdateFunc(); } // 设置点击按钮后的回调函数 inline void setOnBrowseFunc(std::function func) { _OnBrowseFunc = func; } // 设置编辑框内容更新后的回调函数 inline void setOnAfterUpdateFunc(std::function func) { _OnAfterUpdateFunc = func; } protected: // 点击按钮后的回调函数 std::function _OnBrowseFunc; // 更新后的回调函数 std::function _OnAfterUpdateFunc; }; // 带打开文件功能的编辑框,增加更新后的回调 // 需要调用EnableFileBrowseButton()设置参数,然后对_OnAfterUpdateFunc赋值 class CEditWithOpenFile : public CBCGPEdit { public: // 执行更新后的回调函数 void OnAfterUpdate() override { if (_OnAfterUpdateFunc) _OnAfterUpdateFunc(); } // 设置编辑框内容更新后的回调函数 inline void setOnAfterUpdateFunc(std::function func) { _OnAfterUpdateFunc = func; } protected: // 更新后的回调函数 std::function _OnAfterUpdateFunc; }; // 带计算周长的编辑框,增加更新后的回调 class CEditWithPiCalc : public CBCGPEdit { public: // 构造函数,设置小数位数。-1表示不限制小数位数 CEditWithPiCalc(int decimal=8) { CListlstCommands; lstCommands.AddTail(CBCGPCalculator::idCommandAdvPi); CString str; if (decimal < 0) { CBCGPEdit::EnableCalculatorButton(nullptr, &lstCommands, nullptr); } else { str.Format(_T("%%.%df"), decimal); CBCGPEdit::EnableCalculatorButton(nullptr, &lstCommands, str); } } // 设置编辑框内容更新后的回调函数 inline void setOnAfterUpdateFunc(std::function func) { _OnAfterUpdateFunc = func; } // 执行更新后的回调函数 void OnAfterUpdate() override { if (_OnAfterUpdateFunc) _OnAfterUpdateFunc(); } protected: // 更新后的回调函数 std::function _OnAfterUpdateFunc; }; #endif // !_EDIT_WITHBTN_H_