📄 seg7dlg.cpp
字号:
DDX_Control(pDX, IDC_COMBO4, combo_d);
DDX_Control(pDX, IDC_COMBO3, combo_c);
DDX_Control(pDX, IDC_COMBO2, combo_b);
DDX_Control(pDX, IDC_COMBO1, combo_a);
DDX_CBIndex(pDX, IDC_COMBO1, a_index);
DDX_CBIndex(pDX, IDC_COMBO2, b_index);
DDX_CBIndex(pDX, IDC_COMBO3, c_index);
DDX_CBIndex(pDX, IDC_COMBO4, d_index);
DDX_CBIndex(pDX, IDC_COMBO5, e_index);
DDX_CBIndex(pDX, IDC_COMBO6, f_index);
DDX_CBIndex(pDX, IDC_COMBO7, g_index);
DDX_CBIndex(pDX, IDC_COMBO8, h_index);
DDX_CBIndex(pDX, IDC_COMBO10, language_index);
DDX_CBIndex(pDX, IDC_COMBO9, ledak_index);
DDX_Text(pDX, IDC_EDIT_NOTE, note_string);
DDX_Text(pDX, IDC_EDIT_OUTPUT, output_string);
DDX_Radio(pDX, IDC_RADIO_HEX, opt_radix);
DDX_Check(pDX, IDC_CHK_SELECTALL, check_selectall);
DDX_Check(pDX, IDC_CHK_UPPERCASE, check_uppercase);
//}}AFX_DATA_MAP
//控件数组的数据映射要放在微软件注释外面,否则不能使用类向导
DDX_Check(pDX, IDC_CHK_NUMBER, check_char[0]);
DDX_Check(pDX, IDC_CHK_CHAR_A, check_char[1]);
DDX_Check(pDX, IDC_CHK_SCHAR_B, check_char[2]);
DDX_Check(pDX, IDC_CHK_CHAR_C, check_char[3]);
DDX_Check(pDX, IDC_CHK_CHAR_E, check_char[6]);
DDX_Check(pDX, IDC_CHK_CHAR_F, check_char[7]);
DDX_Check(pDX, IDC_CHK_CHAR_H, check_char[8]);
DDX_Check(pDX, IDC_CHK_CHAR_L, check_char[10]);
DDX_Check(pDX, IDC_CHK_CHAR_N, check_char[11]);
DDX_Check(pDX, IDC_CHK_CHAR_P, check_char[14]);
DDX_Check(pDX, IDC_CHK_CHAR_U, check_char[17]);
DDX_Check(pDX, IDC_CHK_CHAR_LINE, check_char[18]);
DDX_Check(pDX, IDC_CHK_SCHAR_C, check_char[4]);
DDX_Check(pDX, IDC_CHK_SCHAR_D, check_char[5]);
DDX_Check(pDX, IDC_CHK_SCHAR_H, check_char[9]);
DDX_Check(pDX, IDC_CHK_SCHAR_N, check_char[12]);
DDX_Check(pDX, IDC_CHK_SCHAR_O, check_char[13]);
DDX_Check(pDX, IDC_CHK_SCHAR_R, check_char[15]);
DDX_Check(pDX, IDC_CHK_SCHAR_T, check_char[16]);
}
BEGIN_MESSAGE_MAP(CSEG7Dlg, CDialog)
//{{AFX_MSG_MAP(CSEG7Dlg)
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONUP()
ON_WM_RBUTTONDOWN()
ON_WM_MBUTTONUP()
ON_WM_MBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BTN_AUTO, OnBtnAuto)
ON_BN_CLICKED(IDC_BTN_RESET_PIN, OnBtnResetPin)
ON_BN_CLICKED(IDC_BTN_COPY, OnBtnCopy)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeCombo3)
ON_CBN_SELCHANGE(IDC_COMBO4, OnSelchangeCombo4)
ON_CBN_SELCHANGE(IDC_COMBO5, OnSelchangeCombo5)
ON_CBN_SELCHANGE(IDC_COMBO6, OnSelchangeCombo6)
ON_CBN_SELCHANGE(IDC_COMBO7, OnSelchangeCombo7)
ON_CBN_SELCHANGE(IDC_COMBO8, OnSelchangeCombo8)
ON_EN_SETFOCUS(IDC_EDIT_NOTE, OnSetfocusEditNote)
ON_CBN_SELCHANGE(IDC_COMBO9, OnSelchangeCombo9)
ON_CBN_SELCHANGE(IDC_COMBO10, OnSelchangeCombo10)
ON_BN_CLICKED(IDC_BTN_SET, OnBtnSet)
ON_BN_CLICKED(IDC_CHK_NUMBER, OnChkNumber)
ON_BN_CLICKED(IDC_CHK_CHAR_A, OnChkCharA)
ON_BN_CLICKED(IDC_CHK_SCHAR_B, OnChkScharB)
ON_BN_CLICKED(IDC_CHK_CHAR_C, OnChkCharC)
ON_BN_CLICKED(IDC_CHK_SCHAR_C, OnChkScharC)
ON_BN_CLICKED(IDC_CHK_SCHAR_D, OnChkScharD)
ON_BN_CLICKED(IDC_CHK_CHAR_E, OnChkCharE)
ON_BN_CLICKED(IDC_CHK_CHAR_F, OnChkCharF)
ON_BN_CLICKED(IDC_CHK_CHAR_H, OnChkCharH)
ON_BN_CLICKED(IDC_CHK_SCHAR_H, OnChkScharH)
ON_BN_CLICKED(IDC_CHK_CHAR_L, OnChkCharL)
ON_BN_CLICKED(IDC_CHK_CHAR_N, OnChkCharN)
ON_BN_CLICKED(IDC_CHK_SCHAR_N, OnChkScharN)
ON_BN_CLICKED(IDC_CHK_SCHAR_O, OnChkScharO)
ON_BN_CLICKED(IDC_CHK_CHAR_P, OnChkCharP)
ON_BN_CLICKED(IDC_CHK_SCHAR_R, OnChkScharR)
ON_BN_CLICKED(IDC_CHK_SCHAR_T, OnChkScharT)
ON_BN_CLICKED(IDC_CHK_CHAR_U, OnChkCharU)
ON_BN_CLICKED(IDC_CHK_CHAR_LINE, OnChkCharLine)
ON_BN_CLICKED(IDC_CHK_SELECTALL, OnChkSelectall)
ON_BN_CLICKED(IDC_BTN_CLEAR, OnBtnClear)
ON_BN_CLICKED(IDC_BTN_MAL, OnBtnMal)
ON_BN_CLICKED(IDC_CHK_UPPERCASE, OnChkUppercase)
ON_BN_CLICKED(IDC_RADIO_HEX, OnRadioHex)
ON_BN_CLICKED(IDC_RADIO_BIN, OnRadioBin)
ON_BN_CLICKED(IDC_RADIO_DEC, OnRadioDec)
ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
ON_BN_CLICKED(IDC_BTN_SAVE_PIN, OnBtnSavePin)
ON_WM_CHAR()
ON_WM_SYSCOMMAND() //拦截系统消息,以处理自定义菜单
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSEG7Dlg message handlers
BOOL CSEG7Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
CMenu *sysmenu = this->GetSystemMenu(false);
sysmenu->AppendMenu(MF_SEPARATOR);
sysmenu->AppendMenu(MF_STRING, IDM_MENU_ABOUT, "tomhe666...");
//UINT ss=sysmenu->GetMenuItemID(8);
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
SetClassLong(this->m_hWnd,GCL_HCURSOR,NULL); //使用一个空的光标,使光标闪烁,方便在MouseMove中处理光标
brush_white.CreateSolidBrush(RGB(255,255,255));
brush_yellow.CreateSolidBrush(RGB(255,255,0));
brush_blue.CreateSolidBrush(RGB(0,0,255));
brush_bkcolor.CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); //得到背景色,好像是错的
brush_null.CreateSolidBrush(NULL); //使用一个空的背景色刷子
brush_red.CreateSolidBrush(RGB(255,0,0));
pen_blue.CreatePen(PS_SOLID,1,RGB(0,0,255));
//Button_Auto.SetIcon(AfxGetApp()->LoadIcon(IDI_CHECKRIGHT)); //设置按钮图标,要按钮选中了图标属性才可有用
inifile.SetFileName(AppPath+"Led.ini",true); //初始化INI文件,如果文件不存在,则创建文件并进行初始化
ReadConfig(inifile.GetIniFileName());
PinErrFlag=CheckPinErr();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSEG7Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.SetBkMode(TRANSPARENT); //透明文字背景
dc.SelectObject(&pen_blue); //设置画笔
for(unsigned int i=0;i<8;i++)
{
if(segstatus[i]) //不用再循环,因为此时i就代表了所点击的段
{
dc.SelectObject(&brush_red); //设置画刷
dc.SetTextColor(RGB(255,255,255)); //设置白色字体
}//if
else
{
dc.SelectObject(&brush_white); //设置画刷
dc.SetTextColor(RGB(255,0,0)); //设置红色字体
}//else
dc.Ellipse(*((CRect*)seglocation[i])); //画对应的圆
dc.TextOut(namelocation[i][0],namelocation[i][1],segname[i],1);
} //for
if(PinErrFlag)
{
dc.DrawIcon(CHK_ICON_X,CHK_ICON_Y,AfxGetApp()->LoadIcon(IDI_CHECKERROR));
} //if
else
{
dc.DrawIcon(CHK_ICON_X,CHK_ICON_Y,AfxGetApp()->LoadIcon(IDI_CHECKRIGHT));
}//else
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSEG7Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/*鼠标按键消息处理函数*/
void CSEG7Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
bool flag=false; //指示是否改变了段显示
for(unsigned int i=0;i<8;i++)
{
if(point.x>seglocation[i][0] && point.x<seglocation[i][2] && point.y>seglocation[i][1] && point.y<seglocation[i][3])
{
segstatus[i]=!segstatus[i];
flag=true;
::SetCursor(AfxGetApp()->LoadCursor(IDC_MYHANDPRESS));
break;
}
}
if(flag) //如果有单击到数码管段上,则重绘数码管的显示
{
ReDrawSeg(i);
}
}
void CSEG7Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
bool flag=false; //指示是否改变了段显示
for(unsigned int i=0;i<8;i++)
{
if(point.x>seglocation[i][0] && point.x<seglocation[i][2] && point.y>seglocation[i][1] && point.y<seglocation[i][3])
{
flag=true;
::SetCursor(AfxGetApp()->LoadCursor(IDC_MYHAND)); //设置光标
break;
}
}
}
void CSEG7Dlg::OnRButtonDown(UINT nFlags, CPoint point)
{
}
void CSEG7Dlg::OnRButtonUp(UINT nFlags, CPoint point)
{
}
void CSEG7Dlg::OnMButtonDown(UINT nFlags, CPoint point)
{
}
void CSEG7Dlg::OnMButtonUp(UINT nFlags, CPoint point)
{
}
////////////////鼠标移动代码/////////////////////////
void CSEG7Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
//此处可插入改变光标状态的代码
bool flag=false; //指示是否改变了段显示
for(unsigned int i=0;i<8;i++)
{
if(point.x>seglocation[i][0] && point.x<seglocation[i][2] && point.y>seglocation[i][1] && point.y<seglocation[i][3])
{
flag=true;
break;
}
}
if(flag)
{
if(nFlags==1)
{
::SetCursor(AfxGetApp()->LoadCursor(IDC_MYHANDPRESS));
}
else
{
::SetCursor(AfxGetApp()->LoadCursor(IDC_MYHAND));
}
}
else
{
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}
}
HBRUSH CSEG7Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); //取当前控件的背景色
//COLORREF bkcolor=::GetBkColor(GetDC()->m_hDC);v //取背景色,好像不正确,也许是全局背景色
// TODO: Change any attributes of the DC here
//指定编辑框颜色
if(pWnd->GetDlgCtrlID()==IDC_EDIT_OUTPUT) //只改变指定ID的编辑框名称
{
pDC->SetBkColor(RGB(255,255,0)); //黄色
pDC->SetTextColor(RGB(0,0,255));
return brush_white; //无文字部分的颜色
}
if(pWnd->GetDlgCtrlID()==IDC_EDIT_NOTE) //只改变指定ID的编辑框名称
{
pDC->SetBkColor(RGB(255,255,0)); //黄色
pDC->SetTextColor(RGB(0,0,255));
return brush_white; //无文字部分的颜色
}
//所有编辑框颜色
if(nCtlColor==CTLCOLOR_EDIT)
{
pDC->SetBkColor(RGB(255,255,255)); //黄色
pDC->SetTextColor(RGB(0,0,255));
return brush_white; //无文字部分的颜色
}
//列表框颜色所有列表框的颜色
if(nCtlColor==CTLCOLOR_LISTBOX)
{
pDC->SetBkColor(RGB(255,255,255)); //白色
pDC->SetTextColor(RGB(0,0,255)); //蓝色
return brush_white; //有文字部分的颜色
}
//所有静态文本颜色的设置
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT); //设置透明背景色
pDC->SetTextColor(RGB(0,0,255));
return hbr; //不返回背景刷子则不改变背景
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
//管脚复位按钮
void CSEG7Dlg::OnBtnResetPin()
{
// TODO: Add your control notification handler code here
unsigned int i;
a_index=0;
b_index=1;
c_index=2;
d_index=3;
e_index=4;
f_index=5;
g_index=6;
h_index=7;
UpdateData(false);
segname[0][0]=pinnametab[a_index];
segname[1][0]=pinnametab[b_index];
segname[2][0]=pinnametab[c_index];
segname[3][0]=pinnametab[d_index];
segname[4][0]=pinnametab[e_index];
segname[5][0]=pinnametab[f_index];
segname[6][0]=pinnametab[g_index];
segname[7][0]=pinnametab[h_index];
CClientDC dc(this); // device context for painting
dc.SetBkMode(TRANSPARENT); //透明文字背景
dc.SelectObject(&pen_blue); //设置画笔
for(i=0; i<8; i++)
{
if(segstatus[i]) //不用再循环,因为此时i就代表了所点击的段
{
dc.SelectObject(&brush_red); //设置画刷
dc.SetTextColor(RGB(255,255,255)); //设置白色字体
}//if
else
{
dc.SelectObject(&brush_white); //设置画刷
dc.SetTextColor(RGB(255,0,0)); //设置红色字体
}//else
dc.Ellipse(*((CRect*)seglocation[i])); //画对应的圆
dc.TextOut(namelocation[i][0],namelocation[i][1],segname[i],1);
} //for
PinErrFlag=CheckPinErr(); //检测错误,并重绘图标
}
void CSEG7Dlg::OnBtnCopy()
{
// TODO: Add your control notification handler code here
// 手动保存管脚
UpdateData(true);
//以下这段内容把文本放置到剪贴板中
if(OpenClipboard()) //打开剪贴板
{
HGLOBAL clipbuffer; //定义剪贴板缓冲
char * buffer; //定义缓冲指针
EmptyClipboard(); //清空剪贴板
clipbuffer = GlobalAlloc(GMEM_DDESHARE, output_string.GetLength()+1); //申请缓冲内存
buffer = (char*)GlobalLock(clipbuffer); //锁定缓冲,并返回该缓冲指针
strcpy(buffer, LPCSTR(output_string)); //拷贝内容
GlobalUnlock(clipbuffer); //解锁缓冲区
SetClipboardData(CF_TEXT,clipbuffer); //设置内容
CloseClipboard(); //关闭
}
}
void CSEG7Dlg::OnSelchangeCombo1()
{
// TODO: Add your control notification handler code here
//UpdateData(true);
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[0][0]=pinnametab[a_index];
ReDrawSeg(0);
}
void CSEG7Dlg::OnSelchangeCombo2()
{
// TODO: Add your control notification handler code here
//UpdateData(true);
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[1][0]=pinnametab[b_index];
ReDrawSeg(1);
}
void CSEG7Dlg::OnSelchangeCombo3()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[2][0]=pinnametab[c_index];
ReDrawSeg(2);
}
void CSEG7Dlg::OnSelchangeCombo4()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[3][0]=pinnametab[d_index];
ReDrawSeg(3);
}
void CSEG7Dlg::OnSelchangeCombo5()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[4][0]=pinnametab[e_index];
ReDrawSeg(4);
}
void CSEG7Dlg::OnSelchangeCombo6()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[5][0]=pinnametab[f_index];
ReDrawSeg(5);
}
void CSEG7Dlg::OnSelchangeCombo7()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr();//包含了更新控件数据到变量
segname[6][0]=pinnametab[g_index];
ReDrawSeg(6);
}
void CSEG7Dlg::OnSelchangeCombo8()
{
// TODO: Add your control notification handler code here
PinErrFlag=CheckPinErr(); //包含了更新控件数据到变量
segname[7][0]=pinnametab[h_index];
ReDrawSeg(7);
}
void CSEG7Dlg::OnSetfocusEditNote()
{
// TODO: Add your control notification handler code here
edit_note.SetSel(0,65535,false); //获得焦点时选择所有的文本
}
void CSEG7Dlg::OnOK(void)
{
//防止按了回车键后会关闭对话框
}
void CSEG7Dlg::OnCancel()
{
//TO DO: 在此处添加关闭程序时的操作,可以保存数据
CDialog::OnCancel(); //关闭对话框的函数
}
void CSEG7Dlg::OnSelchangeCombo9()
{
// TODO: Add your control notification handler code here
UpdateData(true);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -