| | |
| | | { |
| | | |
| | | } |
| | | |
| | | void CHMPropertyPage::OnCreateBtns() |
| | | { |
| | | |
| | | } |
| | | |
| | | CButton* CHMPropertyPage::CreateBtn(const char* name, int w, int h, const UINT id) |
| | | { |
| | | std::string key = std::string(name); |
| | | auto it = m_btns.find(key); |
| | | if (it != m_btns.end()) { |
| | | return it->second; |
| | | } |
| | | |
| | | CButton* pBtn = new CButton(); |
| | | pBtn->Create(name, WS_CHILD, CRect(0, 0, w, h), GetParent(), id); |
| | | // 使用默认GUI字体 |
| | | HFONT hFont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT); |
| | | if (hFont != nullptr) { |
| | | pBtn->SetFont(CFont::FromHandle(hFont), FALSE); |
| | | } |
| | | ::SetProp(pBtn->GetSafeHwnd(), _T("BTN_ORDER"), (HANDLE)(INT_PTR)m_btnOrderSeq++); |
| | | m_btns[key] = pBtn; |
| | | return pBtn; |
| | | } |
| | | |
| | | CButton* CHMPropertyPage::GetBtnByName(const char* name) |
| | | { |
| | | auto it = m_btns.find(std::string(name)); |
| | | if (it != m_btns.end()) { |
| | | return it->second; |
| | | } |
| | | return nullptr; |
| | | } |
| | | |
| | | std::map<std::string, CButton*>& CHMPropertyPage::getBtns() |
| | | { |
| | | return m_btns; |
| | | } |
| | | |
| | | void CHMPropertyPage::HandleBtnClick(HWND hBtn) |
| | | { |
| | | for (auto& kv : m_btns) { |
| | | if (kv.second != nullptr && kv.second->GetSafeHwnd() == hBtn) { |
| | | OnClickedBtn(kv.first.c_str()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | BEGIN_MESSAGE_MAP(CHMPropertyPage, CDialogEx) |
| | | ON_WM_DESTROY() |
| | | END_MESSAGE_MAP() |
| | | |
| | | void CHMPropertyPage::OnDestroy() |
| | | { |
| | | CDialogEx::OnDestroy(); |
| | | |
| | | for (auto& kv : m_btns) { |
| | | CButton* btn = kv.second; |
| | | if (btn != nullptr) { |
| | | if (::IsWindow(btn->GetSafeHwnd())) { |
| | | ::RemoveProp(btn->GetSafeHwnd(), _T("BTN_ORDER")); |
| | | } |
| | | if (::IsWindow(btn->GetSafeHwnd())) { |
| | | btn->DestroyWindow(); |
| | | } |
| | | delete btn; |
| | | } |
| | | } |
| | | m_btns.clear(); |
| | | } |