Skip to content

Commit b834aea

Browse files
committed
响应文本变化的处理移动到线程中
1 parent dd4341f commit b834aea

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

SimpleNotePad/SimpleNotePadDlg.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,27 @@ void CSimpleNotePadDlg::FillFindText()
892892
m_find_replace_dlg.SetFindString(L"");
893893
}
894894

895+
UINT CSimpleNotePadDlg::TextChangeThreadCallback(LPVOID dwUser)
896+
{
897+
CSimpleNotePadDlg* pThis = dynamic_cast<CSimpleNotePadDlg*>(theApp.m_pMainWnd);
898+
while (true)
899+
{
900+
if (pThis->m_text_changed_thread_exit)
901+
break;
902+
903+
//响应编辑器文本变化
904+
if (pThis->m_text_changed)
905+
{
906+
pThis->m_view->GetTextW(pThis->m_edit_wcs);
907+
pThis->UpdateStatusBarInfo();
908+
pThis->SetTitle();
909+
pThis->m_text_changed = false;
910+
}
911+
Sleep(100);
912+
}
913+
return 0;
914+
}
915+
895916
//void CSimpleNotePadDlg::SaveAsHex()
896917
//{
897918
// //设置过滤器
@@ -1164,6 +1185,7 @@ BOOL CSimpleNotePadDlg::OnInitDialog()
11641185

11651186
SetTimer(TIMER_ID_MONITOR, 1000, NULL);
11661187

1188+
m_text_change_thread = AfxBeginThread(TextChangeThreadCallback, nullptr);
11671189

11681190
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
11691191
}
@@ -1968,9 +1990,7 @@ BOOL CSimpleNotePadDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
19681990
UINT marsk = (SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT | SC_PERFORMED_UNDO | SC_PERFORMED_REDO);
19691991
if ((notification->modificationType & marsk) != 0)
19701992
{
1971-
m_view->GetTextW(m_edit_wcs);
1972-
UpdateStatusBarInfo();
1973-
SetTitle();
1993+
m_text_changed = true;
19741994
}
19751995
//当删除了字符时
19761996
if (notification->modificationType == (SC_MOD_DELETETEXT | SC_PERFORMED_USER)
@@ -2283,6 +2303,10 @@ void CSimpleNotePadDlg::OnDestroy()
22832303
CBaseDialog::OnDestroy();
22842304

22852305
// TODO: 在此处添加消息处理程序代码
2306+
m_text_changed_thread_exit = true;
2307+
if (m_text_change_thread != nullptr)
2308+
WaitForSingleObject(m_text_change_thread->m_hThread, 2000); //等待线程退出
2309+
22862310
}
22872311

22882312

SimpleNotePad/SimpleNotePadDlg.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ class CSimpleNotePadDlg : public CBaseDialog
8383
CSyntaxHighlight m_syntax_highlight;
8484
std::deque<std::wstring> m_clipboard_items;
8585
bool m_marked{ false };
86+
bool m_text_changed{ false }; //如果已收到文本更改消息,则为true
87+
bool m_text_changed_thread_exit{ false }; //如果为true,则退出响应文本改变的线程
88+
CWinThread* m_text_change_thread{}; //响应文本改变的线程
8689

8790
protected:
8891
void ApplySettings(const SettingsData& general_data, const EditSettingData& eidt_data, const CUserDefinedLanguageStyle& language_data);
@@ -134,6 +137,8 @@ class CSimpleNotePadDlg : public CBaseDialog
134137

135138
void FillFindText(); //向查找替换对话框中的查找文本框填充选中文本
136139

140+
static UINT TextChangeThreadCallback(LPVOID dwUser);
141+
137142
private:
138143

139144
protected:

0 commit comments

Comments
 (0)