⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seg7dlg.cpp

📁 12864 avr驱动程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -