xref: /MusicPlayer2/MusicPlayer2/UiSearchBox.cpp (revision db7d7dda1eb6b31c576728607b855910b129e090)
1 // UiSearchBox.cpp: 实现文件
2 //
3 
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "afxdialogex.h"
7 #include "UiSearchBox.h"
8 #include "UIElement.h"
9 #include "MusicPlayerDlg.h"
10 
11 
12 // CUiSearchBox 对话框
13 
IMPLEMENT_DYNAMIC(CUiSearchBox,CDialog)14 IMPLEMENT_DYNAMIC(CUiSearchBox, CDialog)
15 
16 CUiSearchBox::CUiSearchBox(CWnd* pParent)
17 	: CDialog(IDD_UI_SEARCH_BOX_DIALOG, pParent)
18 {
19 
20 }
21 
Create()22 void CUiSearchBox::Create()
23 {
24     CDialog::Create(IDD_UI_SEARCH_BOX_DIALOG, m_pParentWnd);
25 }
26 
~CUiSearchBox()27 CUiSearchBox::~CUiSearchBox()
28 {
29 }
30 
Show(UiElement::SearchBox * ui_search_box,bool big_icon)31 void CUiSearchBox::Show(UiElement::SearchBox* ui_search_box, bool big_icon)
32 {
33     m_ui_search_box = ui_search_box;
34     ASSERT(m_pParentWnd != nullptr);
35     if (m_pParentWnd != nullptr)
36     {
37         CFont& font{ theApp.m_font_set.dlg.GetFont(big_icon) };
38         CCommon::SetDialogFont(this, &font);
39         ShowWindow(SW_SHOW);
40         CRect rect = ui_search_box->GetRect();
41         m_pParentWnd->ClientToScreen(&rect);
42         MoveWindow(rect);
43         m_search_box.OnChangeLayout();
44         m_search_box.SetBigIcon(big_icon);
45     }
46 }
47 
Clear()48 void CUiSearchBox::Clear()
49 {
50     m_search_box.SetWindowText(_T(""));
51 }
52 
UpdatePos()53 void CUiSearchBox::UpdatePos()
54 {
55     ASSERT(m_pParentWnd != nullptr);
56     if (m_pParentWnd != nullptr && m_ui_search_box != nullptr && IsWindow(this->GetSafeHwnd()) && !m_pParentWnd->IsZoomed() && !m_pParentWnd->IsIconic())
57     {
58         CRect rect;
59         m_pParentWnd->GetClientRect(&rect);
60         m_pParentWnd->ClientToScreen(&rect);
61         if (!rect.IsRectEmpty())
62         {
63             CPoint obsolute_pos = rect.TopLeft() + m_ui_search_box->GetRect().TopLeft();
64             SetWindowPos(nullptr, obsolute_pos.x, obsolute_pos.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
65         }
66     }
67 }
68 
DoDataExchange(CDataExchange * pDX)69 void CUiSearchBox::DoDataExchange(CDataExchange* pDX)
70 {
71     CDialog::DoDataExchange(pDX);
72     DDX_Control(pDX, IDC_UI_SEARCH_BOX_EDIT, m_search_box);
73 }
74 
75 
BEGIN_MESSAGE_MAP(CUiSearchBox,CDialog)76 BEGIN_MESSAGE_MAP(CUiSearchBox, CDialog)
77     ON_WM_SIZE()
78     ON_EN_KILLFOCUS(IDC_UI_SEARCH_BOX_EDIT, &CUiSearchBox::OnEnKillfocusUiSearchBoxEdit)
79     ON_MESSAGE(WM_SEARCH_EDIT_BTN_CLICKED, &CUiSearchBox::OnSearchEditBtnClicked)
80     ON_EN_CHANGE(IDC_UI_SEARCH_BOX_EDIT, &CUiSearchBox::OnEnChangeUiSearchBoxEdit)
81 END_MESSAGE_MAP()
82 
83 
84 // CUiSearchBox 消息处理程序
85 
86 
87 BOOL CUiSearchBox::OnInitDialog()
88 {
89     CDialog::OnInitDialog();
90 
91     // TODO:  在此添加额外的初始化
92     CCommon::SetDialogFont(this, &theApp.m_font_set.dlg.GetFont());
93 
94     return TRUE;  // return TRUE unless you set the focus to a control
95     // 异常: OCX 属性页应返回 FALSE
96 }
97 
98 
OnSize(UINT nType,int cx,int cy)99 void CUiSearchBox::OnSize(UINT nType, int cx, int cy)
100 {
101     CDialog::OnSize(nType, cx, cy);
102 
103     // TODO: 在此处添加消息处理程序代码
104     if (nType != SIZE_MINIMIZED && IsWindow(m_search_box.GetSafeHwnd()))
105     {
106         m_search_box.MoveWindow(0, 0, cx, cy);
107     }
108 }
109 
110 
OnCancel()111 void CUiSearchBox::OnCancel()
112 {
113     // TODO: 在此添加专用代码和/或调用基类
114     DestroyWindow();
115     //CDialog::OnCancel();
116 }
117 
118 
OnEnKillfocusUiSearchBoxEdit()119 void CUiSearchBox::OnEnKillfocusUiSearchBoxEdit()
120 {
121     // TODO: 在此添加控件通知处理程序代码
122     ShowWindow(SW_HIDE);        //失去焦点时隐藏
123 }
124 
125 
OnSearchEditBtnClicked(WPARAM wParam,LPARAM lParam)126 afx_msg LRESULT CUiSearchBox::OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam)
127 {
128     CSearchEditCtrl* pEdit = (CSearchEditCtrl*)wParam;
129     if (pEdit == &m_search_box)
130     {
131         Clear();
132     }
133     return 0;
134 }
135 
136 
OnEnChangeUiSearchBoxEdit()137 void CUiSearchBox::OnEnChangeUiSearchBoxEdit()
138 {
139     // TODO:  如果该控件是 RICHEDIT 控件,它将不
140     // 发送此通知,除非重写 CDialog::OnInitDialog()
141     // 函数并调用 CRichEditCtrl().SetEventMask(),
142     // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
143 
144     // TODO:  在此添加控件通知处理程序代码
145     if (m_ui_search_box != nullptr)
146     {
147         //搜索框文本改变时同步更新对UiElement中的搜索框
148         CString str;
149         m_search_box.GetWindowText(str);
150         m_ui_search_box->key_word = str.GetString();
151         m_ui_search_box->OnKeyWordsChanged();
152         //通知线程强制重绘
153         CMusicPlayerDlg* pMainWindow = CMusicPlayerDlg::GetInstance();
154         if (pMainWindow != nullptr)
155             pMainWindow->UiForceRefresh();
156     }
157 }
158