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