数据库管理系统MFC实现

1 篇文章 0 订阅
1 篇文章 0 订阅

1、materialDlg.h文件

// MateriaManagementDlg.h : 头文件
//

#pragma once
#include "afxcmn.h"
#include <vector>
#include "sqlite3.h"
#include "afxwin.h"
#include "afxshelltreectrl.h"
#include "afxshelllistctrl.h"
#include <vector>


// CMateriaManagementDlg 对话框
class CMateriaManagementDlg : public CDialogEx
{
// 构造
public:
	CMateriaManagementDlg(CWnd* pParent = NULL);	// 标准构造函数
	struct sqlSelect
	{
		CString proid;
		CString imagePosition;
	};
public:
	std::vector<sqlSelect> selVec;
	CString treeSel;
	CString fullPath;
// 对话框数据
	enum { IDD = IDD_MATERIAMANAGEMENT_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CTreeCtrl m_webTree;
	CImageList m_imageList;
	afx_msg void OnTvnSelchangedWebTree(NMHDR *pNMHDR, LRESULT *pResult);
	//std::wstring Utf82Unicode(const std::string& utf8string);
	char* U2G(const char* utf8);
	char* G2U(const char* gb2312);
	afx_msg void OnStnClickedStaticPng();
	afx_msg void OnStnClickedStaticPng1();
	afx_msg void OnStnClickedStaticMaterialText1();
	afx_msg void OnStnClickedStaticMaterialText8();
	void OnShowProPreviewImage(const CString strImagePath);
	void OnDrawBackGroundColor(CWnd *pWnd);
	void  CMateriaManagementDlg::showProducts();
	afx_msg void OnBnClickedButton1();
	void showLeaveProducts();
	void  clearPciture(int clearNum);
	afx_msg void OnBnClickedButton2();
	void deleteMaterial(CString &id);
	void deletedLoad();
	afx_msg void OnBnClickedButton3();
	afx_msg void OnBnClickedButton4();
	afx_msg void OnBnClickedButton5();
	afx_msg void OnBnClickedButton6();
	afx_msg void OnBnClickedButton7();
	afx_msg void OnBnClickedButton8();
	afx_msg void OnBnClickedButton9();
	afx_msg void OnBnClickedButton10();
	afx_msg void OnStnClickedStaticMaterialText3();
	afx_msg void OnEnChangeItemSelEdit();
	sqlite3* ConnectDatabase(const char* path);                    //返回数据库链接指针
	afx_msg void OnBnClickedButton11();
	afx_msg void OnCbnSelchangeCombo1();
	CComboBox m_prostyle;
	afx_msg void OnBnClickedButton12();
	afx_msg void OnEnChangeProId();
	afx_msg void OnEnChangeProName();
	afx_msg void OnEnChangeEdit3();
	afx_msg void OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult);
	CMFCShellTreeCtrl m_tree;
	afx_msg void OnEnChangeEditObj();
	afx_msg void OnEnChangeEdit2();
	afx_msg void OnCbnSelchangeCombo2();
	CComboBox m_comboWeb;
	afx_msg void OnLvnItemchangedMfcshelllist1(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnEnChangeEdit1();
	std::vector<const std::string> RecureDir(const std::string &full_path);
	afx_msg void OnEnChangeCompanyCode();
	afx_msg void OnEnChangeCopyStatus();
	CString  SelectTable(const std::string &selMaxID);
	std::string Convert(CString & select);
	void InsertMatrialInfo();
	bool DirDelete(CString &directory);
	CString Query(const std::string &selMaxID);
	/*表ProductInfo**************************************************************************************************/
	CString  m_proid;											//已赋值		
	CString  m_proname;											//已赋值
	CString	 m_pronodeid;										//已赋值
	CString	 m_prenodeid;										//已赋值
	CString  m_nodelayerid;										//已赋值
	CString  m_procorlor;										//已赋值
	CString  m_material;										//已赋值
	CString  m_style;											//已赋值
	CString  m_proremark;										//已赋值
	CString  m_proprice;										//已赋值
	CString  m_pronumber;										//已赋值
	CString  m_prolinkurl;										//已赋值				
	CString  m_proseller;										//已赋值
	CString  m_topimageview;									//已赋值
	CString  m_preimageview;									//已赋值
	CString  m_prozippath;										//已赋值
	CString  m_proobjpath;										//已赋值
	CString  m_proisdeleted;									//已赋值
	CString  m_proupdatetime;									//已赋值
	/*表MaterialInfo**************************************************************************************************/
	CString  m_materialid;									//已赋值
	CString  m_materialname;								//已赋值
	CString  m_materialnodeid;								//已赋值
	CString  m_materialstyle;								//已赋值
	CString  m_materialimagepath;							//已赋值
	CString  m_materialdeleted;								//已赋值
	CString  m_updatetime;									//已赋值
	CString  m_materialsizex;								//已赋值
	CString  m_materialsizey;								//已赋值
	CString  m_materialprice;								//已赋值	
	afx_msg void OnEnChangeInsertStatus();
};

2、materialDlg.cpp实现文件

// MateriaManagementDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "MateriaManagement.h"
#include "MateriaManagementDlg.h"
#include "afxdialogex.h"
#include "sqlite3.h"
#include <iostream>
#include <vector>
#include "SQLiteHelper.h"
#include <algorithm>
#include <iostream>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <boost/filesystem.hpp>
#include <boost/lexical_cast.hpp>
#include <Shlwapi.h>
#pragma comment(lib,"Shlwapi.lib")

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
char* AnsiToUTF_8(WCHAR szStr[])
{
	//	WCHAR szStr[] = _T("中国");

	int u8Len = WideCharToMultiByte(CP_UTF8, NULL, szStr, wcslen(szStr), NULL, 0, NULL, NULL);

	char * szU8 = new char[u8Len + 1];

	WideCharToMultiByte(CP_UTF8, NULL, szStr, wcslen(szStr), szU8, u8Len, NULL, NULL);

	szU8[u8Len] = '\0';

	printf(szU8);
	return szU8;
}
wchar_t* CharToWchar(const char* c)
{
	wchar_t* m_wchar = NULL;
	int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
	m_wchar = new wchar_t[len + 1];
	MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
	m_wchar[len] = '\0';
	return m_wchar;
}
wchar_t* StringTWchar(const std::string& s)
{
	const char* p = s.c_str();
	return CharToWchar(p);
}
CString utilDataDir(CString sub_path)
{
	WCHAR pFileName[1024];
	GetModuleFileName(NULL, pFileName, 1024);

	//housedesign/bin/debug/housedesign.exe
	CString fullPath(pFileName);

	// housedesign/bin/release
	int p0 = fullPath.ReverseFind('\\');
	int p1 = fullPath.ReverseFind('\/');
	int p = (std::max)(p0, p1);
	fullPath = fullPath.Mid(0, p);

	//  housedesign/bin
	p0 = fullPath.ReverseFind('\\');
	p1 = fullPath.ReverseFind('\/');
	p = (std::max)(p0, p1);
	fullPath = fullPath.Mid(0, p);

	//  housedesign
	p0 = fullPath.ReverseFind('\\');
	p1 = fullPath.ReverseFind('\/');
	p = (std::max)(p0, p1);
	fullPath = fullPath.Mid(0, p);

	//  housedesign/data/
	fullPath = fullPath + CString("\\MateriaManagement\\MateriaManagement\\data\\");

	//  housedesign/data/sub_path
	fullPath = fullPath + sub_path;
	return fullPath;
}
CString utilDataBaseDir(CString database_path_name)
{
	return utilDataDir(CString(_T("database\\")) + database_path_name);
}
//Unicode 转 Utf8
char* Unicode2Utf8(const std::wstring& widestring)
{
	int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);
	if (utf8size == 0)
	{
		throw std::exception("Error in conversion.");
	}
	//std::vector<char> resultstring(utf8size);
	char *szUtf8 = new char[utf8size + 1];
	memset(szUtf8, 0, utf8size + 1);
	int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, szUtf8/*&resultstring[0]*/, utf8size, NULL, NULL);
	if (convresult != utf8size)
	{
		throw std::exception("La falla!");
	}
	szUtf8[utf8size] = '\0';
	//return std::string(szUtf8/*&resultstring[0]*/);
	return szUtf8;
}
CString utilProductDir(CString product_path_name)
{
	return utilDataDir(CString(_T("products\\")) + product_path_name);
}
/*******************************************************以上都是加的函数********************************/
class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CMateriaManagementDlg 对话框



CMateriaManagementDlg::CMateriaManagementDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CMateriaManagementDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMateriaManagementDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_WEB_TREE, m_webTree);
	DDX_Control(pDX, IDC_COMBO1, m_prostyle);
	DDX_Control(pDX, IDC_MFCSHELLTREE1, m_tree);
	DDX_Control(pDX, IDC_COMBO2, m_comboWeb);
}

BEGIN_MESSAGE_MAP(CMateriaManagementDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_NOTIFY(TVN_SELCHANGED, IDC_WEB_TREE, &CMateriaManagementDlg::OnTvnSelchangedWebTree)
//	ON_STN_CLICKED(IDC_STATIC_PNG, &CMateriaManagementDlg::OnStnClickedStaticPng)
	ON_STN_CLICKED(IDC_STATIC_PNG1, &CMateriaManagementDlg::OnStnClickedStaticPng1)
	ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT1, &CMateriaManagementDlg::OnStnClickedStaticMaterialText1)
	ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT8, &CMateriaManagementDlg::OnStnClickedStaticMaterialText8)
	ON_BN_CLICKED(IDC_BUTTON1, &CMateriaManagementDlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &CMateriaManagementDlg::OnBnClickedButton2)
	ON_BN_CLICKED(IDC_BUTTON3, &CMateriaManagementDlg::OnBnClickedButton3)
	ON_BN_CLICKED(IDC_BUTTON4, &CMateriaManagementDlg::OnBnClickedButton4)
	ON_BN_CLICKED(IDC_BUTTON5, &CMateriaManagementDlg::OnBnClickedButton5)
	ON_BN_CLICKED(IDC_BUTTON6, &CMateriaManagementDlg::OnBnClickedButton6)
	ON_BN_CLICKED(IDC_BUTTON7, &CMateriaManagementDlg::OnBnClickedButton7)
	ON_BN_CLICKED(IDC_BUTTON8, &CMateriaManagementDlg::OnBnClickedButton8)
	ON_BN_CLICKED(IDC_BUTTON9, &CMateriaManagementDlg::OnBnClickedButton9)
	ON_BN_CLICKED(IDC_BUTTON10, &CMateriaManagementDlg::OnBnClickedButton10)
	ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT3, &CMateriaManagementDlg::OnStnClickedStaticMaterialText3)
	ON_EN_CHANGE(IDC_ITEM_SEL_EDIT, &CMateriaManagementDlg::OnEnChangeItemSelEdit)
	ON_BN_CLICKED(IDC_BUTTON11, &CMateriaManagementDlg::OnBnClickedButton11)
	ON_CBN_SELCHANGE(IDC_COMBO1, &CMateriaManagementDlg::OnCbnSelchangeCombo1)
	ON_BN_CLICKED(IDC_BUTTON12, &CMateriaManagementDlg::OnBnClickedButton12)
	ON_EN_CHANGE(IDC_PRO_NAME, &CMateriaManagementDlg::OnEnChangeProName)
	ON_EN_CHANGE(IDC_EDIT3, &CMateriaManagementDlg::OnEnChangeEdit3)
	ON_NOTIFY(TVN_SELCHANGED, IDC_MFCSHELLTREE1, &CMateriaManagementDlg::OnTvnSelchangedMfcshelltree1)
	ON_EN_CHANGE(IDC_EDIT_OBJ, &CMateriaManagementDlg::OnEnChangeEditObj)
	ON_EN_CHANGE(IDC_EDIT2, &CMateriaManagementDlg::OnEnChangeEdit2)
	ON_CBN_SELCHANGE(IDC_COMBO2, &CMateriaManagementDlg::OnCbnSelchangeCombo2)
	ON_EN_CHANGE(IDC_EDIT1, &CMateriaManagementDlg::OnEnChangeEdit1)
	ON_EN_CHANGE(IDC_COMPANY_CODE, &CMateriaManagementDlg::OnEnChangeCompanyCode)
	ON_EN_CHANGE(IDC_COPY_STATUS, &CMateriaManagementDlg::OnEnChangeCopyStatus)
	ON_EN_CHANGE(IDC_INSERT_STATUS, &CMateriaManagementDlg::OnEnChangeInsertStatus)
END_MESSAGE_MAP()


// CMateriaManagementDlg 消息处理程序

BOOL CMateriaManagementDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	ShowWindow(SW_MINIMIZE);

	// TODO:  在此添加额外的初始化代码

		m_tree.SetFlags((SHCONTF)(SHCONTF_FOLDERS | SHCONTF_NONFOLDERS));		//mfc shelltree control显示所有形式的文件
	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	/**************/

	HICON hIcon[4];      // 图标句柄数组   
	HTREEITEM hRoot;     // 树的根节点的句柄   
	HTREEITEM hBigItem; // 可表示任一分类节点的句柄   
	HTREEITEM hMiddle;  // 可表示任一文章节点的句柄  
	HTREEITEM hSmallItem;  // 可表示任一文章节点的句柄 

	// 加载三个图标,并将它们的句柄保存到数组   
	hIcon[0] = theApp.LoadIcon(IDI_WEB_ICON);
	hIcon[1] = theApp.LoadIcon(IDI_CATALOG_ICON);
	hIcon[2] = theApp.LoadIcon(IDI_ARTICLE_ICON);
	hIcon[3] = theApp.LoadIcon(IDI_ICON1);

	// 创建图像序列CImageList对象   
	m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
	// 将三个图标添加到图像序列   
	for (int i = 0; i<4; i++)
	{
		m_imageList.Add(hIcon[i]);
	}
	// 为树形控件设置图像序列   
	m_webTree.SetImageList(&m_imageList, TVSIL_NORMAL);

	// 插入根节点   
	hRoot = m_webTree.InsertItem(_T("小瓦匠产品库"), 0, 0);
	// 在根节点下插入子节点   
	hBigItem = m_webTree.InsertItem(_T("卧房家具"), 1, 1, hRoot, TVI_LAST);  
	m_webTree.SetItemData(hBigItem, 1);

	hMiddle = m_webTree.InsertItem(_T("床组合"), 2, 2, hBigItem, TVI_LAST);  
	m_webTree.SetItemData(hMiddle, 2); 
	hSmallItem = m_webTree.InsertItem(_T("组合床"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 3);
	hSmallItem = m_webTree.InsertItem(_T("床头柜"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 4);


	hMiddle = m_webTree.InsertItem(_T("电视柜"), 2, 2, hBigItem, TVI_LAST); 
	m_webTree.SetItemData(hMiddle, 5);
	hMiddle = m_webTree.InsertItem(_T("衣柜组合"), 2, 2, hBigItem, TVI_LAST); 
	m_webTree.SetItemData(hMiddle, 6);
	hSmallItem = m_webTree.InsertItem(_T("趟门衣柜"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 7);
	hSmallItem = m_webTree.InsertItem(_T("掩门衣柜"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 8);

	hMiddle = m_webTree.InsertItem(_T("妆台组合"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 9);
	hMiddle = m_webTree.InsertItem(_T("其他组合"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 10);

	// 在根节点下插入第二个子节点   
	hBigItem = m_webTree.InsertItem(_T("客餐厅家具"), 1, 1, hRoot, TVI_LAST); 
	m_webTree.SetItemData(hBigItem, 11);
	hMiddle = m_webTree.InsertItem(_T("沙发"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 12);
	hSmallItem = m_webTree.InsertItem(_T("组合沙发"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 13);
	hSmallItem = m_webTree.InsertItem(_T("简易沙发"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 14);
	hSmallItem = m_webTree.InsertItem(_T("靠垫"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 15);
	hSmallItem = m_webTree.InsertItem(_T("茶几"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 16);


	hMiddle = m_webTree.InsertItem(_T("电视柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 17);
	hMiddle = m_webTree.InsertItem(_T("隔断"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 18);
	hMiddle = m_webTree.InsertItem(_T("餐桌"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 19);
	hMiddle = m_webTree.InsertItem(_T("餐边柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 20);
	hMiddle = m_webTree.InsertItem(_T("客餐厅其他"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 21);
	hMiddle = m_webTree.InsertItem(_T("酒柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 22);
	hMiddle = m_webTree.InsertItem(_T("茶几"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 23);
	hMiddle = m_webTree.InsertItem(_T("椅子"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 24);
	hMiddle = m_webTree.InsertItem(_T("餐椅"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 25);
	hMiddle = m_webTree.InsertItem(_T("凳子"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 26);
	hMiddle = m_webTree.InsertItem(_T("壁炉"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 27);
	hMiddle = m_webTree.InsertItem(_T("鞋柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 28);


  
	hBigItem = m_webTree.InsertItem(_T("书房家具"), 1, 1, hRoot, TVI_LAST); 
	m_webTree.SetItemData(hBigItem, 29);
	hMiddle = m_webTree.InsertItem(_T("书房组合"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 30);
	hMiddle = m_webTree.InsertItem(_T("书柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 31);
	hMiddle = m_webTree.InsertItem(_T("书桌"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 32);
 
	hBigItem = m_webTree.InsertItem(_T("小孩房家具"), 1, 1, hRoot, TVI_LAST);   
	m_webTree.SetItemData(hBigItem, 33);
	hMiddle = m_webTree.InsertItem(_T("儿童床头"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 34);
	hMiddle = m_webTree.InsertItem(_T("儿童书桌"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 35);
	hMiddle = m_webTree.InsertItem(_T("儿童衣柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 36);


	hBigItem = m_webTree.InsertItem(_T("厨房"), 1, 1, hRoot, TVI_LAST); 
	m_webTree.SetItemData(hBigItem, 37);
	hMiddle = m_webTree.InsertItem(_T("橱柜"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 38);
	hMiddle = m_webTree.InsertItem(_T("水池"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 39);
	hMiddle = m_webTree.InsertItem(_T("厨房小件"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 40);


	hBigItem = m_webTree.InsertItem(_T("卫生间"), 1, 1, hRoot, TVI_LAST);
	m_webTree.SetItemData(hBigItem, 41);
	hMiddle = m_webTree.InsertItem(_T("淋浴房"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 42);
	hMiddle = m_webTree.InsertItem(_T("马桶"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 43);
	hMiddle = m_webTree.InsertItem(_T("洗漱池"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 44);
	hMiddle = m_webTree.InsertItem(_T("浴缸"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 45);
	hMiddle = m_webTree.InsertItem(_T("拖把池"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 46);
	hMiddle = m_webTree.InsertItem(_T("浴巾架"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 47);

	hBigItem = m_webTree.InsertItem(_T("装饰物"), 1, 1, hRoot, TVI_LAST);   
	m_webTree.SetItemData(hBigItem, 48);
	hMiddle = m_webTree.InsertItem(_T("装饰品"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 49);
	hMiddle = m_webTree.InsertItem(_T("衣物"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 50);
	hMiddle = m_webTree.InsertItem(_T("灯具"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 51);
	hSmallItem = m_webTree.InsertItem(_T("台灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 52);
	hSmallItem = m_webTree.InsertItem(_T("吊灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 53);
	hSmallItem = m_webTree.InsertItem(_T("壁灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 54);
	hSmallItem = m_webTree.InsertItem(_T("筒灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 55);
	hSmallItem = m_webTree.InsertItem(_T("吸顶灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 56);
	hSmallItem = m_webTree.InsertItem(_T("厨房吊灯"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 57);
	hSmallItem = m_webTree.InsertItem(_T("其他"), 3, 3, hMiddle, TVI_LAST);
	m_webTree.SetItemData(hSmallItem, 58);

	hMiddle = m_webTree.InsertItem(_T("书籍"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 59);
	hMiddle = m_webTree.InsertItem(_T("地毯"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 60);
	hMiddle = m_webTree.InsertItem(_T("电器"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 61);

	hBigItem = m_webTree.InsertItem(_T("其他"), 1, 1, hRoot, TVI_LAST);  
	m_webTree.SetItemData(hBigItem, 62);
	hMiddle = m_webTree.InsertItem(_T("吊顶"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 63);
	hMiddle = m_webTree.InsertItem(_T("壁画"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 64);
	hMiddle = m_webTree.InsertItem(_T("背景墙"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 65);
	hMiddle = m_webTree.InsertItem(_T("窗帘"), 2, 2, hBigItem, TVI_LAST);
	m_webTree.SetItemData(hMiddle, 65);



	/********************/
	m_prostyle.AddString(_T("欧式"));
	m_prostyle.AddString(_T("现代简约"));
	m_prostyle.AddString(_T("田园"));
	m_prostyle.AddString(_T("美式"));
	m_prostyle.AddString(_T("其他"));
	m_prostyle.InsertString(1, _T("中式"));
	m_prostyle.SetCurSel(0);
	SetDlgItemText(IDC_EDIT_PRO_STYLE, _T("pro_style"));



	m_proremark = "不详";
	m_nodelayerid = "null";
	m_procorlor = "不详";
	m_material = "";
	m_prolinkurl = "";
	m_proseller = "";
	m_proisdeleted = "0";
	m_proupdatetime = "";

	//time_t t = time(0);
	//char tmp[64];
	//strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
	//m_proupdatetime = tmp;


	m_pronodeid = "null";
	m_prenodeid = "null";						//HouseDesign搜索分类的标志
	m_prozippath = "null";

	/***********************/
	m_comboWeb.AddString(_T("床组合"));
	m_comboWeb.AddString(_T("床"));
	m_comboWeb.AddString(_T("床头柜"));
	m_comboWeb.AddString(_T("衣柜"));
	m_comboWeb.AddString(_T("整体衣柜"));
	m_comboWeb.AddString(_T("电视柜"));
	m_comboWeb.AddString(_T("其他"));
	m_comboWeb.AddString(_T("沙发"));
	m_comboWeb.AddString(_T("组合沙发"));
	m_comboWeb.AddString(_T("简易沙发"));
	m_comboWeb.AddString(_T("茶几"));
	m_comboWeb.AddString(_T("隔断"));
	m_comboWeb.AddString(_T("鞋柜"));
	m_comboWeb.AddString(_T("客厅其他"));
	m_comboWeb.AddString(_T("餐桌"));
	m_comboWeb.AddString(_T("餐椅"));
	m_comboWeb.AddString(_T("酒柜"));
	m_comboWeb.AddString(_T("书柜"));
	m_comboWeb.AddString(_T("书桌"));
	m_comboWeb.AddString(_T("椅子"));
	m_comboWeb.AddString(_T("橱柜"));
	m_comboWeb.AddString(_T("小件"));
	m_comboWeb.AddString(_T("沐浴房"));
	m_comboWeb.AddString(_T("浴缸"));
	m_comboWeb.AddString(_T("马桶"));
	m_comboWeb.AddString(_T("洗漱池"));
	m_comboWeb.AddString(_T("卫生间其他"));
	m_comboWeb.AddString(_T("吊灯"));
	m_comboWeb.AddString(_T("吸顶灯"));
	m_comboWeb.AddString(_T("台灯"));
	m_comboWeb.AddString(_T("壁灯"));
	m_comboWeb.AddString(_T("筒灯"));
	m_comboWeb.AddString(_T("灯具其他"));
	m_comboWeb.AddString(_T("吊顶"));
	m_comboWeb.AddString(_T("壁画"));
	m_comboWeb.AddString(_T("背景墙"));
	m_comboWeb.AddString(_T("窗帘"));
	m_comboWeb.AddString(_T("地毯"));
	m_comboWeb.AddString(_T("装饰品"));


	// 默认选择第一项   
	m_comboWeb.SetCurSel(0);



	/*********************素材管理模块*/
	m_materialstyle = "";
	m_materialdeleted = "0";
	m_materialsizex = "800";
	m_materialsizey = "800";
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CMateriaManagementDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}
void CMateriaManagementDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMateriaManagementDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
char* CMateriaManagementDlg::U2G(const char* utf8)
{
	int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len + 1];
	memset(wstr, 0, len + 1);
	MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
	len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
	char* str = new char[len + 1];
	memset(str, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
	if (wstr) delete[] wstr;
	return str;
}
char* CMateriaManagementDlg::G2U(const char* gb2312)
{
	int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len + 1];
	memset(wstr, 0, len + 1);
	MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
	len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
	char* str = new char[len + 1];
	memset(str, 0, len + 1);
	WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
	if (wstr) delete[] wstr;
	return str;
}

void CMateriaManagementDlg::OnTvnSelchangedWebTree(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	*pResult = 0;
	treeSel; // 树节点的标签文本字符串  \
	// 获取当前选中节点的句柄   
	HTREEITEM hItem = m_webTree.GetSelectedItem();
	// 获取选中节点的标签文本字符串   
	treeSel = m_webTree.GetItemText(hItem);
	// 将字符串显示到编辑框中   
	SetDlgItemText(IDC_ITEM_SEL_EDIT, treeSel);
//	SetDlgItemText(IDC_PRO_NAME, treeSel);
	sqlite3 *db;
	int result;
	char **dbResult;
	int nRow, nColumn;
	std::string rtnSql;
	char *errmsg = NULL;
	int index;
	int i, j;
	const char *tail = NULL;
	char* csql = NULL;
	USES_CONVERSION;
	CString cselect = _T("select pro_id ,preview_image_path from ProductInfo  where pro_name like '") + treeSel + _T("%' order by pro_id");
	csql = W2A(cselect);
	char *ll = G2U(csql);
	std::string strsql = ll;
	std::string value;
	sqlSelect sqlselect;
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	const char* path = Unicode2Utf8(unic_DataBasePath);
	db = ConnectDatabase(path);
	if (db != NULL);
	{
		int  counter = 0;
		selVec.clear();
		result = sqlite3_get_table(db, strsql.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
		if (SQLITE_OK == result)
		{
			index = nColumn;
			for (i = 0; i < nRow; i++)
			{
				for (j = 0; j < nColumn; j++)
				{
					if (counter % 2 == 0)
					{
						sqlselect.proid = (CString)dbResult[index];
					}
					else if (counter % 2 != 0)
					{
						sqlselect.imagePosition = (CString)dbResult[index];
					}
					counter++;
					++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
				}
				if (sqlselect.imagePosition.GetLength()>20)			
				{
					int n = sqlselect.imagePosition.Find(_T("/"));
					int n_length = sqlselect.imagePosition.Delete(0, n + 1);
					CString temp = sqlselect.imagePosition.Right(n_length);
					CString image_path = utilProductDir(_T("File\\") + temp);
					USES_CONVERSION;
					std::string path(W2A(image_path));
					if (_access(path.c_str(), 0) == -1) 
						std::cout << "Path is not exist." << std::endl;
					else
						selVec.push_back(sqlselect);
				}
			}
			if (nRow < 9)
			{
				showProducts();
				clearPciture(nRow);
			}
			else
				showProducts();
			sqlite3_free_table(dbResult);
			//关闭数据库
			sqlite3_close(db);
		}
	}
	
}
void CMateriaManagementDlg::OnStnClickedStaticPng1()
{
	// TODO:  在此添加控件通知处理程序代码

}
void CMateriaManagementDlg::OnStnClickedStaticMaterialText1()
{
	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnStnClickedStaticMaterialText8()
{
	// TODO:  在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnDrawBackGroundColor(CWnd *pWnd)
{
	CRect rect;
	if (!pWnd)
		return;
	pWnd->GetClientRect(&rect);//rect为控件的大小。
	CDC *pDc = NULL;
	pDc = pWnd->GetDC();//获取picture的DC 
	//设置变量,当再次点击读入图片的时候,执行并将框格内用背景颜色刷一遍,达到隐藏的目的。
	CRect rect1(rect.left + 1, rect.top + 1, rect.Width() - 2, rect.Height() - 2);
	DWORD dw = GetSysColor(COLOR_BTNFACE);
	CBrush br(dw);
	pDc->FillRect(rect1, &br);


	::SetStretchBltMode(pDc->m_hDC, HALFTONE);
	::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
	ReleaseDC(pDc);
}
void CMateriaManagementDlg::OnShowProPreviewImage(const CString strImagePath)
{
	int pro_index=0;
	if (strImagePath.IsEmpty())
		return;
	CImage image;

	_TCHAR module_file_name[FILENAME_MAX];
	GetModuleFileName(NULL, module_file_name, FILENAME_MAX);
	CString file_path = utilProductDir(strImagePath);/*module_file_name*/;

	/*file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
	file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
	file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
	file_path += strImagePath;*/


	CFileFind file_find;
	if (!file_find.FindFile(file_path))
		return;
	//image.Load(file_path);
	if (!SUCCEEDED(image.Load(file_path))) return;

	CRect rect;
	CWnd *pWnd;
	CDC *pDc = NULL;
}
void CMateriaManagementDlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
//	int counter = 1;
	int yusu = 8 % 9;
	int length = selVec.size();
	std::vector<sqlSelect>::iterator  iter;
	if (length <= 9)
	{
		showLeaveProducts();
		clearPciture(length);
	}
	else if (length > 9)
	{
		for (int i = 0; i < 9;i++)
		{
			selVec.erase(selVec.begin());
		}
		if (selVec.size() < 9)
		{
			clearPciture(selVec.size());
		}
		showProducts();
	}
	CWnd *pWnd;
	pWnd = GetDlgItem(IDC_STATIC_PNG1);
}
void  CMateriaManagementDlg::showProducts()
{
	CImage myImage;
	CRect rect;
	int itemID;
	CWnd *pWnd;
	CDC *pDc = NULL;
	int veclength = selVec.size();
	int  flag = 0;
	int i;
	for (i = 0; i < veclength; i++)
	{
		int n = selVec[i].imagePosition.Find(_T("/"));
		int n_length = selVec[i].imagePosition.Delete(0, n + 1);
		CString temp = selVec[i].imagePosition.Right(n_length);
		CString image_path = utilProductDir(_T("File\\") + temp);
		//if (!SUCCEEDED(myImage.Load(image_path)))
		//	return;
		if (!myImage.IsNull())//判断图象是否为空,如果不为空则先释放掉  
			myImage.Destroy();
		myImage.Load(image_path);
		switch (i)
		{
		case 0:
			itemID = IDC_STATIC_PNG1;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);

			//p = (CStatic *)GetDlgItem(IDC_STATIC_PNG1);
			设置静态控件窗口风格为位图居中显示  
			//p->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
			将图片设置到Picture控件上  
			//p->SetBitmap(myImage)
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T("ID:")+selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			//	m_cStaticProPic1.SetBitmap(image);
			break;
		case 1:
			itemID = IDC_STATIC_PNG2;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC 
			::SetStretchBltMode(pDc->m_hDC, HALFTONE);
			::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 2:
			itemID = IDC_STATIC_PNG3;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 3:
			itemID = IDC_STATIC_PNG4;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 4:
			itemID = IDC_STATIC_PNG5;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 5:
			itemID = IDC_STATIC_PNG6;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 6:
			itemID = IDC_STATIC_PNG7;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 7:
			itemID = IDC_STATIC_PNG8;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 8:
			itemID = IDC_STATIC_PNG9;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		default:
			break;
		}
	}
}
void  CMateriaManagementDlg::showLeaveProducts()
{
	CImage myImage;
	CRect rect;
	int itemID;
	CWnd *pWnd;
	CDC *pDc = NULL;
	int veclength = selVec.size();
	int  flag = 0;
	int i;
	for (i = 0; i < veclength; i++)
	{
		int n = selVec[i].imagePosition.Find(_T("/"));
		int n_length = selVec[i].imagePosition.Delete(0, n + 1);
		CString temp = selVec[i].imagePosition.Right(n_length);
		CString image_path = utilProductDir(_T("File\\") + temp);
		//if (!SUCCEEDED(myImage.Load(image_path)))
		//	return;
		if (!myImage.IsNull())//判断图象是否为空,如果不为空则先释放掉  
			myImage.Destroy();
		myImage.Load(image_path);
		switch (i)
		{
		case 0:
			itemID = IDC_STATIC_PNG1;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			//	m_cStaticProPic1.SetBitmap(image);
			break;
		case 1:
			itemID = IDC_STATIC_PNG2;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC 
			::SetStretchBltMode(pDc->m_hDC, HALFTONE);
			::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 2:
			itemID = IDC_STATIC_PNG3;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 3:
			itemID = IDC_STATIC_PNG4;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 4:
			itemID = IDC_STATIC_PNG5;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 5:
			itemID = IDC_STATIC_PNG6;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 6:
			itemID = IDC_STATIC_PNG7;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 7:
			itemID = IDC_STATIC_PNG8;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		case 8:
			itemID = IDC_STATIC_PNG9;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			pWnd->GetClientRect(&rect);//rect为控件的大小。
			pDc = pWnd->GetDC();//获取picture的DC

			myImage.Draw(pDc->m_hDC, rect);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T("ID:") + selVec[i].proid);
			ReleaseDC(pDc);
			myImage.Destroy();
			break;
		default:
			break;
		}
	}
}
void  CMateriaManagementDlg::clearPciture(int clearNum)
{
	int itemID;
	CWnd *pWnd;
	for (int i = 0; i <= 9-clearNum; i++)
	{
		switch (9 - i)
		{
		case 0:
			itemID = IDC_STATIC_PNG1;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T(" "));
			break;
		case 1:
			itemID = IDC_STATIC_PNG2;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T(" "));
			break;
		case 2:
			itemID = IDC_STATIC_PNG3;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T(" "));
			break;
		case 3:
			itemID = IDC_STATIC_PNG4;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T(" "));
			break;
		case 4:
			itemID = IDC_STATIC_PNG5;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T(" "));
			break;
		case 5:
			itemID = IDC_STATIC_PNG6;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T(" "));
			break;
		case 6:
			itemID = IDC_STATIC_PNG7;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T(" ") );
			break;
		case 7:
			itemID = IDC_STATIC_PNG8;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T(" "));
			break;
		case 8:
			itemID = IDC_STATIC_PNG9;
			pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
			if (!pWnd)
				return;
			OnDrawBackGroundColor(pWnd);
			SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T(" "));
			break;
		default:
			break;
		}
	}
}
void CMateriaManagementDlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT1)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	if (DirDelete(str)==true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton3()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT2)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton4()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT3)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton5()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT4)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton6()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT5)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton7()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT6)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton8()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT7)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton9()
{
	// TODO:  在此添加控件通知处理程序代码
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT8)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
}


void CMateriaManagementDlg::OnBnClickedButton10()
{
	CString str;
	GetDlgItem(IDC_STATIC_MATERIAL_TEXT9)->GetWindowText(str);
	int n = str.Find(_T(":"));
	int n_length = str.Delete(0, n + 1);
	CString id = str.Right(n_length);
	deleteMaterial(str);
	deleteMaterial(str);
	if (DirDelete(str) == true)
		AfxMessageBox(_T("删除成功!"));
	else
		AfxMessageBox(_T("删除失败!"));
	// TODO:  在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::deleteMaterial(CString &id)
{
	sqlite3 *db;
	int result;
	char *errmsg = NULL;
	CString deleteSql = _T("delete from ProductInfo where pro_id=") + id;
	std::wstring wsdeleteSql = deleteSql.GetString();
	char* sql = Unicode2Utf8(wsdeleteSql);
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	const char* path = Unicode2Utf8(unic_DataBasePath);
	db = ConnectDatabase(path);
	if (db != NULL)
	{
		result = sqlite3_exec(db, sql, 0, 0, &errmsg);
		deletedLoad();
	}
	sqlite3_close(db);
}
void CMateriaManagementDlg::deletedLoad()
{
	selVec.clear();									//清空vec里面的内容重新加载
	int rc;
	sqlite3 *db;
	int result;
	char **dbResult;
	int nRow, nColumn;
	std::string rtnSql;
	char *errmsg = NULL;
	int index;
	int i, j;
	const char *tail = NULL;
	char* csql = NULL;
	USES_CONVERSION;
	CString cselect = _T("select pro_id ,preview_image_path from ProductInfo  where pro_name like '") + treeSel + _T("%' order by pro_id");
	/*) + strText + _T("%' order by preview_image_path");*/
	csql = W2A(cselect);
	char *ll = G2U(csql);
	std::string strsql = ll;
	std::string value;
	sqlSelect sqlselect;
	//	std::string select = W2CA((LPCWSTR)strText);
	//	std::string  select = (std::string)strText;
	//	std::string sql = "select * from ProductInfo where pro_name like 'a%'"; //"select * from ProductInfo where pro_name like '茶几%' order by preview_image_path";
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	char* path = Unicode2Utf8(unic_DataBasePath);
	//	const char* path = "D://Project//HouseDesign//data//database//HouseDesignDB.db";
	rc = sqlite3_open(path, &db);
	int  counter = 0;
	selVec.clear();
	if (rc == SQLITE_OK)
	{
		//	result = sqlite3_exec(db, csql, 0, 0, 0);
		result = sqlite3_get_table(db, strsql.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
		if (SQLITE_OK == result)
		{
			index = nColumn;
			for (i = 0; i < nRow; i++)
			{
				for (j = 0; j < nColumn; j++)
				{
					if (counter % 2 == 0)
					{
						sqlselect.proid = (CString)dbResult[index];
					}
					else if (counter % 2 != 0)
					{
						sqlselect.imagePosition = (CString)dbResult[index];
					}
					counter++;
					++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
				}
				selVec.push_back(sqlselect);
			}
		}
		if (nRow < 9)
		{
			showProducts();
			clearPciture(nRow);
		}
		else
			showProducts();
		sqlite3_free_table(dbResult);
		//关闭数据库
		sqlite3_close(db);
	}
}
void CMateriaManagementDlg::OnStnClickedStaticMaterialText3()
{
	// TODO:  在此添加控件通知处理程序代码
}
sqlite3* CMateriaManagementDlg::ConnectDatabase(const char* path)
{
	sqlite3 *db;
	int rc;
	rc = sqlite3_open(path, &db);
	if (rc == SQLITE_OK)
	{
		return db;
	}
	else
		return NULL;
}
void CMateriaManagementDlg::OnEnChangeItemSelEdit()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnBnClickedButton11()
{
	// TODO:  在此添加控件通知处理程序代码
	char *errMsg;
	int rc;
	sqlite3 *db;
	int result;
	char **dbResult;
	int nRow, nColumn;
	std::string rtnSql;
	char *errmsg = NULL;
	int i, j;
	int index;
	CString maxid;
	std::string maxProid = "select MAX(pro_id) from ProductInfo";
//	std::string insertSql = "insert into ProductInfo values (101,'ww',26,26,26,'ww','ww','ww','ww',26,'ww','ww','ww','ww','ww','ww','ww',26,'2016-04-14 22:47:19.000')";
	//	_RecordsetPtr m_pRecordset;
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	const char* path = Unicode2Utf8(unic_DataBasePath);
	rc = sqlite3_open(path, &db);
	if (rc == SQLITE_OK)
	{
		const char* select = "select * from ProductInfo";
		//	MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
		/****************************************************************/
	//	rc = sqlite3_exec(db, insertSql.c_str(), NULL, NULL, &errMsg);            //插入一条数据;
		/****************************************************************/
		//	rc = sqlite3_exec(db, maxProid.c_str(), NULL, NULL, &errMsg);
		/****************************************************************/
		result = sqlite3_get_table(db, maxProid.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
		if (SQLITE_OK == result)
		{
			index = nColumn;
			printf("查到%d条记录\n", nRow);
			for (i = 0; i < nRow; i++)
			{
				printf("第 %d 条记录\n", i + 1);
				for (j = 0; j < nColumn; j++)
				{
					printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
					maxid = dbResult[index];
					int temp = _ttoi(maxid) + 1;
					m_proid.Format(_T("%d"), temp);
					SetDlgItemText(IDC_PRO_ID, m_proid);                                //显示插入的pro_id
					++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
				}
				printf("-------\n");
			}
		}

		/****************************************************************/
		//if (rc != SQLITE_OK)
		//{
		//	printf("创建表失败,错误码:%d,错误原因:%sn", rc, errMsg);
		//	MessageBox(NULL, _T("创建表user失败!"), _T("错误"), MB_ICONWARNING);
		//}
		//rc = sqlite3_exec(db, "insert into user values('123','测试')", NULL, NULL, &errMsg);
		//if (rc != SQLITE_OK)
		//{
		//	MessageBox(NULL, _T("插入数据失败!"), _T("错误"), MB_ICONWARNING);
		//}
		//	rc = sqlite3_exec(db, "select * from user", showTableInfo, NULL, &errMsg);
		//if (rc != SQLITE_OK)
		//{
		//	MessageBox(NULL, _T("查询失败!"), _T("错误"), MB_ICONWARNING);
		//}
		//到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放
		sqlite3_free_table(dbResult);
		//关闭数据库
		sqlite3_close(db);
	}
}


void CMateriaManagementDlg::OnCbnSelchangeCombo1()
{
	// TODO:  在此添加控件通知处理程序代码
	CString temp;
	int nsel;

	// 获取组合框控件的列表框中选中项的索引   
	nsel = m_prostyle.GetCurSel();
	// 根据选中项索引获取该项字符串   
	m_prostyle.GetLBText(nsel, temp);
	m_style = temp;
	// 将组合框中选中的字符串显示到IDC_SEL_WEB_EDIT编辑框中   
	SetDlgItemText(IDC_COMBO1, temp);
}
void CMateriaManagementDlg::OnBnClickedButton12()
{
	// TODO:  在此添加控件通知处理程序代码
	time_t t = time(0);
	char tmp[64];
	strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
	m_proupdatetime = tmp;

	using namespace std;
	char *errMsg;
	int rc;
	sqlite3 *db;
	GetDlgItem(IDC_PRO_NAME)->GetWindowText(m_proname);
	GetDlgItem(IDC_PRICE)->GetWindowText(m_proprice);
	USES_CONVERSION;
	string proid(W2A(m_proid));
	string proname(W2A(m_proname));
	string pronodeid(W2A(m_pronodeid));
	string prenodeid(W2A(m_prenodeid));
	string nodelayerid(W2A(m_nodelayerid));
	string procorlor(W2A(m_procorlor));
	string material(W2A(m_material));
	string style(W2A(m_style));
	string proremark(W2A(m_proremark));
	string proprice(W2A(m_proprice));
	string pronumber(W2A(m_pronumber));
	string prolinkurl(W2A(m_prolinkurl));
	string proseller(W2A(m_proseller));
	string topimageview(W2A(m_topimageview));
	string preimageview(W2A(m_preimageview));
	string prozippath(W2A(m_prozippath));
	string proobjpath(W2A(m_proobjpath));
	string proisdeleted(W2A(m_proisdeleted));
	string proupdatetime(W2A(m_proupdatetime));




	//time_t t = time(0);																			//获取本地时间命名图片 确保唯一性
	//char tmp[64];
	//strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
	//m_proupdatetime = tmp;
	//std::string time = tmp;//Format(_T("%s"), a);
	//m_proupdatetime = (CString)time.c_str();
	m_proupdatetime.Format("yyyy-mm-dd 00:00:00.000");




	std::string insertSql = "insert into ProductInfo values (" + proid + ",'" + proname + "'," + pronodeid + "," + prenodeid + "," + nodelayerid + ",'" + procorlor + "','" + material + "','" +
		style + "','" + proremark + "'," + proprice + ",'" + pronumber + "','" + prolinkurl + "','" + proseller + "','" + topimageview + "','" + preimageview + "','" + prozippath + "','" + proobjpath + "'," + proisdeleted + ",'" + proupdatetime + "')";
	//	_RecordsetPtr m_pRecordset;
	wchar_t*	changeInsert = StringTWchar(insertSql);
	char *rtnSql = AnsiToUTF_8(changeInsert);
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	const char* path = Unicode2Utf8(unic_DataBasePath);
	rc = sqlite3_open(path, &db);
	if (rc == SQLITE_OK)
	{
		//	MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
		/****************************************************************/
		rc = sqlite3_exec(db, rtnSql, NULL, NULL, &errMsg);            //插入一条数据;
		if (rc == SQLITE_OK)
		{
			AfxMessageBox(_T("添加成功!"));
		//	m_pronumber = _T("");
			SetDlgItemText(IDC_PRO_ID,_T(""));
			SetDlgItemText(IDC_PRO_NAME, _T(""));
			SetDlgItemText(IDC_PRICE, _T(""));
			SetDlgItemText(IDC_EDIT1, _T(""));
			SetDlgItemText(IDC_EDIT2, _T(""));
			SetDlgItemText(IDC_EDIT3, _T(""));
			SetDlgItemText(IDC_EDIT_OBJ, _T(""));
		}
		else 
			AfxMessageBox(_T("添加失败!"));
	}
	//关闭数据库
	sqlite3_close(db);
}
void CMateriaManagementDlg::OnEnChangeProName()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnEnChangeEdit3()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	*pResult = 0;
	CString strText; // 树节点的标签文本字符串  
	CString fileText;
	CString totalText, temp, temp1, temp2;
	CString topViewPng;
	CString PrePng;
	CString name;
	temp = L".obj";
	int counter_image = 0;
	CString kinds;
	std::vector<const std::string> vec_files;
	m_tree.GetItemPath(strText, pNMTreeView->itemNew.hItem);
	// 获取当前选中节点的句柄   
	HTREEITEM hItem = m_tree.GetSelectedItem();
	// 获取选中节点的标签文本字符串   
	fileText = m_tree.GetItemText(hItem);
	// 将字符串显示到编辑框中  
	time_t t = time(0);																			//获取本地时间命名图片 确保唯一性
	char tmp[64];
	strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S", localtime(&t));
	char tmp1[64];
	strftime(tmp1, sizeof(tmp1), "%Y%m%d", localtime(&t));
	char tmp2[64];
	strftime(tmp2, sizeof(tmp2), "%Y-%m-%d %X", localtime(&t));
	m_updatetime = tmp2;
	m_proupdatetime = tmp;
	std::string time = tmp;//Format(_T("%s"), a);
	std::string time1 = tmp1;
	int size_time1 = time1.length();
	time1 = time1.substr(2, size_time1);
	CString ctime = (CString)time.c_str();
	CString ctime1 = (CString)time1.c_str();
	int n = fileText.Find(_T("p.png"));
	if (n != -1)
	{
		PrePng =  ctime + _T(".png");
		CString image_path = utilProductDir(_T("File\\") + PrePng);
		m_preimageview = _T("File/") + PrePng;
		SetDlgItemText(IDC_EDIT3, m_preimageview);
		USES_CONVERSION;
		std::string oldImage(W2A(fullPath+_T("\\")+fileText));
		std::string newImage = (W2A(image_path));                //"C:\\Users\\Administrator\\Desktop\\2.PNG";
		int result = rename(oldImage.c_str(), newImage.c_str());
		if (result == 0)
			AfxMessageBox(_T("拷贝成功!"));
		else
			AfxMessageBox(_T("拷贝失败!"));
	}
	int n1 = fileText.Find(_T("t.png"));
	if (n1 != -1)
	{
		topViewPng =  ctime + _T(".png");
		CString image_path = utilProductDir(_T("File\\") + topViewPng);
		m_topimageview = _T("File/") + topViewPng;
		SetDlgItemText(IDC_EDIT2, m_topimageview);
		USES_CONVERSION;
		std::string oldImage(W2A(fullPath + _T("\\") + fileText));
		std::string newImage = (W2A(image_path));                //"C:\\Users\\Administrator\\Desktop\\2.PNG";
		int result = rename(oldImage.c_str(), newImage.c_str());
		if (result == 0)
			AfxMessageBox(_T("拷贝成功!"));
		else
			AfxMessageBox(_T("拷贝失败!"));
	}
	int n2 = fileText.Find(_T(".obj"));
	if (n2 != -1)
	{
		int n = fileText.Find(_T("."));
	//	int n_length = fileText.Delete(0, n);
		CString proNum = fileText.Left(n);
		SetDlgItemText(IDC_EDIT1, proNum);
		GetDlgItem(IDC_PRO_NAME)->GetWindowText(m_proname);
		topViewPng = _T("product/") + m_proid + _T("/") + fileText;
		m_proobjpath = topViewPng;
		SetDlgItemText(IDC_EDIT_OBJ, m_proobjpath);
	}
	if (strText != "" || fileText == "计算机")
	{
		totalText = strText;
		fullPath = totalText;
		int n = -1;
		SetDlgItemText(IDC_EDIT_OBJ, totalText);
		USES_CONVERSION;
		const std::string path(W2A(totalText));
		if ((n = path.find("壁纸")) != std::string::npos)
		{
			kinds = _T("pap");
			AfxMessageBox(_T("选择了壁纸文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='壁纸'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if (( n = path.find("布料")) != std::string::npos)
		{
			kinds = _T("col");
			AfxMessageBox(_T("选择了布料文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='布料'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("地板")) != std::string::npos)
		{
			kinds = _T("flo");
			AfxMessageBox(_T("选择了布料文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='地板'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("地毯")) != std::string::npos)
		{
			kinds = _T("car");
			AfxMessageBox(_T("选择了布料文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='地毯'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("其他")) != std::string::npos)
		{
			kinds = _T("oth");
			AfxMessageBox(_T("选择了其他文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='其他'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("地砖")) != std::string::npos)
		{
			kinds = _T("flo");
			AfxMessageBox(_T("选择了地砖文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='地砖'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("墙裙")) != std::string::npos)
		{
			kinds = _T("dod");
			AfxMessageBox(_T("选择了墙裙文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='墙裙'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("厨卫吊顶")) != std::string::npos)
		{
			kinds = _T("cei");
			AfxMessageBox(_T("选择了厨卫吊顶文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='厨卫吊顶'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("门")) != std::string::npos)
		{
			kinds = _T("doo");
			AfxMessageBox(_T("选择了门文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='门'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		else if ((n = path.find("窗")) != std::string::npos)
		{
			kinds = _T("win");
			AfxMessageBox(_T("选择了窗文件夹"));
			CString csql = _T("select node_id from MaterialTreeInfo where node_name='窗'");
			std::string Sql = Convert(csql);
			m_materialnodeid = SelectTable(Sql);
		}
		if (n != -1)
		{
			vec_files = RecureDir(path);
			if (vec_files.size() == 0)
			{
				AfxMessageBox(_T("该文件夹没有文件,请重新选择!"));
				return;
			}
			std::vector<const std::string>::iterator vec_iter;
			for (vec_iter = vec_files.begin(); vec_iter != vec_files.end(); vec_iter++)
			{
				CString imagepath_new;
				counter_image++;
				std::string num;
				if (counter_image < 10)
				{
					 num = "0" + boost::lexical_cast<std::string>(0 + counter_image);
				}
				else
				{
					 num = boost::lexical_cast<std::string>(counter_image);
				}
				CString cnum = (CString)num.c_str();
				CString company_code;
				GetDlgItem(IDC_MATERIAL_PRICE)->GetWindowText(m_materialprice);
				GetDlgItem(IDC_COMPANY_CODE)->GetWindowText(company_code);
				if (company_code == _T(""))
				{
					AfxMessageBox(_T("请输入公司代码,请重新选择所要添加的素材文件夹"));
					return;
				}
				if (m_materialprice == _T(""))
				{
					AfxMessageBox(_T("请输入素材价格"));
					return;
				}
			//	std::string file_path = *vec_iter;
				boost::filesystem::path ps(*vec_iter);
				CString postfix = (CString)ps.extension().string().c_str();	//图片后缀名
				std::string filename = ps.filename().string();				//有后缀文件名
				std::string filename_nopostfix = ps.stem().string();		//无后缀文件名
				CString imagename_new = ctime + _T("-") +cnum + postfix;
				m_materialimagepath = _T("material/") + imagename_new;
				m_materialname = company_code + kinds + ctime1 + cnum;;
				CString image_path = utilDataDir(_T("material\\") + imagename_new);
				USES_CONVERSION;
				std::string oldImage(ps.string());
				std::string newImage = (W2A(image_path));                //"C:\\Users\\Administrator\\Desktop\\2.PNG";
				int result = rename(oldImage.c_str(), newImage.c_str());
				if (result == 0)
				{
					SetDlgItemText(IDC_COPY_STATUS, _T("拷贝ING!"));
					std::string maxProid = "select MAX(material_id) from MaterialInfo";
					m_materialid = SelectTable(maxProid);
					InsertMatrialInfo();
				}
				else
					AfxMessageBox(_T("拷贝失败!"));
			}
			SetDlgItemText(IDC_COPY_STATUS, _T("拷贝成功!"));
		}
	}
	else
	{
		int length = fileText.GetLength();
		if (int flag = fileText.Find(temp) )
		{
			if (flag < 0)
			{
				return;
			}
			else
			{
				int n = fileText.Find(_T("."));
				CString temp = fileText.Left(n);
				if (temp == m_pronumber)
					return;
				else
					m_pronumber = temp;
				/*for (int i = 0; i < length; i++)
				{
					if (fileText[i] != (CString)"." )
					{
						m_pronumber += fileText[i];
					}
					else if (fileText[i] == (CString)".")
						return;
				}*/
			}
		}
	}
	/************************************************************/
;
	//	SetDlgItemText(IDC_EDIT3, fileText);
}


void CMateriaManagementDlg::OnEnChangeEditObj()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnEnChangeEdit2()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnCbnSelchangeCombo2()
{
	// TODO:  在此添加控件通知处理程序代码
	CString strWeb;
	int nSel;

	// 获取组合框控件的列表框中选中项的索引   
	nSel = m_comboWeb.GetCurSel();
	// 根据选中项索引获取该项字符串   
	m_comboWeb.GetLBText(nSel, strWeb);
	// 将组合框中选中的字符串显示到IDC_SEL_WEB_EDIT编辑框中 
	m_proname = strWeb;
	SetDlgItemText(IDC_PRO_NAME, strWeb);

	CString selNodeId = _T("select node_id from ProductTreeInfo where node_name like '") + m_proname + "'";
	USES_CONVERSION;
	std::string strSel = W2A(selNodeId);
	char *ll = G2U(strSel.c_str());
	std::string strsql = ll;
	CString rtn = Query(strsql);
	if (rtn == "")
	{
		m_prenodeid = "";
	}
	else
	{
		m_prenodeid = rtn;
	}

}
using namespace boost::filesystem;
using namespace std;
std::vector<const std::string> CMateriaManagementDlg::RecureDir(const std::string &full_path)
{
	std::vector<const std::string> vector_files;
	if (full_path != "")
	{
		directory_iterator end;
		int files_num = 0;
		for (directory_iterator pos(full_path); pos != end; ++pos)
		{
			boost::filesystem::path path_(*pos);
			if (is_regular(path_))
			{
				string s = path_.string();
				vector_files.push_back(s);
				files_num++;
			}
			else if (is_directory(path_))
			{
				RecureDir(path_.string());
			}
		}
	}
	return vector_files;
}
CString  CMateriaManagementDlg::SelectTable(const std::string &selMaxID)
{
	int rc;
	sqlite3 *db;
	int result;
	char **dbResult;
	int nRow, nColumn;
	char *errmsg = NULL;
	int index;
	int i;
	int j;
	CString maxid;
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	char* databasepath = Unicode2Utf8(unic_DataBasePath);
	rc = sqlite3_open(databasepath, &db);
	if (rc == SQLITE_OK)
	{
		result = sqlite3_get_table(db, selMaxID.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
		if (SQLITE_OK == result)
		{
			index = nColumn;
			printf("查到%d条记录\n", nRow);
			for (i = 0; i < nRow; i++)
			{
				printf("第 %d 条记录\n", i + 1);
				for (j = 0; j < nColumn; j++)
				{
					printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
					maxid = dbResult[index];
					int temp = _ttoi(maxid) + 1;
					m_materialid.Format(_T("%d"), temp);
					SetDlgItemText(IDC_PRO_ID, m_materialid);                                //显示插入的pro_id
					++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
				}
				printf("-------\n");
			}
		}
	}
	else
		return _T("");
	sqlite3_free_table(dbResult);
	//关闭数据库
	sqlite3_close(db);
	return m_materialid;
}
CString  CMateriaManagementDlg::Query(const std::string &selMaxID)
{
	int rc;
	sqlite3 *db;
	int result;
	char **dbResult;
	int nRow, nColumn;
	char *errmsg = NULL;
	int index;
	int i;
	int j;
	CString maxid;
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	char* databasepath = Unicode2Utf8(unic_DataBasePath);
	rc = sqlite3_open(databasepath, &db);
	if (rc == SQLITE_OK)
	{
		result = sqlite3_get_table(db, selMaxID.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
		if (SQLITE_OK == result)
		{
			index = nColumn;
			printf("查到%d条记录\n", nRow);
			for (i = 0; i < nRow; i++)
			{
				printf("第 %d 条记录\n", i + 1);
				for (j = 0; j < nColumn; j++)
				{
					printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
					maxid = dbResult[index];                             //显示插入的pro_id
					++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
				}
				printf("-------\n");
			}
		}
	}
	else
		return _T("");
	sqlite3_free_table(dbResult);
	//关闭数据库
	sqlite3_close(db);
	return maxid;
}
void CMateriaManagementDlg::OnEnChangeEdit1()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnEnChangeCompanyCode()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}


void CMateriaManagementDlg::OnEnChangeCopyStatus()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}
std::string CMateriaManagementDlg::Convert(CString & select)
{
	char* csql = NULL;
	USES_CONVERSION;
	csql = W2A(select);
	char *ll = G2U(csql);
	std::string strsql = ll;
	return strsql;
}
void CMateriaManagementDlg::InsertMatrialInfo()
{
	using namespace std;
	char *errMsg;
	int rc;
	sqlite3 *db;
	USES_CONVERSION;
	string materialid(W2A(m_materialid));
	string materialname(W2A(m_materialname));
	string materialnodeid(W2A(m_materialnodeid));
	string materialstyle(W2A(m_materialstyle));
	string materialpath(W2A(m_materialimagepath));
	string materialdeleted(W2A(m_materialdeleted));
	string materialupdatetime(W2A(m_updatetime));
	string materialsizex(W2A(m_materialsizex));
	string materialsizey(W2A(m_materialsizey));
	string materialprice(W2A(m_materialprice));
	std::string ccc = "ddddd";

	std::string insertSql = "insert into MaterialInfo values (" + materialid + ",'" + materialname + "'," + materialnodeid + ",'" + materialstyle + "','" + materialpath + "'," + materialdeleted + ",'" + materialupdatetime + "'," +
		materialsizex + "," + materialsizey + "," + materialprice + ")";
	wchar_t*	changeInsert = StringTWchar(insertSql);
	char *rtnSql = AnsiToUTF_8(changeInsert);
	CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
	std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
	const char* path = Unicode2Utf8(unic_DataBasePath);
	rc = sqlite3_open(path, &db);
	if (rc == SQLITE_OK)
	{
		//	MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
		/****************************************************************/
		rc = sqlite3_exec(db, rtnSql, NULL, NULL, &errMsg);            //插入一条数据;
		if (rc == SQLITE_OK)
		{
			//AfxMessageBox(_T("添加成功!"));
			SetDlgItemText(IDC_INSERT_STATUS, _T("添加成功!"));
		}
		else
			AfxMessageBox(_T("添加失败!"));
	}
	//关闭数据库
	sqlite3_close(db);
}

void CMateriaManagementDlg::OnEnChangeInsertStatus()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
}
bool CMateriaManagementDlg::DirDelete(CString &str)
{
	namespace fs = boost::filesystem;
	CString dirName = utilProductDir(_T("product\\") + str);
	USES_CONVERSION;
	std::string  del(W2A(dirName));
	namespace fs = boost::filesystem;
	fs::path ps(del);
	fs::path path = ps;
	try
	{
		fs::remove_all(path);
		return true;
	}
	catch (std::exception e)
	{
		e.what();
		return false;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值