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

📄 sdgdbhdlg.cpp

📁 这是一套学校设备管理系统的源码 里面有树形结构使用的很棒的方法
💻 CPP
字号:
// sdgdbhdlg.cpp : implementation file
//

#include "stdafx.h"
#include "xxgl.h"
#include "sdgdbhdlg.h"
#include "yszmxzsbdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Csdgdbhdlg dialog
extern char g_id_buf[8000][7][3];
extern int end_g_id_buf;
extern char g_e_id[8000][15];
extern char g_e_code[8000][9];
extern char g_p_id[8000][9];
extern char g_e_name[8000][41];
extern char g_e_abbr[8000][11];
extern char g_a_id[8000][7];
extern char g_m_un[8000][9];
extern char g_c_pr[8000][20];
extern int g_end_sbs;
extern int g_parent[8000];
extern HTREEITEM g_htreeitem[8000];
extern HTREEITEM g_old_htreeitem;
extern int g_come_in_flag;
extern char g_f_buffer[20000];
extern int g_end_p;
extern int g_begin_p;
extern int g_cur_sb_search_pos;
extern int g_cur_rec;
extern int g_xzsb_flag;
extern int g_come_in_flag;
extern int g_last_sel;
extern int g_order_of_list[4000];
extern long g_end_of_yszm;
extern int g_yszm_sel_sb;
extern char g_rkfs_name[20][40];
extern int g_end_rkfs;

extern char g_yszm_xzsb_pass_buf[10];
extern int g_yszm_xzsb_flag;
extern int g_yszm_end_xinsb;

extern int g_xzsb_flag;
extern int g_lock_count_flag;

static int sel_flag;
static int out_flag;

int get_a_line(FILE *fpe,char buf[]);
void yszm_load_sbs(CTreeCtrl &m_tree);
switch_to_english_mode(CWnd *wnd);
switch_to_chinese_mode(CWnd *wnd);
Set_to_item_end(CWnd *wd,int id);
void load_sbtree(CTreeCtrl &m_tree);
void free_sbtree(CTreeCtrl &m_tree);

Csdgdbhdlg::Csdgdbhdlg(CWnd* pParent /*=NULL*/)
	: CDialog(Csdgdbhdlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(Csdgdbhdlg)
	m_gdbh = _T("");
	m_pjyx = _T("");
	m_sbmc = _T("");
	m_scdm = _T("");
	m_yqdm = _T("");
	//}}AFX_DATA_INIT
	sel_flag = 0;
	out_flag = 0;
}


void Csdgdbhdlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Csdgdbhdlg)
	DDX_Control(pDX, IDC_TREE1, m_tree);
	DDX_Text(pDX, IDC_gdbh, m_gdbh);
	DDX_Text(pDX, IDC_pyjx, m_pjyx);
	DDX_Text(pDX, IDC_sbmc, m_sbmc);
	DDX_Text(pDX, IDC_scdm, m_scdm);
	DDX_Text(pDX, IDC_yqdm, m_yqdm);
	//}}AFX_DATA_MAP
    if (out_flag == 0)
      yszm_load_sbs(m_tree);
	else
      free_sbtree(m_tree);
}


BEGIN_MESSAGE_MAP(Csdgdbhdlg, CDialog)
	//{{AFX_MSG_MAP(Csdgdbhdlg)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1)
	ON_EN_CHANGE(IDC_pyjx, OnChangepyjx)
	ON_EN_SETFOCUS(IDC_pyjx, OnSetfocuspyjx)
	ON_EN_CHANGE(IDC_sbmc, OnChangesbmc)
	ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREE1, OnItemexpandedTree1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Csdgdbhdlg message handlers

void Csdgdbhdlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	HTREEITEM htreeitem;
	int i,j;
	char buf[100];
	CString str;

	if (out_flag == 0){
	htreeitem = m_tree.GetSelectedItem();
	if (htreeitem != NULL){
	  if (g_old_htreeitem != htreeitem){
	   if (g_old_htreeitem != NULL){
		 m_tree.SetItemState(g_old_htreeitem,0,0xffff);
	   }
	  }
	  m_tree.Select(htreeitem,TVGN_FIRSTVISIBLE);
//	  m_tree.SelectItem(htreeitem);
	  m_tree.SetItemState(htreeitem,TVIS_DROPHILITED,0xffff);
	  g_old_htreeitem = htreeitem;

	  for (j=0;j<g_end_sbs;j++){
		if (g_htreeitem[j] == htreeitem){
			i = j;
			break;
        }
	  }

      g_yszm_sel_sb = i; 
	  g_yszm_xzsb_flag = 1;
      SetDlgItemText(IDC_pyjx,g_e_abbr[i]);
      Set_to_item_end(this,IDC_pyjx);
	  sel_flag = 1;
	  SetDlgItemText(IDC_sbmc,g_e_name[i]);
	  SetDlgItemText(IDC_gdbh,g_a_id[i]);
	  SetDlgItemText(IDC_yqdm,g_e_code[i]);
	  SetDlgItemText(IDC_scdm,g_p_id[i]);
    }
//    m_tree.Invalidate(TRUE);
//	CRect rect;
//    CWnd *wnd;
//	wnd = GetDlgItem(IDC_TREE1);
//	wnd->GetWindowRect(&rect);
//    m_tree.InvalidateRect(&rect,TRUE);
	m_tree.Invalidate(TRUE);
	}
//	m_tree. CTreeCtrl
	*pResult = 0;
}


void Csdgdbhdlg::OnChangepyjx() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	char buf[20];
	int i;
	long l;

	GetDlgItemText(IDC_pyjx,buf,20);
	l = strlen(buf);
	if (l > 0){
		for (i=0;i<l;i++){
	      if ((buf[i] < 'a')||(buf[i] > 'z')){
		    buf[i] = 0;
			SetDlgItemText(IDC_pyjx,buf);
			return;
//            Set_to_item_end(this,IDC_pyjx);
		  }
		}
	}
	if (strlen(buf) > 10){
		buf[10] = 0;
        SetDlgItemText(IDC_pyjx,buf);
		return;
//        Set_to_item_end(this,IDC_pyjx);
    }
	
	if (g_yszm_xzsb_flag == 0){
	  GetDlgItemText(IDC_pyjx,buf,20);
	  Cyszmxzsbdlg dlg;
	  g_yszm_xzsb_flag = 1;
      strcpy(g_yszm_xzsb_pass_buf,buf);
	  if (dlg.DoModal() == IDOK){
		i = g_yszm_sel_sb;
	    g_yszm_xzsb_flag = 1;
		SetDlgItemText(IDC_pyjx,g_e_abbr[i]);
	    sel_flag = 1;
		SetDlgItemText(IDC_sbmc,g_e_name[i]);
		SetDlgItemText(IDC_gdbh,g_a_id[i]);
		SetDlgItemText(IDC_yqdm,g_e_code[i]);
		SetDlgItemText(IDC_scdm,g_p_id[i]);
	    if (g_old_htreeitem != g_htreeitem[i]){
	      if (g_old_htreeitem != NULL){
		    m_tree.SetItemState(g_old_htreeitem,0,0xffff);
		  }
		}
	    m_tree.Select(g_htreeitem[i],TVGN_FIRSTVISIBLE);
	    m_tree.SetItemState(g_htreeitem[i],TVIS_DROPHILITED,0xffff);
	    g_old_htreeitem = g_htreeitem[i];
	    CWnd *wnd;
	    wnd = GetDlgItem(IDOK);
	    wnd->SetFocus();
	  }
	}
	else{
      g_yszm_xzsb_flag = 0;
    }
}

void Csdgdbhdlg::OnSetfocuspyjx() 
{
	// TODO: Add your control notification handler code here
    CWnd *wn;

	wn = GetDlgItem(IDC_pyjx);
	switch_to_english_mode(wn);
}

void Csdgdbhdlg::OnOK() 
{
	// TODO: Add extra validation here
	out_flag = 1;
    free_sbtree(m_tree);
	CDialog::OnOK();
}

void Csdgdbhdlg::OnChangesbmc() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	char buf[40];

	if (sel_flag == 1){
      sel_flag = 0;
	  GetDlgItemText(IDC_sbmc,buf,40);
	  if ((strstr(buf,"其他") != NULL)||(strstr(buf,"其它") != NULL)){
		CWnd *wnd;
		wnd = GetDlgItem(IDC_sbmc);
		wnd->EnableWindow(TRUE);
	  }
	  else{
		CWnd *wnd;
		wnd = GetDlgItem(IDC_sbmc);
		wnd->EnableWindow(FALSE);
	  }
	}
}

void Csdgdbhdlg::OnItemexpandedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	m_tree.Invalidate(TRUE);
	*pResult = 0;
}

void Csdgdbhdlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
    free_sbtree(m_tree);
	CDialog::OnCancel();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -