📄 code.txt
字号:
HCURSOR CAsDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAsDlg::sift_press(HEAPSORT *p[], int k, int i, int l)
{
int m,n;
char *t;
HEAPSORT *w;
t=(*p[i+k]).press;w=p[i+k];n=2*(i+1)-1;m=i;
while(n<=l-1)
{
if((n<l-1)&&(strcmp((*p[n+k]).press,(*p[n+k+1]).press)<0))
n=n+1;
if(strcmp(t,(*p[n+k]).press)<0)
{
p[m+k]=p[n+k];
m=n;n=2*(m+1)-1;
}
else n=l;
}
p[m+k]=w;
return;
}
void CAsDlg::sift_unknow(HEAPSORT *p[], int k, int i, int l)
{
int m,n;
char *t;
HEAPSORT *w;
t=(*p[i+k]).unknow;w=p[i+k];n=2*(i+1)-1;m=i;
while(n<=l-1)
{
if((n<l-1)&&(strcmp((*p[n+k]).unknow,(*p[n+k+1]).unknow)<0))
n=n+1;
if(strcmp(t,(*p[n+k]).unknow)<0)
{
p[m+k]=p[n+k];
m=n;n=2*(m+1)-1;
}
else n=l;
}
p[m+k]=w;
return;
}
void CAsDlg::sift_kind(HEAPSORT *p[], int k, int i, int l)
{
int m,n;
char *t;
HEAPSORT *w;
t=(*p[i+k]).kind;w=p[i+k];n=2*(i+1)-1;m=i;
while(n<=l-1)
{
if((n<l-1)&&(strcmp((*p[n+k]).kind,(*p[n+k+1]).kind)<0))
n=n+1;
if(strcmp(t,(*p[n+k]).kind)<0)
{
p[m+k]=p[n+k];
m=n;n=2*(m+1)-1;
}
else n=l;
}
p[m+k]=w;
return;
}
void CAsDlg::mtheap(HEAPSORT *p[], int n, int k, int m, void (*sift)(HEAPSORT *p[], int k, int i, int l))
{
int i,l;
HEAPSORT *w;
if(k<0) k=0;
if(m>n-1) m=n-1;
l=m-k+1;
for(i=l/2-1;i>=0;i--)
(*sift)(p,k,i,l);
for(i=l-1;i>=1;i--)
{
w=p[k];p[k]=p[i+k];p[i+k]=w;
(*sift)(p,k,0,i);
}
return;
}
void CAsDlg::OnBtStart()
{
// TODO: Add your control notification handler code here
int nCount = m_List1.GetItemCount();
if (nCount <= 0)
{
return;
}
if (pStru != NULL)
{
delete [] pStru;
pStru = NULL;
}
pStru = new HEAPSORT[nCount];
memset(pStru, 0, sizeof(HEAPSORT) * nCount);
int nIndex = 0;
CString str;
while (nIndex < nCount)
{
str = m_List1.GetItemText(nIndex, 0);
strncpy(pStru[nIndex].press, str, 11);
str = m_List1.GetItemText(nIndex, 1);
strncpy(pStru[nIndex].unknow, str, 11);
str = m_List1.GetItemText(nIndex, 2);
strncpy(pStru[nIndex].kind, str, 11);
nIndex += 1;
}
switch(m_select.GetCurSel())
{
case 0:
press(nCount);
break;
case 1:
unknow(nCount);
break;
case 2:
kind(nCount);
break;
}
nIndex = 0;
nCount = m_List2.GetItemCount();
while (nIndex < nCount)
{
if (m_List2.GetItemText(nIndex, 0) == newStru.press &&
m_List2.GetItemText(nIndex, 1) == newStru.unknow &&
m_List2.GetItemText(nIndex, 2) == newStru.kind)
{
break;
}
nIndex += 1;
}
nIndex = nIndex % nCount;
// m_List2.SetSelectionMark(4);
m_List2.SetHotItem(nIndex);
}
void CAsDlg::OnBtReadData()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文本文件(*.txt) |*.txt||",NULL);
if (dlg.DoModal() == IDOK)
{
m_List1.DeleteAllItems();
FILE *fp;
char buf[1024] = {0};
CString str;
int nIndex = 0;
if ((fp = fopen(dlg.m_ofn.lpstrFile,"r")) == NULL)
{
str.Format("打不开文件%s", dlg.m_ofn.lpstrFile);
MessageBox(str, "提示", MB_OK | MB_ICONWARNING);
}
else
{
while (feof(fp) == 0)
{
fgets(buf, 1023, fp);
str = buf;
str.TrimLeft();
str.TrimRight();
m_List1.InsertItem(nIndex, str.Left(str.Find(" ")));
str.Delete(0, str.Find(" "));
str.TrimLeft();
str.TrimRight();
m_List1.SetItemText(nIndex, 1, str.Left(str.Find(" ")));
str.Delete(0, str.Find(" "));
str.TrimLeft();
str.TrimRight();
m_List1.SetItemText(nIndex, 2, str);
nIndex+=1;
}
fclose(fp);
}
}
}
void CAsDlg::press(int nCount)
{
m_List2.DeleteAllItems();
HEAPSORT **p = new HEAPSORT*[nCount];
for (int i =0; i < nCount; i++)
p[i] = &pStru[i];
mtheap(p,nCount,0,nCount-1, sift_press);
i = 0;
int nIndex = 0;
while (i < nCount)
{
m_List2.InsertItem(nIndex, p[i]->press);
m_List2.SetItemText(nIndex, 1, p[i]->unknow);
m_List2.SetItemText(nIndex, 2, p[i]->kind);
nIndex += 1;
if (i < nCount-1 && strcmp(p[i]->press, p[i+1]->press) != 0)
{
m_List2.InsertItem(nIndex, "");
nIndex += 1;
}
i += 1;
}
delete [] p;
}
void CAsDlg::unknow(int nCount)
{
m_List2.DeleteAllItems();
HEAPSORT **p = new HEAPSORT*[nCount];
for (int i =0; i < nCount; i++)
p[i] = &pStru[i];
mtheap(p,nCount,0,nCount-1, sift_unknow);
i = 0;
int nIndex = 0;
while (i < nCount)
{
m_List2.InsertItem(nIndex, p[i]->press);
m_List2.SetItemText(nIndex, 1, p[i]->unknow);
m_List2.SetItemText(nIndex, 2, p[i]->kind);
nIndex += 1;
if (i < nCount-1 && strcmp(p[i]->unknow, p[i+1]->unknow) != 0)
{
m_List2.InsertItem(nIndex, "");
nIndex += 1;
}
i += 1;
}
delete [] p;
}
void CAsDlg::kind(int nCount)
{
m_List2.DeleteAllItems();
HEAPSORT **p = new HEAPSORT*[nCount];
for (int i =0; i < nCount; i++)
p[i] = &pStru[i];
mtheap(p,nCount,0,nCount-1, sift_kind);
i = 0;
int nIndex = 0;
while (i < nCount)
{
m_List2.InsertItem(nIndex, p[i]->press);
m_List2.SetItemText(nIndex, 1, p[i]->unknow);
m_List2.SetItemText(nIndex, 2, p[i]->kind);
nIndex += 1;
if (i < nCount-1 && strcmp(p[i]->kind, p[i+1]->kind) != 0)
{
m_List2.InsertItem(nIndex, "");
nIndex += 1;
}
i += 1;
}
delete [] p;
}
void CAsDlg::OnOK()
{
// TODO: Add extra validation here
if (pStru != NULL)
{
delete [] pStru;
}
CDialog::OnOK();
}
BOOL CAsDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_ESCAPE)
{
return TRUE;
}
else if (pMsg->wParam == VK_RETURN)
{
switch(nEnter)
{
case 1:
m_code2.SetFocus(); break;
case 2:
m_code3.SetFocus(); break;
case 3:
UpdateData();
int nIndex = 0;
memset(&newStru, 0, sizeof(HEAPSORT));
m_List1.InsertItem(nIndex, m_strCode1);
m_List1.SetItemText(nIndex, 1, m_strCode2);
m_List1.SetItemText(nIndex, 2, m_strCode3);
strcpy(newStru.press, m_strCode1);
strcpy(newStru.unknow, m_strCode2);
strcpy(newStru.kind, m_strCode3);
GetDlgItem(IDC_BT_START)->SetFocus();
break;
}
nEnter += 1;
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CAsDlg::OnSetfocusCode1()
{
// TODO: Add your control notification handler code here
nEnter = 1;
m_code1.SetWindowText("");
m_code2.SetWindowText("");
m_code3.SetWindowText("");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -