treectrlusedlg.cpp
来自「evc开发的ppc环境下的动态树控件的生成与检索」· C++ 代码 · 共 335 行
CPP
335 行
// TreeCtrlUseDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TreeCtrlUse.h"
#include "TreeCtrlUseDlg.h"
#include "TreeAttrDlg.h"
#include "PDABase.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*
void __stdcall _com_issue_error(HRESULT m_hr)
{
TCHAR pcszError[1024];
_stprintf(pcszError, TEXT("_com_issue_error(%ld)\n"), m_hr);
//OutputDebugString(pcszError);
}
int TreeSumRecordCount(CVOConnection * m_Conn,CString TableName,CString strFieldValue)
{
CString cdbName,strSQL;
CString strprefix[]={"1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
CVORecordset *m_Set;
m_Set=new CVORecordset(*m_Conn);
m_Set->Initialize();
for(int i=0;i<35;i++)
{
strSQL="select * from " + TableName + " where Layercode='" + strFieldValue + strprefix[i]+ "'";
BOOL bRet = m_Set->Open(strSQL,adOpenForwardOnly,adLockPessimistic);
if(bRet)
{
m_Set->Close();
//delete m_Conn;
delete m_Set;
return 1;
}
// else
// continue;
}
m_Set->Close();
//delete m_Conn;
delete m_Set;
return 0;
}
void TreeAddSubTree(CTreeCtrl& ctrlTree,CVOConnection * m_Conn,CString TableName,int FieldCode,int FieldValue,CString ParTree, CString strChildTree, HTREEITEM hPartItem)
{
if (strChildTree!="0")
{
HTREEITEM hCurrent;//当前节点句柄
CString cdbName,strSQL;
CVORecordset *m_Set;
m_Set=new CVORecordset(*m_Conn);
m_Set->Initialize();
CString strprefix[]={"1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
for(int i=0;i<35;i++)
{
strSQL="select * from " + TableName + " where Layercode='" + ParTree + strprefix[i]+ "'";
BOOL bRet = m_Set->Open(strSQL,adOpenForwardOnly,adLockPessimistic);
if(!bRet)
{
AfxMessageBox(_T("查询出错!"));
m_Set->Close();
delete m_Set;
//delete m_Conn;
return;
}
if(m_Set->IsBOF()||m_Set->IsEOF())
{
//AfxMessageBox(_T("数据库中没有相关记录!"));
m_Set->Close();
delete m_Set;
//delete m_Conn;
return;
}
m_Set->MoveFirst();
while(!m_Set->IsEOF())
{
CString strID=m_Set->GetFieldValueString(FieldCode);
CString string=m_Set->GetFieldValueString(FieldValue);
hCurrent=ctrlTree.InsertItem(TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT,
string, 0, 1, 0, 0, 0, hPartItem, NULL);
char ch[20];
int m;
for(m=0;m<strID.GetLength();m++)
{
ch[m]=strID.GetAt(m);
}
ch[m]='\0';
//strcpy(ch,(char*)strID.GetBuffer(20));
int id=atoi(ch);
ctrlTree.SetItemData(hCurrent,(DWORD)id);
if (TreeSumRecordCount(m_Conn,TableName,m_Set->GetFieldValueString(FieldCode))>0) //判断子节点
{
TreeAddSubTree(ctrlTree,m_Conn,TableName,FieldCode,FieldValue,m_Set->GetFieldValueString(FieldCode),m_Set->GetFieldValueString(FieldValue),hCurrent);
}
m_Set->MoveNext();
}
}
m_Set->Close();
//delete m_Conn;
delete m_Set;
}
}
BOOL MakeTreefromDB(CString title,CTreeCtrl& ctrlTree,CString DBName,CString TableName,int FieldCode,int FieldValue)
{
CVOConnection * pConn;
pConn=new CVOConnection(DBName);
//先添加树的根节点
TVINSERTSTRUCT tvInsert;//在树目录中添加新的项
tvInsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
tvInsert.item.iImage = 0;
tvInsert.item.iSelectedImage = 1;//当对象被选中时,显示图标索引
tvInsert.hParent = NULL;// If this member is the TVI_ROOT value or NULL
tvInsert.hInsertAfter = NULL;//Handle to the item after which the new item is to be inserted, or one of the following values.
tvInsert.item.pszText = (unsigned short *)title.GetBuffer(100);
HTREEITEM hParent = ctrlTree.InsertItem(&tvInsert);//--根节点;
//添加子节点
TreeAddSubTree(ctrlTree,pConn,TableName,FieldCode,FieldValue,"1","1",hParent);//layercode节点代号
delete pConn;
return TRUE;
}
*/
/////////////////////////////////////////////////////////////////////////////
// CTreeCtrlUseDlg dialog
CTreeCtrlUseDlg::CTreeCtrlUseDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTreeCtrlUseDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTreeCtrlUseDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTreeCtrlUseDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTreeCtrlUseDlg)
DDX_Control(pDX, IDC_TREE, m_ctrlTree);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTreeCtrlUseDlg, CDialog)
//{{AFX_MSG_MAP(CTreeCtrlUseDlg)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTreeCtrlUseDlg message handlers
BOOL CTreeCtrlUseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
//创建图片列表对象
m_pImgList = new CImageList();
m_pImgList->Create(24,16,TRUE,12,4);
//将预先定义好的两幅位图加载到图片列表中
CBitmap bmp;
bmp.LoadBitmap(IDB_BMPTREE);
m_pImgList->Add(&bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
bmp.LoadBitmap(IDB_BMPTREESELECTED);
m_pImgList->Add(&bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
//初始化树
InitTree();
return TRUE; // return TRUE unless you set the focus to a control
}
void CTreeCtrlUseDlg::OnDestroy()
{
CDialog::OnDestroy();
//释放创建的图片列表视图
delete m_pImgList;
}
//初始化树,用来加载树
void CTreeCtrlUseDlg::InitTree()
{
CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE);
ASSERT(pCtrl != NULL);
pCtrl->SetImageList(m_pImgList,TVSIL_NORMAL);
CString cdbName;
cdbName=_T("testdata2.cdb");
//MakeTreefromDB2(*pCtrl,cdbName,_T("testtable"),1,2);
MakeTreefromDB2(*pCtrl,cdbName,_T("CLINICAL"),0,2);
}
void CTreeCtrlUseDlg::OpenHtml(CString Layercode)
{
/*
CString s_Sql;
s_Sql = "SELECT content FROM testtable WHERE Layercode ='" + Layercode + "'";
//CVOConnection *m_Conn;
CVORecordset *m_Set;
//m_Conn=new CVOConnection(cdbName);
m_Set=new CVORecordset(*m_Conn);
m_Set->Initialize();
m_Set->Open(s_Sql,adOpenForwardOnly,adLockPessimistic);
CString html = m_Set->GetFieldValueString(0);
CFile myFile;
myFile.Open(L"\\show.HTML", CFile::modeWrite|CFile::modeCreate); //|CFile::modeNoTruncate);
CArchive ar(&myFile, CArchive::store);
ar<<html;
ar.Close();
myFile.Close();
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = TEXT("\\show.HTML");
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
m_Set->Close();
delete m_Set;
*/
}
void CTreeCtrlUseDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE);
ASSERT(pCtrl != NULL);
hTreeCurrent=m_ctrlTree.GetSelectedItem ();
hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
CString Layercode;
//判断是否是叶节点
if (m_ctrlTree.GetChildItem(hTreeCurrent)==NULL)
{//如果有子项则进行递归操作
DWORD id=pCtrl->GetItemData(pCtrl->GetSelectedItem());
Layercode.Format(_T("%d"),(int)id);
OpenHtml(Layercode);//打开html网页
//在状态栏上显示所选中树叶的标题
CStatic *pLblStatus = (CStatic*)GetDlgItem(IDC_STATUS);
pLblStatus->SetWindowText(pCtrl->GetItemText(pCtrl->GetSelectedItem()));
}
CStatic *pLblStatus = (CStatic*)GetDlgItem(IDC_STATUS);
pLblStatus->SetWindowText(pCtrl->GetItemText(pCtrl->GetSelectedItem()));
*pResult = 0;
}
void CTreeCtrlUseDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CStringArray ColName, ColDetail;
ColName.Add(_T("姓名"));
ColName.Add(_T("性别"));
ColDetail.Add(_T("王八"));
ColDetail.Add(_T("蛋"));
ShowHTML(ColName,ColDetail);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?