📄 poemdlg.cpp
字号:
Author->GetValueString(nd, 2);//取得作者年代
delete Author;
if (m_flg == "Z")
{
m_flg = "0";
m_czp = "";
m_czz = "";
return;
}
else if (m_flg == "A")
{
int i = m_nd.FindStringExact(0, nd);
if (i != -1)
{
m_nd.SetCurSel(i);
SetZZ();
SetZP();
m_flg = "0";
m_czp = "";
m_czz = "";
}
}
}
void CPOEMDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
delete m_con;
delete m_Poem;
CDialog::OnClose();
}
void CPOEMDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
m_flg = "A";
CAdoRecordSet record;
record = m_Poem->m_pRecordset->Clone(adLockReadOnly);
record.m_pRecordset->Bookmark = m_Poem->m_pRecordset->Bookmark;
if (!record.IsEOF())
{
record.MoveNext();
}
if (!record.IsEOF())
{
m_Poem->MoveNext();
SetPoem();
}
}
void CPOEMDlg::MoveToZP(CString str)
{
long i;
CString tem;
CAdoRecordSet record;
record = m_Poem->m_pRecordset->Clone(adLockUnspecified);
tem = "Title ='" + str + "'";
record.m_pRecordset->Filter = _variant_t(LPCTSTR(tem));
m_Poem->m_pRecordset->Bookmark = record.m_pRecordset->Bookmark;
i = m_Poem->m_pRecordset->GetAbsolutePosition();
}
void CPOEMDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
m_flg = "A";
CAdoRecordSet record;
record = m_Poem->m_pRecordset->Clone(adLockReadOnly);
record.m_pRecordset->Bookmark = m_Poem->m_pRecordset->Bookmark;
if (!record.IsBOF())
{
record.MovePrevious();
}
if (!record.IsBOF())
{
m_Poem->MovePrevious();
SetPoem();
}
}
void CPOEMDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
m_flg = "A";
m_Poem->MoveFirst();
SetPoem();
}
void CPOEMDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
m_flg = "A";
m_Poem->MoveLast();
SetPoem();
}
void CPOEMDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
PostMessage(WM_QUIT);
}
void CPOEMDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
ShowWindow(SW_MINIMIZE);
}
BOOL CPOEMDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rc;
CBitmap BitAll, BitFelt;
GetWindowRect(&rc);
ScreenToClient(&rc);
BitAll.CreateCompatibleBitmap(pDC, rc.Width() , rc.Height());
CDC* Mem = new CDC;
Mem->CreateCompatibleDC(pDC);
Mem->SelectObject(BitAll);
BitFelt.LoadBitmap(IDB_BK);
CBrush br(&BitFelt);
Mem->SelectObject(br);
Mem->FillRect(&rc, &br);
CBitmap bit, biti;
BITMAP sbit;
CDC mdc;
bit.LoadBitmap(IDB_CAP);
bit.GetBitmap(&sbit);
mdc.CreateCompatibleDC(pDC);
mdc.SelectObject(&bit);
CRect rect;
GetWindowRect(&rect);
rect.bottom = rect.top + sbit.bmHeight;
int cx = rect.right - rect.left;
int cy = rect.bottom - rect.top;
Mem->StretchBlt(0, 0,
cx, cy, &mdc,
0, 0,
sbit.bmWidth, sbit.bmHeight,
SRCCOPY);
CFont ft;
ft.CreateFont(16,12,0,0,400,0,0,0,0,0,0,0,0,"宋体");
Mem->SelectObject(ft);
Mem->SetBkMode(0);
Mem->SetTextColor(0x0000ff);
Mem->TextOut(10, 3, "中华诗词-——郭肇禄开发");
pDC->BitBlt(0, 0, rc.Width() , rc.Height(), Mem, 0, 0, SRCCOPY);
Mem->DeleteDC();
delete Mem;
return 1;
}
BOOL CPOEMDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_ESCAPE://屏蔽Esc
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CPOEMDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
CBitmap bit;
BITMAP sbit;
bit.LoadBitmap(IDB_CAP);
bit.GetBitmap(&sbit);
rect.bottom = rect.top + sbit.bmHeight;
if (rect.PtInRect(point))
{
SendMessage( WM_SYSCOMMAND, SC_MOVE | HTCLIENT, 0 );
}
CDialog::OnMouseMove(nFlags, point);
}
void CPOEMDlg::OnEnSelchangeRichedit25(NMHDR *pNMHDR, LRESULT *pResult)
{
SELCHANGE *pSelChange = reinterpret_cast<SELCHANGE *>(pNMHDR);
// TODO: 控件将不发送该通知,除非您重写
// CDialog::OnInitDialog() 函数以发送 EM_SETEVENTMASK 消息
// 到具有 ENM_SELCHANGE 标志“或”运算到 lParam 掩码中的控件。
// TODO: 在此添加控件通知处理程序代码
long start, end;
CString str;
m_xz.SendMessage(EM_SETEVENTMASK, 0, ~ENM_SELCHANGE);
m_xz.GetSel(start, end);
m_xz.SetSel(start, start + 1);
str = m_xz.GetSelText();
if (start != m_xzs)
{
SpeakCh(str);
m_xzs = start;
}
m_xz.SetSel(start, end);
str = GetYin(str);
str = GetPY(str);
m_zx.SetWindowText(str);
UpdateData(0);
m_xz.SendMessage(EM_SETEVENTMASK, 0, ENM_SELCHANGE);
*pResult = 0;
}
void CPOEMDlg::OnEnSelchangeRichedit26(NMHDR *pNMHDR, LRESULT *pResult)
{
SELCHANGE *pSelChange = reinterpret_cast<SELCHANGE *>(pNMHDR);
// TODO: 控件将不发送该通知,除非您重写
// CDialog::OnInitDialog() 函数以发送 EM_SETEVENTMASK 消息
// 到具有 ENM_SELCHANGE 标志“或”运算到 lParam 掩码中的控件。
// TODO: 在此添加控件通知处理程序代码
long start, end;
CString str;
m_gs.SendMessage(EM_SETEVENTMASK, 0, ~ENM_SELCHANGE);
m_gs.GetSel(start, end);
m_gs.SetSel(start, start + 1);
str = m_gs.GetSelText();
if (start != m_gss)
{
SpeakCh(str);
m_gss = start;
}
m_gs.SetSel(start, end);
str = GetYin(str);
str = GetPY(str);
m_zx.SetWindowText(str);
UpdateData(0);
m_gs.SendMessage(EM_SETEVENTMASK, 0, ENM_SELCHANGE);
*pResult = 0;
}
CString CPOEMDlg::GetYin(CString str)
{
CAdoRecordSet *Author = new CAdoRecordSet(m_con);
CString sql = "select * from ZiYin where Zi = '" + str + "'";
Author->Open(sql);
str = "";
Author->GetValueString(str,0);
delete Author;
return CString(str);
}
CString CPOEMDlg::GetPY(CString str)
{
CString b[6][4] = {{"à" ,"ǎ" ,"á" ,"ā"},{"ō" ,"ó" ,"ǒ" ,"ò"},{"ē", "é", "ě", "è"},
{"ī","í","ǐ","ì"}, {"ū", "ú", "ǔ", "ù"}, {"ǖ", "ǘ", "ǚ", "ǜ"}};
CString sdz;
CString sb;
CString s;
CString a[6];
int i = -1;
int k = -1;
a[0] = "a";
a[1] = "o";
a[2] = "e";
a[3] = "i";
a[4] = "u";
a[5] = "v";
for (int j=0; j<6; j++)
{
i = str.Find(a[j], 0);
if (i >= 0)
{
str = str.Trim(" ");
sdz = str.Mid(str.GetLength()-1, 1);
k = (int)strtod(sdz.GetBuffer(), NULL);
k = k - 1;
if (k < 0)
{
str = str.Left(str.GetLength() -1);
return CString(str);
break;
}
if (j != 3 )
{
sb = b[j][k];
break;
}
else if (j == 3)
{
s = str.Mid(i+1, 1);
sb = b[j][k];
if (s == "u")
{
sb = b[j+1][k];
i = i + 1;
}
break;
}
}
}
str = str.Left(str.GetLength() -1);
str = str.Left(i) + sb + str.Mid(i+1);
return CString(str);
}
void CPOEMDlg::OnEnSelchangeRichedit27(NMHDR *pNMHDR, LRESULT *pResult)
{
SELCHANGE *pSelChange = reinterpret_cast<SELCHANGE *>(pNMHDR);
// TODO: 控件将不发送该通知,除非您重写
// CDialog::OnInitDialog() 函数以发送 EM_SETEVENTMASK 消息
// 到具有 ENM_SELCHANGE 标志“或”运算到 lParam 掩码中的控件。
// TODO: 在此添加控件通知处理程序代码
long start, end;
CString str;
m_zs.HideSelection(TRUE, FALSE);
m_zs.SendMessage(EM_SETEVENTMASK, 0, ~ENM_SELCHANGE);
m_zs.GetSel(start, end);
m_zs.SetSel(start, start + 1);
str = m_zs.GetSelText();
if (start != m_zss)
{
SpeakCh(str);
m_zss = start;
}
int i = str.GetLength();
m_zs.SetSel(start, end);
str = GetYin(str);
str = GetPY(str);
m_zx.SetWindowText(str);
UpdateData(0);
m_zs.HideSelection(FALSE, FALSE);
m_zs.SendMessage(EM_SETEVENTMASK, 0, ENM_SELCHANGE);
*pResult = 0;
}
void CPOEMDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(1);
m_ftxt.Trim();
m_fre.ResetContent();
if (m_ftxt == "")
{
return;
}
m_fstore = m_ftxt;
CAdoRecordSet *poem = new CAdoRecordSet(m_con);
CString sql = "select * from PoemN where Content like '%" + m_ftxt + "%'";
sql = sql + " order by Po_ID";
poem->Open(sql);
CString str = "";
if (poem->GetRecordCount() <=0 )
{
return;
}
while (!poem->IsEOF())
{
poem->GetValueString(str,1);
m_fre.AddString(str);
poem->MoveNext();
}
m_fre.SetCurSel(0);
OnCbnSelchangeZp2();
delete poem;
}
void CPOEMDlg::OnCbnSelchangeZp2()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
m_fre.GetLBText(m_fre.GetCurSel(), str);
MoveToZP(str);
m_flg = "F";
SetPoem();
}
void CPOEMDlg::OnBnClickedOk()
{
if (GetFocus()->m_hWnd == m_ftxtctrl.m_hWnd )
{
OnBnClickedButton2();
}
}
BOOL CPOEMDlg::FindSelStr(void)
{
long start, end, s, e, ys, ye;
BOOL f = 0;
WCHAR *wstr;
CString str;
m_gs.SendMessage(EM_SETEVENTMASK, 0, ~ENM_SELCHANGE);
m_gs.HideSelection(TRUE, FALSE);
m_gs.GetSel(ys, ye);
m_gs.SetSel(0, -1);
m_gs.GetSel(start, end);
wstr = new WCHAR[strlen(m_fstore)+1];
wsprintfW(wstr, L"%S", m_fstore);
for (s=0; s< end; s++)
{
e = s + wcslen(wstr);
m_gs.SetSel(s, e);
str = m_gs.GetSelText();
if (str == m_fstore)
{
f = 1;
break;
}
}
m_gs.HideSelection(FALSE, FALSE);
if (f == 0)
{
m_gs.SetSel(ys, ye);
}
else if (f == 1)
{
m_gs.SetSel(s, e);
}
m_gs.SendMessage(EM_SETEVENTMASK, 0, ENM_SELCHANGE);
delete wstr;
return 0;
}
HRESULT CPOEMDlg::VoiceChange(HWND hwnd)
/////////////////////////////////////////////////////////////////
//
// This function is called during initialization and whenever the
// selection for the voice combo box changes.
// It gets the token pointer associated with the voice.
// If the new voice is different from the one that's currently
// selected, it first stops any synthesis that is going on and
// sets the new voice on the global voice object.
//
{
HRESULT hr = S_OK;
GUID* pguidAudioFormat = NULL;
int iFormat = 0;
// Get the token associated with the selected voice
ISpObjectToken* pToken = SpGetCurSelComboBoxToken(hwnd);
//Determine if it is the current voice
CComPtr<ISpObjectToken> pOldToken;
hr = pVoice->GetVoice( &pOldToken );
if (SUCCEEDED(hr))
{
if (pOldToken != pToken)
{
// Stop speaking. This is not necesary, for the next call to work,
// but just to show that we are changing voices.
hr = pVoice->Speak( NULL, SPF_PURGEBEFORESPEAK, 0);
// And set the new voice on the global voice object
if (SUCCEEDED (hr) )
{
hr = pVoice->SetVoice(pToken);
}
}
}
return hr;
}
BOOL CPOEMDlg::SpeakCh(CString str)
{
WCHAR *pwstr = new WCHAR[strlen(str) + 1];
int old = cBox->GetCurSel();
int iCh = cBox->FindString(-1, "Microsoft Simplified Chinese");
pVoice->Speak( NULL, SPF_PURGEBEFORESPEAK, 0);
cBox->SetCurSel(iCh);
VoiceChange(cBox->m_hWnd);
wsprintfW(pwstr, L"%S", str);
pVoice->Speak(pwstr, SPF_ASYNC, 0);
delete pwstr;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -