📄 lakey.cpp
字号:
srand((unsigned)time(NULL ));
for (int i = 0; i < MAX_KOCH_SAMPLE; ++i)
{
if (0 < (i + 1) % (g_pGlobalSetting->m_nKochWordLen + 1))
{
g_vKochSample[i] = g_pGlobalSetting->m_vKochChar[rand() % nSampleRange];
}
else
{
g_vKochSample[i] = ' ';
}
}
}
#define TIMER_ELAPSETIME 101
// “抄报栏”框的消息处理程序。
LRESULT CALLBACK CopyPad(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static BOOL bFinished = FALSE;
static DWORD nTickCountStart = 0;
switch (message)
{
case WM_INITDIALOG:
{
bFinished = FALSE;
InitKochSample();
MessageBox(hDlg, "点击[确定]或按[回车]键开始...", "准备", MB_OK);
g_pMainWnd->PushText(g_vKochSample, MAX_KOCH_SAMPLE, 0);
SetTimer(hDlg, TIMER_ELAPSETIME, 220, NULL);
nTickCountStart = GetTickCount();
SendMessage(GetDlgItem(hDlg, IDC_COPYTEXT), EM_SETEVENTMASK, 0, ENM_CHANGE);
return TRUE;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_ACCEPT:
{
if (!bFinished)
{
KillTimer(hDlg, TIMER_ELAPSETIME);
g_pMainWnd->ClearQueue();
/*
char vBuff[MAX_KOCH_SAMPLE * 2 + 256];
memset(vBuff, 0, sizeof(vBuff));
GetDlgItemText(hDlg, IDC_COPYTEXT, g_vCopyText, MAX_KOCH_SAMPLE);
g_vCopyText[MAX_KOCH_SAMPLE] = NULL;
strcpy(vBuff, g_vCopyText);
strcat(vBuff, "\r\n----------------------------------------------------------------------------------\r\n");
strncat(vBuff, g_vKochSample, strlen(g_vCopyText));
SetDlgItemText(hDlg, IDC_COPYTEXT, vBuff);
*/
SetDlgItemText(hDlg, IDC_ACCEPT, "关闭");
bFinished = TRUE;
/*
CHARFORMAT fmt;
memset(&fmt, 0, sizeof(fmt));
fmt.cbSize = sizeof(fmt);
fmt.dwMask = CFM_COLOR;
fmt.crTextColor = (toupper(g_vCopyText[nCopied - 1]) == g_vKochSample[nCopied - 1] ? RGB(0, 0, 0) : RGB(255, 0, 0));
SendMessage((HWND)lParam, EM_SETCHARFORMAT, SCF_SELECTION, ((LPARAM)&fmt));
*/
break;
}
}
case IDCANCEL:
{
KillTimer(hDlg, TIMER_ELAPSETIME);
g_pMainWnd->ClearQueue();
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
case IDC_COPYTEXT:
{
if (EN_CHANGE == HIWORD(wParam))
{
g_vCopyText[MAX_KOCH_SAMPLE] = NULL;
GetDlgItemText(hDlg, IDC_COPYTEXT, g_vCopyText, MAX_KOCH_SAMPLE);
char vBuff[20];
int nCopied = (int)strlen(g_vCopyText);
sprintf(vBuff, "%d", nCopied);
SetDlgItemText(hDlg, IDC_COPIED, vBuff);
int nCorrect = 0;
for (int i = 0; i < nCopied; ++i)
{
if (toupper(g_vCopyText[i]) == g_vKochSample[i])
++nCorrect;
}
sprintf(vBuff, "%d", nCopied - nCorrect);
SetDlgItemText(hDlg, IDC_INCORRECT, vBuff);
if (0 < nCopied)
sprintf(vBuff, "%2.1f%%", 100.0f * nCorrect / nCopied);
else
sprintf(vBuff, "%%");
SetDlgItemText(hDlg, IDC_CORRECTPERC, vBuff);
HWND hCopyText = (HWND)lParam;
CHARRANGE oRange;
oRange.cpMin = nCopied - 1;
oRange.cpMax = nCopied;
SendMessage(hCopyText, EM_EXSETSEL, 0, ((LPARAM)&oRange));
CHARFORMAT fmt;
memset(&fmt, 0, sizeof(fmt));
fmt.cbSize = sizeof(fmt);
fmt.dwMask = CFM_COLOR;
fmt.crTextColor = (toupper(g_vCopyText[nCopied - 1]) == g_vKochSample[nCopied - 1] ? RGB(0, 0, 0) : RGB(255, 0, 0));
SendMessage(hCopyText, EM_SETCHARFORMAT, SCF_SELECTION, ((LPARAM)&fmt));
oRange.cpMin = oRange.cpMax;
SendMessage(hCopyText, EM_EXSETSEL, 0, ((LPARAM)&oRange));
return 0;
}
break;
}
}
break;
}
/* case WM_NOTIFY:
{
if (IDC_COPYTEXT == wParam)
{
LPNMHDR pNMHDR = (LPNMHDR)lParam;
switch(pNMHDR->code)
{
case EN_SELCHANGE:
{
g_vCopyText[MAX_KOCH_SAMPLE] = NULL;
GetDlgItemText(hDlg, IDC_COPYTEXT, g_vCopyText, MAX_KOCH_SAMPLE);
char vBuff[20];
int nCopied = (int)strlen(g_vCopyText);
sprintf(vBuff, "%d", nCopied);
SetDlgItemText(hDlg, IDC_COPIED, vBuff);
int nCorrect = 0;
for (int i = 0; i < nCopied; ++i)
{
if (toupper(g_vCopyText[i]) == g_vKochSample[i])
++nCorrect;
}
sprintf(vBuff, "%d", nCopied - nCorrect);
SetDlgItemText(hDlg, IDC_INCORRECT, vBuff);
if (0 < nCopied)
sprintf(vBuff, "%2.1f%%", 100.0f * nCorrect / nCopied);
else
sprintf(vBuff, "%%");
SetDlgItemText(hDlg, IDC_CORRECTPERC, vBuff);
CHARFORMAT fmt;
memset(&fmt, 0, sizeof(fmt));
fmt.cbSize = sizeof(fmt);
fmt.dwMask = CFM_COLOR;
fmt.crTextColor = (toupper(g_vCopyText[nCopied - 1]) == g_vKochSample[nCopied - 1] ? RGB(0, 0, 0) : RGB(255, 0, 0));
SendMessage((HWND)lParam, EM_SETCHARFORMAT, SCF_SELECTION, ((LPARAM)&fmt));
break;
}
}
}
break;
}
*/
case WM_TIMER:
{
if (TIMER_ELAPSETIME == wParam)
{
DWORD nTickCount = (GetTickCount() - nTickCountStart) / 1000;
DWORD nSec = nTickCount % 60;
DWORD nMin = (nTickCount /= 60) % 60;
DWORD nHour = nTickCount / 60;
char vBuff[20];
sprintf(vBuff, "%2.2d:%2.2d:%2.2d", nHour, nMin, nSec);
SetDlgItemText(hDlg, IDC_ELAPSETIME, vBuff);
return TRUE;
}
break;
}
}
return FALSE;
}
LRESULT CALLBACK TestDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
const char* ConvertKochPathname(char* pDest, const char* pSrc, int nBuffLen)
{
int nLen = strlen(pSrc);
int i;
for (i = 0; i < nBuffLen - 20 && i < nLen; ++i)
{
pDest[i] = (isalpha(pSrc[i]) ? pSrc[i] : '_');
}
strcpy(pDest + i, ".wav");
return pDest;
}
void PromptToWave(HWND hWnd)
{
char vDestPathname[260];
ConvertKochPathname(vDestPathname, g_vPromptBuff, 256);
TextToAskWave(vDestPathname, sizeof(vDestPathname), g_vPromptBuff, strlen(g_vPromptBuff), hWnd);
}
void KochToWave(HWND hWnd)
{
InitKochSample();
char vDestPathname[260];
ConvertKochPathname(vDestPathname, g_pGlobalSetting->m_vKochChar, 256);
TextToAskWave(vDestPathname, sizeof(vDestPathname), g_vKochSample, MAX_KOCH_SAMPLE, hWnd);
}
void TextToAskWave(char* pWavePathBuff, int nWavePathBuffSize, const char* pBuff, int nCount, HWND hWnd)
{
OPENFILENAME ofn; // common dialog box structure
HANDLE hf; // file handle
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = pWavePathBuff;
ofn.nMaxFile = nWavePathBuffSize;
ofn.lpstrFilter = "All\0*.*\0Wave\0*.wav\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST;
// Display the Open dialog box.
if (GetOpenFileName(&ofn))
{
TextToWave(ofn.lpstrFile, pBuff, nCount, 0);
}
}
void TextToWave(const char* pPathname, const char* pTxt, int nTxtLen, int nWordLen)
{
CWaveFile oWaveFile(pPathname, 1, 8000, 16, g_pGlobalSetting->m_nLongHit / 999.0);
oWaveFile.SetFreq(g_pGlobalSetting->m_rBeepFreq);
oWaveFile.SetVolumn(g_pGlobalSetting->m_rBeepVol);
for (int i = 0; i < nTxtLen; ++i)
{
char ch = pTxt[i];
MORSECODE* pMorse = &(g_pGlobalSetting->m_vMorseCode[MORSECODECOUNT - 1]);
for (int j = 0; j < MORSECODECOUNT; ++j)
{
MORSECODE* p = &(g_pGlobalSetting->m_vMorseCode[j]);
if (ch == p->nAscCode || ch + ('A' - 'a') == p->nAscCode)
{
pMorse = p;
break;
}
}
if ('_' != pMorse->nAscCode)
{
int nWindow = pMorse->nMask + 1;
while(nWindow >>= 1)
{
int nHitCount =
nWindow & pMorse->nMorseCode ?
g_pGlobalSetting->m_nShortHit : g_pGlobalSetting->m_nLongHit;
oWaveFile.Append(nHitCount / 1000.0);
oWaveFile.AppendBlank(g_pGlobalSetting->m_nHitDelay / 1000.0);
}
oWaveFile.AppendBlank(g_pGlobalSetting->m_nLetterDelay / 1000.0);
}
else
{
oWaveFile.AppendBlank(g_pGlobalSetting->m_nWordDelay / 1000.0);
}
if (0 < nWordLen && 0 == (i + 1) % nWordLen)
oWaveFile.AppendBlank(g_pGlobalSetting->m_nWordDelay / 1000.0);
}
}
LRESULT CALLBACK PromptProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
SetDlgItemText(hDlg, IDC_PROMPTTEXT, g_vPromptText);
SetDlgItemText(hDlg, IDC_INPUTSTR, g_vPromptBuff);
return TRUE;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
{
GetDlgItemText(hDlg, IDC_INPUTSTR, g_vPromptBuff, sizeof(g_vPromptBuff));
EndDialog(hDlg, 1);
return TRUE;
}
case IDCANCEL:
{
EndDialog(hDlg, 0);
return TRUE;
}
}
break;
}
}
return FALSE;
}
void Test(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// mytest();
/*
HANDLE hCom;
DWORD dwError;
char* pPortName =
// "LPT1";
"COM6";
hCom =
CreateFile(pPortName, // 文件名
GENERIC_READ | GENERIC_WRITE, // 允许读和写
0, // 独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重叠方式
NULL
);
if (hCom == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
MessageBox(hWnd, "有错误", "ERROR", MB_OK);
}
if (hCom)
CloseHandle(hCom);
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -